ARM 嵌入式系统开发 - 软件设计与优化

ARM 的非 RISC 特征

允许特定指令的执行周期可变

增加桶形移位器

使用 16 Thumb 指令

使用条件执行指令

使用增强 DSP 指令

Jazelle

Jazelle ARM 引进的第 3 种指令集。执行 8 位指令,硬件完成超过 60% Java 字节代码,其余代码由软件完成。 为了执行 Java 字节码,需要外加一个 Java 虚拟机的特殊版本。Jazelle 是一个封闭的指令集,没有公开。要从 ARM SUN 获得许可,以得到额外的软件。

ARM PC

在指令执行阶段, pc 总是指向该指令地址加 8 字节的地址。当处理器处于 Thumb 模式时, pc 的值为正在执行指令的地址加 4

3个值得注意的流水线特征

第一,   执行一条分支指令或直接修改 pc 而发生跳转时,会使 ARM 内核清空流水线。

第二,   ARM10 使用分支预测技术,通过预测可能的分支并在指令执行前装载新的分支地址,从而减小了清空流水线的影响。

第三,   即使产生了一个中断,一条处于“执行”阶段的指令也将会完成。流水线里其它指令将会被放弃,而处理器将从向量表的适当入口开始填充流水线。

高效的 C 编程

大多数 ARM 数据处理操作都是 32 位的。基于这个原因,局部变量应该尽可能使用 32 的类型。(int 或者 long)同样,函数参数以及返回值也应该使用 32 位类型。

除法运算时使用无符号数执行速度更快。

对于存放在主存储器中的数组和全局变量,应尽可能地使用小尺寸的数据类型。可以节省空间。

使用无符号的循环计数值,For(I=64;I!=0;I--) for(I=0;I<64;I++)效率高很多!

至少执行一次的循环使用 do-while 效率比较高。

局部变量不要太多(不要超过12个),重要变量和常用变量要使用寄存器。最内层循环变量比较重要。

函数参数不要超过4个(C++不要超过3个),太多时使用结构指针。

把比较小的被调用函数和调用函数放在同一个源文件中,并且要先定义,后调用。

建议一个新的局部变量来保存公共表达式的值,而且要避免使用局部变量的地址。

结构体元素要按照元素大小从小到大排列,内嵌的大的结构体使用指针。由于位填充方式编译器相关,可以人工对齐结构体内部元素。枚举类型编译器相关,所以在结构体中要谨慎使用。

位域会明显减低效率,应尽量避免使用。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值