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