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個),太多時使用結構指針。
把比較小的被調用函數和調用函數放在同一個源文件中,并且要先定義,后調用。
建議一個新的局部變量來保存公共表達式的值,而且要避免使用局部變量的地址。
結構體元素要按照元素大小從小到大排列,內嵌的大的結構體使用指針。由于位填充方式編譯器相關,可以人工對齊結構體內部元素。枚舉類型編譯器相關,所以在結構體中要謹慎使用。
位域會明顯減低效率,應盡量避免使用。
總結
以上是生活随笔為你收集整理的ARM 嵌入式系统开发 - 软件设计与优化的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ARM与嵌入式Linux的入门建议
- 下一篇: 变频器