ARM 嵌入式系统开发 - 软件设计与优化
ARM 的非 RISC 特征
允許特定指令的執(zhí)行周期可變
增加桶形移位器
使用 16 位 Thumb 指令
使用條件執(zhí)行指令
使用增強 DSP 指令
Jazelle
Jazelle 是ARM 引進的第 3 種指令集。執(zhí)行 8 位指令,硬件完成超過 60% 的 Java 字節(jié)代碼,其余代碼由軟件完成。 為了執(zhí)行 Java 字節(jié)碼,需要外加一個 Java 虛擬機的特殊版本。Jazelle 是一個封閉的指令集,沒有公開。要從 ARM 及 SUN 獲得許可,以得到額外的軟件。
ARM 的 PC
在指令“執(zhí)行”階段, pc 總是指向該指令地址加 8 字節(jié)的地址。當處理器處于 Thumb 模式時, pc 的值為正在執(zhí)行指令的地址加 4
3個值得注意的流水線特征
第一,?? 執(zhí)行一條分支指令或直接修改 pc 而發(fā)生跳轉(zhuǎn)時,會使 ARM 內(nèi)核清空流水線。
第二,?? ARM10 使用分支預(yù)測技術(shù),通過預(yù)測可能的分支并在指令執(zhí)行前裝載新的分支地址,從而減小了清空流水線的影響。
第三,?? 即使產(chǎn)生了一個中斷,一條處于“執(zhí)行”階段的指令也將會完成。流水線里其它指令將會被放棄,而處理器將從向量表的適當入口開始填充流水線。
高效的 C 編程
大多數(shù) ARM 數(shù)據(jù)處理操作都是 32 位的。基于這個原因,局部變量應(yīng)該盡可能使用 32 的類型。(int 或者 long)同樣,函數(shù)參數(shù)以及返回值也應(yīng)該使用 32 位類型。
除法運算時使用無符號數(shù)執(zhí)行速度更快。
對于存放在主存儲器中的數(shù)組和全局變量,應(yīng)盡可能地使用小尺寸的數(shù)據(jù)類型。可以節(jié)省空間。
使用無符號的循環(huán)計數(shù)值,For(I=64;I!=0;I--) 比 for(I=0;I<64;I++)效率高很多!
至少執(zhí)行一次的循環(huán)使用 do-while 效率比較高。
局部變量不要太多(不要超過12個),重要變量和常用變量要使用寄存器。最內(nèi)層循環(huán)變量比較重要。
函數(shù)參數(shù)不要超過4個(C++不要超過3個),太多時使用結(jié)構(gòu)指針。
把比較小的被調(diào)用函數(shù)和調(diào)用函數(shù)放在同一個源文件中,并且要先定義,后調(diào)用。
建議一個新的局部變量來保存公共表達式的值,而且要避免使用局部變量的地址。
結(jié)構(gòu)體元素要按照元素大小從小到大排列,內(nèi)嵌的大的結(jié)構(gòu)體使用指針。由于位填充方式編譯器相關(guān),可以人工對齊結(jié)構(gòu)體內(nèi)部元素。枚舉類型編譯器相關(guān),所以在結(jié)構(gòu)體中要謹慎使用。
位域會明顯減低效率,應(yīng)盡量避免使用。
總結(jié)
以上是生活随笔為你收集整理的ARM 嵌入式系统开发 - 软件设计与优化的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ARM与嵌入式Linux的入门建议
- 下一篇: 地下管线监控系统中互联网WebGL三维可