《大連理工大學軟件學院》由會員分享,可在線閱讀,更多相關《大連理工大學軟件學院(54頁珍藏版)》請在裝配圖網上搜索。
1、1TM 1 n大連理工大學軟件學院 邱鐵辦公樓409Tel:87571521E_mail: 參考教材:ARM嵌入式系統(tǒng)結構與編程 清華大學出版社2009年3月出版ARM嵌 入 式 系 統(tǒng) 結 構 與 編 程 2TM 第8章 ARM匯編語言與嵌入式C混合編程本章首先簡要的介紹了嵌入式C語言的編程規(guī)范,嵌入式開發(fā)中常用的位運算與控制位域及在嵌入式C程序設計中要注意的問題,為讀者進行嵌入式C程序設計打基礎。然后介紹在ARM匯編語言與嵌入式C語言進行相互調用的標準(AAPCS),并以大量的實例說明了相互調用應注意的問題。 3TM 3 內容提要81 嵌入式C編程規(guī)范82 嵌入式C程序設計中的位運算83
2、嵌入式C程序設計中的幾點說明84 嵌入式C程序設計格式85 過程調用標準ATPCS與AAPCS86 ARM匯編語言與嵌入式C混合編程 4TM 4 8.1 嵌入式C編程規(guī)范n在當前的嵌入式開發(fā)中,嵌入式C語言是最為常見的程序設計語言,對于程序員來說,能夠完成相應功能的代碼并不一定是優(yōu)秀的代碼。n優(yōu)秀的代碼還要具備易讀性、易維護性、具有可移植和高可靠性。 5TM 5 8.1.1 嵌入式C程序書寫規(guī)范n排版規(guī)則如下: n(1)程序塊要采用縮進風格編寫 n(2)較長的語句(例如超過80個字符)要分成多行書寫 n(3)循環(huán)、判斷等語句中若有較長的表達式或語句,則要進行適應的劃分 n(4)若函數或過程中參
3、數較長,也要進行適當的劃分。n(5)一般不要把多個短語句寫在一行中 n(6)程序塊的分界符語句的大括號“”與“”一般獨占一行并且在同一列 6TM 6 書寫規(guī)范示例: 7TM 7 8.1.2 命名規(guī)則n (1)標識符的名稱要簡明,能夠表達出確切的含義,可以使用完整的單詞或通??梢岳斫獾目s寫。n(2)如果在命名中使用特殊約定或縮寫,則要進行注釋說明。 n(3)對于變量命名,一般不取單個字符 ,例如i、j、k. n(4)函數名一般以大寫字母開頭;所有常量名字母統(tǒng)一用大寫。 8TM 8 8.1.3 注釋說明n注釋有助于程序員理解程序的整體結構,也便于以后程序代碼的維護與升級。常用的規(guī)則如下: n(1)
4、注釋語言必須準確、簡潔且容易理解;n(2)程序代碼源文件頭部應進行注釋說明 ;n(3)函數頭部應進行注釋;n(4)程序中所用到的特定含義的常量、變量,在聲明時都要加以注釋 ; 9TM 9 n(5)對于宏定義、數據結構聲明,如果其命名不是充分自注釋的,也要加以注釋。n(6)如果注釋單獨占用一行,與其被注釋的內容進行相同的縮進方式,一般將注釋與其上面的代碼用空行隔開 n(7)程序代碼修改時,其注釋也要及時修改,一定要保證代碼與注釋保持一致。 10TM 10 命名規(guī)則示例: 11TM 11 8.2 嵌入式C程序設計中的位運算n在嵌入式程序設計中,位操作是最常用的運算之一,因為在很多情況下要對寄存器中
5、的某位或某個管腳進行操作,這些都需要用位操作來完成。 12TM 12 8.2.1 按位與操作n按位與運算符“n printf(numbert exp2t exp3t exp4n);n printf(-t-t-t-n); n for(n=1;n=MAX_POWER;n+)n printf(%2dt %3dt %4dt %5dn,n,SQR(n),CUBE(n),QUAD(n);n 39TM 39 n程序運行結果 40TM 40 n條件編譯n (1). 形式1:#ifdef 標識符程序段1#else程序段2#endif 41TM 41 n(2). 形式2n#ifndef 標識符n程序段1n#els
6、en程序段2n#endif 42TM 42 n (3). 形式3n #ifdef 表達式1程序段1n #elif 表達式2程序段2n #elsen 程序段3n #endif 43TM 43 8.4嵌入式C程序設計格式n8.4.1 可重入函數n8.4.2 中斷處理程序n8.4.3 模塊化程序設計 44TM 44 8.4.1 可重入函數 n如果某個函數可以被多個任務并發(fā)使用,而不會造成數據錯誤,我們就說這個函數具有可重入性(reentrant) 。 45TM 45 n可重入函數可以使用局部變量,也可以使用全局變量。n如果使用全局變量,則應通過關中斷、信號量(即P、V操作)等手段對其加以保護 46T
7、M 46 示例解析: n分析下面的函數是否具有可重入性 n static int tmp;n void swap(int* a, int* b) n n tmp=*a; n *a=*b; n *b=tmp;n 47TM 47 n void swap(int* a, int* b) n n int tmp;n tmp=*a; n *a=*b; n *b=tmp;n 48TM 48 在操作系統(tǒng)中,通過信號量機制使得函數具有可重入性:n static int tmp;n void swap(int* a, int* b) n n 申請信號量操作n tmp=*a; n *a=*b; n *b=tmp;
8、 n 釋放信號量操作 n 49TM 49 8.4.2 中斷處理程序n在編寫中斷服務程序時需要滿足如下要求:n(1)不能向中斷服務程序傳遞參數;n(2)中斷服務程序沒有返回值;n(3)中斷服務程序應要盡可能短,來減少中斷服務程序的處理時間,保證實時系統(tǒng)的性能。 50TM 50 8.4.3 模塊化程序設計n嵌入式C程序設計主要采用模塊化設計方法,將系統(tǒng)內的任務進行合理的劃分,將具有同一屬性或相同類別的代碼歸為一類組成模塊,每個模塊的功能相對獨立。n將整個軟件系統(tǒng)分為多個模塊,編程思路就會很清晰。 51TM 51 嵌入式系統(tǒng)軟件模塊劃分 52TM 52 示例解析 n應用舉例見教材ARM嵌入式系統(tǒng)結構與編程第202頁例8-14 53TM 第8章 ARM匯編語言與嵌入式C混合編程上半部完 54TM 54 下半部內容提示85 過程調用標準ATPCS與AAPCS86 ARM匯編語言與嵌入式C混合編程