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