1. 程式人生 > >ARM使用C語言程式設計基本規則

ARM使用C語言程式設計基本規則

在應用系統的程式設計中,若所有的程式設計任務均由組合語言來完成,其工作量巨大,並且不易移植。由於ARM的程式執行速度較高,儲存器的儲存速度和儲存量也很高,因此,C語言的特點充分發揮,使得應用程式的開發時間大為縮短,程式碼的移植十分方便,程式的重複使用率提高,程式架構清晰易懂,管理較為容易等等。因此,C語言的在ARM程式設計中具有重要地位。
在ARM程式的開發中,需要大量讀寫硬體暫存器,儘量縮短程式的執行時間,因此部分初始化程式碼一般使用匯編語言來編寫,比如ARM的啟動程式碼,ARM的作業系統的移植程式碼等,除此之外,絕大多數程式碼可以使用C語言來完成。
C語言使用的是標準的C語言,ARM的開發環境實際上就是嵌入了一個C語言的整合開發環境,只不過這個開發環境和ARM的硬體緊密相關。
在使用C語言時, 有時要用到和組合語言的混合程式設計。當彙編程式碼較為簡潔,則可使用直接內嵌彙編的方法,否則,將彙編程式以檔案的形式加入專案當中,通過ATPCS(ARM/Thumb Procedure Call Standard)的規定與C程式相互呼叫與訪問。
ATPCS,就是ARM、Thumb的過程呼叫標準,它規定了一些子程式間呼叫的基本規則。如暫存器的使用規則,堆疊的使用規則,引數的傳遞規則等。
在C程式和ARM的彙編程式之間相互呼叫必須遵守ATPCS。而使用ADS的C語言編譯器編譯的C語言子程式滿足使用者指定的ATPCS的規則。但是,對於組合語言來說,完全要依賴使用者保證各個子程式遵循ATPCS的規則。具體來說,組合語言的子程式應滿足下面3個條件:
.  在子程式編寫時,必須遵守相應的ATPCS規則;
.  堆疊的使用要遵守相應的ATPCS規則;
.  在彙編編譯器中使用-atpcs選項。
基本的ATPCS規定,詳情請見相關PDF文件,簡單說明就是:
1. 彙編程式呼叫C程式
.  彙編程式的設定要遵循ATPCS規則,保證程式呼叫時引數正確傳遞。
.  在彙編程式中使用IMPORT偽指令宣告將要呼叫的C程式函式。
.  在呼叫C程式時,要正確設定入口引數,然後使用BL呼叫。
2. C程式調用匯程式設計序
.  彙編程式的設定要遵循ATPCS規則,保證程式呼叫時引數正確傳遞。
.  在彙編程式中使用EXPORT偽指令宣告本子程式,使其他程式可以呼叫此子程式。
.  在C語言中使用extern關鍵字宣告外部函式(宣告要呼叫的彙編子程式)。
在C語言的環境內開發應用程式,一般需要一個彙編的啟動程式,從彙編的啟動程式,跳到C語言下的主程式,然後,執行C程式,在C環境下讀寫硬體的暫存器,一般是通過巨集呼叫,在每個專案檔案的Startup2410/INC目錄下都有一個2410addr.h的標頭檔案,那裡面定義了所有關於2410的硬體暫存器的巨集,對巨集讀寫,就能操作2410的硬體,具體的程式設計規則同標準C語言。