首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

ARM程序设计优化策略与技术 大小端模式(3)

ARM程序设计优化策略与技术 大小端模式(3)

1.3 指令集相关的优化方法  有时可以利用ARM7 指令集的特点对程序进行优化。
  (1)避免除法
  ARM 7 指令集中没有除法指令,其除法是通过调用C库函数实现的。一个32 位的除法通常需要20~140 个时钟周期。因此, 除法成了一个程序效率的瓶颈,应尽量避免使用。有些除法可用乘法代替,例如: if ( (x / y) > z)可变通为 if ( x> (y × z)) 。在能满足精度,且存储器空间冗余的情况下,也可考虑使用查表法代替除法。当除数为2 的幂次方时, 应用移位操作代替除法。
  (2)利用条件执行
  ARM指令集的一个重要特征就是所有的指令均可包含一个可选的条件码。当程序状态寄存器(PSR)中的条件码标志满足指定条件时,带条件码的指令才能执行。利用条件执行通常可以省去单独的判断指令,因而可以减小代码尺寸并提高程序效率。
  (3)使用合适的变量类型
  ARM 指令集支持有符号/ 无符号的8 位、16位、32位整型及浮点型变量。恰当的使用变量的类型,不仅可以节省代码,并且可以提高代码运行效率。应该尽可能地避免使用char、short型的局部变量,因为操作8 位/16 位局部变量往往比操作3 2 位变量需要更多指令,请对比下列3 个函数和它们的汇编代码。
  intwordinc(inta)wordinc
{ ADD a1,a1,#1
return a + 1; MOV pc,lr
} shortinc
shortshortinc(shorta) ADD a1,a1,#1
{ MOV a1,a1,LSL #16
return a + 1; MOV a1,a1,ASR #16
} MOV pc,lr
charcharinc(chara) charinc
{ ADD a1,a1,#1
return a + 1; AND a1,a1,#&ff
} MOV pc,lr
  可以看出, 操作3 2 位变量所需的指令要少于操作8位及16位变量。
  1.4 存储器相关的优化方法
  (1)用查表代替计算
  在处理器资源紧张而存储器资源相对富裕的情况下,可以用牺牲存储空间换取运行速度的办法。例如需要频繁计算正弦或余弦函数值时,可预先将函数值计算出来置于内存中供以后查找。
  (2)充分利用片内RAM
  一些厂商出产的ARM 芯片内集成有一定容量的RAM,如Atmel公司的AT91R40807 内有128KB 的RAM,夏普公司的LH75400/LH75401 内有32KB的RAM。处理器对片内RAM 的访问速度要快于对外部RAM 的访问,所以应尽可能将程序调入片内RAM中运行。若因程序太大无法完全放入片内RAM,可考虑将使用最频繁的数据或程序段调入片内RAM 以提高程序运行效率。
  1.5 编译器相关的优化方法
  多数编译器都支持对程序速度和程序大小的优化,有些编译器还允许用户选择可供优化的内容及优化的程度。相比前面的各种优化方法,通过设置编译器选项对程序进行优化不失为一种简单有效的途径。
  2 代码尺寸优化
  精简指令集计算机的一个重要特点是指令长度固定,这样做可以简化指令译码的过程,但却容易导致代码尺寸增加。为避免这个问
题,可以考虑采取以下措施来缩减程序代码量。
继承事业,薪火相传
返回列表