新闻中心

EEPW首页>嵌入式系统>设计应用> 基于ARM处理器的软件优化设计

基于ARM处理器的软件优化设计

作者: 时间:2016-12-02 来源:网络 收藏


2.4 选择字节

对于习惯使用高级语言编程的开发者,大都喜欢用if-then-else语句来控制程序流程.但高级语苦编写的程序最终都要转换为体现机器指令的汇编程序,往往一条高级语占语句需要转换成很多条汇编指令,除编程方便外,高级语言在执行效率和存储空间上都没有优势。Thumb-2指令中提供一条类似于if-then-else语句的指令,具体格式如表3所示。

使用SEL指令能够实现程序的流程控制,而且一条汇编指令实现了4条if-then-else语句的功能,只是每条分支只能为字符型数据赋值,相当于c语言中的4个条件运算符语句。

表3 SEL指令


2.5寄存器倒转

一些强调算法(如FFT)的程序通常要求把源寄存器的hit[n]赋值到目标寄存器的bit[31-n],比特倒转指令RBIT就能够很好地实现。如果不使用该指令,实现同样的功能会需要很多条移位指令和逻辑操作指令才能完成,同时还需要一个保存中间变量的寄存器。而使用比特反转指令能明显降低需要的指令的数目和节约寄存器。

Thumb-2指令中的寄存器倒转语句如表4所示,包含比特倒转、字节倒转及带符号倒转。

表4倒转指令集


对于一些编码/解码或加密/解密程序通常要求对数据进行高低字节互换,字节倒转指令REV 就能够很好地实现。既降低指令条目数量,又节省寄存器空间,提高软件执行效率。

2.6实现跳转表

使用跳转表来控制程序的执行方向足高级语言的一个常见特性,使用ARM和Thumb指令集都可以很好的实现这个功能。使用ARM指令集一般是为了生成高性能的代码,编泽器会以代码密度为代价对性能进行优化。而Thumb编译器则会使用压缩的数据表来尽可能的降低代码大小。

Thumb-2指令集引入了两条跳转表指令TBB和TBH,分别对应字节分支跳转和半字分支跳转。它综合了ARM/Thumb的优点,在压缩的数据表上可以使用最少的指令来实现跳转表功能,最终可以以最小的代码和数据实现最优的性能。

2.7 改善小额数值运算速度

对于普通的控制系统或数据采集系统,精度往往并不要求很高,12位数据已经足够,但ARM指令和Thumb指令都不提供12位立即数的相关指令(前文已经说明,ARM指令中的12位立即数的有效位数是8)。ThurIlb-2技术提供2条12位立即数参与加法和减法运算的指令,指令格式如表5所示,利用这2条指令能够改善数据处理速度。

表5 12位立即数的算术运算


特别是闭环控制系统,需要根据预设值和反馈值计算偏移量,并根据偏移量来控制被控对象。预设值通常是一个常量,在系统运行过程中都不会改变。习惯于高级语言编程的开发者喜欢使用宏定义的方式来设置该常量,但读取保存在内存中的常量会降低数据处理速度,如果把常量保存在寄存器当中则浪费一个非常宗贵寄存器。针对预设值不易改变的情况,直接使用12位立即数来表示该预设常量并直接参与算术运算的方式既可以节约存储空间,还能够改善数据处理速度,而且与12位AD转换器做反馈采样环节刚好对应。

2.8最大限度地使用寄存器

像ARM这样的load-store体系结构的处理器上,访问寄存器中的数据要比访问存储器中的数据效率高很多,为软件变量分配寄存器要远比分配存储空间性能优越。

ARM Cortex处理器共有14个通用寄存器,实际工程应用软件巾的变量数大多超出14个,但数值较小,可以把多个变量存放在一个寄存器当中。还可以让不同函数的局部变量对寄存器进行时分复用,以充分发挥寄存器的优势。

2.9其他

Thumb-2技术提供2条过零检测并跳转的指令CBZ和CBNZ。分别对应检测到零跳转或检测到非零跳转。该指令可以被用来替换常用的一个指令序列:与零比较,以及随后的跳转指令,这样的指令序列通常被用来检查指针是否为空。Thumb-2指令集中还增加了访问协处理器的指令,这样Thumb-2代码就可以直接支持欠量浮点防处理器,以及其他的协处理器。配合其他访问系统寄存器的指令。整个应用程序就都可以用Thumb-2指令来实现,不必再切换的ARM状态才能实现一些特殊的功能。

3 结束语

在一个应用程序中,要实现最好的性能.就需要编写优化的汇编程序。只不过是对性能影响最大的关键程序才值得优化。可以使用性能分析器或者指令周期计数工具来找这些敏感的关键程序段。优化程序的基本思想就是尽可能地压缩代码尺寸以节省存储空间,尽可能提高程序的执行效率以获得更高的性能,并降低功耗。

上一页 1 2 下一页

关键词:ARM处理器软件优

评论


技术专区

关闭