![第4章 嵌入式系統(tǒng)程序設(shè)計(jì)基礎(chǔ)(第二版)_第1頁(yè)](http://file4.renrendoc.com/view/3cc74b8d0b954f04da9d6ec829849dfd/3cc74b8d0b954f04da9d6ec829849dfd1.gif)
![第4章 嵌入式系統(tǒng)程序設(shè)計(jì)基礎(chǔ)(第二版)_第2頁(yè)](http://file4.renrendoc.com/view/3cc74b8d0b954f04da9d6ec829849dfd/3cc74b8d0b954f04da9d6ec829849dfd2.gif)
![第4章 嵌入式系統(tǒng)程序設(shè)計(jì)基礎(chǔ)(第二版)_第3頁(yè)](http://file4.renrendoc.com/view/3cc74b8d0b954f04da9d6ec829849dfd/3cc74b8d0b954f04da9d6ec829849dfd3.gif)
![第4章 嵌入式系統(tǒng)程序設(shè)計(jì)基礎(chǔ)(第二版)_第4頁(yè)](http://file4.renrendoc.com/view/3cc74b8d0b954f04da9d6ec829849dfd/3cc74b8d0b954f04da9d6ec829849dfd4.gif)
![第4章 嵌入式系統(tǒng)程序設(shè)計(jì)基礎(chǔ)(第二版)_第5頁(yè)](http://file4.renrendoc.com/view/3cc74b8d0b954f04da9d6ec829849dfd/3cc74b8d0b954f04da9d6ec829849dfd5.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第4章嵌入式系統(tǒng)程序設(shè)計(jì)基礎(chǔ)
本章介紹基于ARM的嵌入式系統(tǒng)程序設(shè)計(jì)的一些基本概念,如ARM匯編語(yǔ)言的偽指令、匯編語(yǔ)言的語(yǔ)句格式和匯編語(yǔ)言的程序結(jié)構(gòu)等,同時(shí)介紹嵌入式C語(yǔ)言設(shè)計(jì)基礎(chǔ)、C與匯編語(yǔ)言的混合編程等問題。
主要內(nèi)容匯編語(yǔ)言的語(yǔ)句格式
匯編語(yǔ)言的程序結(jié)構(gòu)
ARM編譯器所支持的偽指令
34.134.234.334.4嵌入式C語(yǔ)言程序設(shè)計(jì)4.1ARM編譯器所支持的偽指令
在ARM的匯編程序中,有如下幾種偽指令:符號(hào)定義偽指令數(shù)據(jù)定義偽指令匯編控制偽指令宏指令以及其他偽指令返回符號(hào)定義偽指令(1)
符號(hào)定義偽指令用于定義ARM匯編程序中的變量、對(duì)變量賦值以及定義寄存器的別名等操作。1.GBLA、GBLL和GBLS格式:GBLA(GBLL或GBLS)全局變量名符號(hào)定義偽指令(2)2.LCLA、LCLL和LCLS格式:LCLA(LCLL或LCLS)局部變量名3.SETA、SETL和SETS格式:變量名SETA(SETL或SETS)表達(dá)式
符號(hào)定義偽指令(3)4.RLIST格式:名稱 RLIST{寄存器列表}示例:RegList RLIST {R0-R5,R8,R10};將寄存器列表名稱定義為RegList,可在ARM指令LDM/STM中通過該名稱訪問寄存器列表。數(shù)據(jù)定義偽指令(1)
(1)DCB (2)DCW(DCWU) (3)DCD(DCDU) (4)DCFD(DCFDU)分配一片連續(xù)的字節(jié)存儲(chǔ)單元分配一片連續(xù)的半字存儲(chǔ)單元分配一片連續(xù)的字存儲(chǔ)單元為雙精度的浮點(diǎn)數(shù)分配一片連續(xù)的字存儲(chǔ)單元數(shù)據(jù)定義偽指令(2)(5)DCFS(DCFSU) (6)DCQ(DCQU) (7)SPACE
(8)MAP
(9)FIELD 為單精度的浮點(diǎn)數(shù)分配一片連續(xù)的字存儲(chǔ)單元分配一片以8字節(jié)為單位的連續(xù)的存儲(chǔ)單元用于分配一片連續(xù)的存儲(chǔ)單元用于定義一個(gè)結(jié)構(gòu)化的內(nèi)存表首地址用于定義一個(gè)結(jié)構(gòu)化的內(nèi)存表的數(shù)據(jù)域匯編控制偽指令
匯編控制偽指令用于控制匯編程序的執(zhí)行流程,常用的匯編控制偽指令包括以下幾條:(1)IF、ELSE、ENDIF(2)WHILE、WEND(3)MACRO、MEND(4)MEXIT示例:GBLL Test ……IF Test=TRUE
指令序列1ELSE
指令序列2ENDIFGBLACounterSETA 3 ……WHILE Counter<10
指令序列WEND語(yǔ)法格式:$標(biāo)號(hào) 宏名 $參數(shù)1,$參數(shù)2,……MEXIT用于從宏定義中跳轉(zhuǎn)出去其他常用的偽指令A(yù)REAALIGNCODE16、CODE32ENTRYENDEQUEXPORT(或GLOBAL)IMPORTEXTERNGET(或INCLUDE)INCBINRNROUT4.2匯編語(yǔ)言的語(yǔ)句格式ARM(Thumb)匯編語(yǔ)言的語(yǔ)句格式為:{標(biāo)號(hào)} {指令或偽指令} {;注釋}每一條指令的助記符可以全部用大寫、或全部用小寫,但不許在一條指令中大、小寫混用
長(zhǎng)語(yǔ)句若分為多行來書寫,在行的末尾用“\”表示下一行與本行為同一條語(yǔ)句返回匯編語(yǔ)言程序中常用的符號(hào)
符號(hào)的命名必須遵循以下的約定:符號(hào)區(qū)分大小寫,同名的大、小寫符號(hào)會(huì)被編譯器認(rèn)為是兩個(gè)不同的符號(hào)。符號(hào)在其作用范圍內(nèi)必須唯一。自定義的符號(hào)名不能與系統(tǒng)的保留字相同。符號(hào)名不應(yīng)與指令或偽指令同名。匯編語(yǔ)言程序中的表達(dá)式和運(yùn)算符表達(dá)式一般由變量、常量、運(yùn)算符和括號(hào)構(gòu)成,運(yùn)算次序遵循如下的優(yōu)先級(jí):(1)優(yōu)先級(jí)相同的雙目運(yùn)算符的運(yùn)算順序?yàn)閺淖蟮接摇?2)相鄰的單目運(yùn)算符的運(yùn)算順序?yàn)閺挠业阶?,且單目運(yùn)算符的優(yōu)先級(jí)高于其他運(yùn)算符。(3)括號(hào)運(yùn)算符的優(yōu)先級(jí)最高。數(shù)字表達(dá)式及運(yùn)算符(1)
“+”、“-”、“×”、“/”及“MOD”算術(shù)運(yùn)算符示例:X/Y表示X除以Y的商?!癛OL”、“ROR”、“SHL”及“SHR”移位運(yùn)算符示例:X:ROL:Y 表示將X循環(huán)左移Y位。
“AND”、“OR”、“NOT”及“EOR”按位邏輯運(yùn)算符示例::NOT:Y 表示將Y按位作邏輯非的操作。邏輯表達(dá)式及運(yùn)算符(2)
“=”、“>”、“<”、“>=”、“<=”、“/=”、“<>”運(yùn)算符示例: X<>Y 表示X不等于Y。“LAND”、“LOR”、“LNOT”及“LEOR”運(yùn)算符示例:X:LAND:Y 表示將X和Y作邏輯與的操作字符串表達(dá)式及運(yùn)算符(3)
LEN運(yùn)算符:返回字符串的長(zhǎng)度示例::LEN:X
CHR運(yùn)算符:將0~255之間的整數(shù)轉(zhuǎn)換為一個(gè)字符示例::CHR:MSTR運(yùn)算符:將一個(gè)數(shù)字表達(dá)式或邏輯表達(dá)式轉(zhuǎn)換為一個(gè)字符串示例::STR:X字符串表達(dá)式及運(yùn)算符(4)LEFT運(yùn)算符:返回某個(gè)字符串左端的一個(gè)子串示例:X:LEFT:YRIGHT運(yùn)算符:返回某個(gè)字符串右端的一個(gè)子串示例:X:RIGHT:YCC運(yùn)算符:將兩個(gè)字符串連接成一個(gè)字符串示例:X:CC:Y與寄存器和程序計(jì)數(shù)器(PC)相關(guān)的表達(dá)式及運(yùn)算符
BASE運(yùn)算符:返回基于寄存器的表達(dá)式中寄存器的編號(hào)示例::BASE:XINDEX運(yùn)算符:返回基于寄存器的表達(dá)式中相對(duì)于其基址寄存器的偏移量示例::INDEX:X其他常用運(yùn)算符
?運(yùn)算符:返回某代碼行所生成的可執(zhí)行代碼的長(zhǎng)度示例:?XDEF運(yùn)算符:符判斷是否定義某個(gè)符號(hào)示例::DEF:X4.3ARM匯編語(yǔ)言程序結(jié)構(gòu)本節(jié)的重點(diǎn)在于了解ARM匯編語(yǔ)言的基本程序結(jié)構(gòu)、ARM匯編語(yǔ)言子程序的調(diào)用方法。
返回ARM匯編語(yǔ)言的基本程序結(jié)構(gòu)程序段
組織代碼的單位數(shù)據(jù)段代碼段
映象文件可執(zhí)行編譯鏈接
匯編語(yǔ)言源程序的基本結(jié)構(gòu)示例AREA Init,CODE,READONLYENTRYStartLDR R0,=0x3FF5000LDR R1,0xFFSTR R1,[R0]LDR R0,=0x3FF5008LDR R1,0x01STR R1,[R0]……ENDAREA偽指令定義一個(gè)段名為Init的代碼段,屬性為只讀
ENTRY偽指令標(biāo)識(shí)程序的入口點(diǎn)
指令序列END偽指令,指示代碼段的結(jié)束匯編語(yǔ)言的子程序調(diào)用
在ARM匯編語(yǔ)言程序中,子程序的調(diào)用一般是通過BL指令來實(shí)現(xiàn)的。格式:BL 子程序名4.4嵌入式C語(yǔ)言程序設(shè)計(jì)嵌入式C語(yǔ)言程序設(shè)計(jì)是利用基本的C語(yǔ)言知識(shí),面向嵌入式工程實(shí)際應(yīng)用進(jìn)行程序設(shè)計(jì)的語(yǔ)言。C語(yǔ)言是一種結(jié)構(gòu)化的程序設(shè)計(jì)語(yǔ)言,它的優(yōu)點(diǎn)是運(yùn)行速度快、編譯效率高、移植性好和可讀性強(qiáng)。返回4.4.1嵌入式C語(yǔ)言設(shè)計(jì)基礎(chǔ)1.預(yù)處理命令的應(yīng)用
預(yù)處理命令可以改進(jìn)程序設(shè)計(jì)環(huán)境,提高編程效率。C提供的預(yù)處理功能主要有以下三種:宏定義、文件包含和條件編譯。
宏定義1、
[不帶參數(shù)的宏定義]:用一個(gè)指定的標(biāo)識(shí)符來代表一個(gè)字符串。其一般形式為:
#define
宏標(biāo)識(shí)符
宏體
如:#define
PI
3.1415926
宏定義2、
[帶參數(shù)的宏定義]:不僅進(jìn)行簡(jiǎn)單的字符替換,還要進(jìn)行參數(shù)替換。其一般形式為:
#define
宏標(biāo)識(shí)符(參數(shù)表)
宏體
如:#define
S(a,b)
(a)*(b)宏定義說明宏定義不是C語(yǔ)句,不必在行末加分號(hào),否則,會(huì)連分號(hào)一起進(jìn)行置換;在進(jìn)行宏定義時(shí),可以引用已定義的宏名,可以層層置換;對(duì)程序中用雙括號(hào)括起來的字符串內(nèi)的字符,即使與宏名相同,也不進(jìn)行置換;宏定義只做字符替換,不分配內(nèi)存空間。例題題目:用預(yù)處理指令#define聲明一個(gè)常數(shù),用以表明1年中有多少秒(忽略閏年問題)。
分析:
兩種錯(cuò)誤寫法: #defineSECONDS60*60*24*365 #defineSECONDS(60*60*24*365)正確答案:
#defineSECONDS(60*60*24*365)UL
文件包含
定義:“文件包含”處理是指一個(gè)源文件可以將另外一個(gè)源文件的全部?jī)?nèi)容包含進(jìn)來,即將另外的文件包含到本文件之中。
其一般形式為:
#include
"文件名"
或
#include
<文件名>條件編譯
條件編譯一般有以下兩種形式:
a) #ifdef
標(biāo)識(shí)符
程序段1
#else
程序段2
#endif
b) #ifndef
標(biāo)識(shí)符
程序段1
#else
程序段2
#endif
示例#ifdefBIG_ENDIAN//大端模式下RTC寄存器地址宏定義#definerRTCCON(*(volatileunsignedchar*)0x1d70043)#definerRTCALM(*(volatileunsignedchar*)0x1d70053)#definerALMSEC(*(volatileunsignedchar*)0x1d70057)……#else//小端模式下RTC寄存器地址宏定義#definerRTCCON(*(volatileunsignedchar*)0x1d70040)#definerRTCALM(*(volatileunsignedchar*)0x1d70050)#definerALMSEC(*(volatileunsignedchar*)0x1d70054)……#endif2.嵌入式系統(tǒng)中常用的C語(yǔ)言語(yǔ)句
C語(yǔ)言的語(yǔ)句有多種:如表達(dá)式語(yǔ)句、復(fù)合語(yǔ)句、條件語(yǔ)句、循環(huán)語(yǔ)句、swith語(yǔ)句、break語(yǔ)句、continue語(yǔ)句、返回語(yǔ)句等。嵌入式系統(tǒng)開發(fā)中最為常用的是條件語(yǔ)句、swith語(yǔ)句和循環(huán)語(yǔ)句,這些語(yǔ)句的用法和一般C語(yǔ)言中類似。條件語(yǔ)句
條件語(yǔ)句有兩種格式,分別是兩重選擇和多重選擇,如下所述。switch語(yǔ)句
循環(huán)語(yǔ)句
在C語(yǔ)言中有3種循環(huán)語(yǔ)句:for循環(huán)語(yǔ)句、while循環(huán)語(yǔ)句和dowhile循環(huán)語(yǔ)句,根據(jù)具體的情況選擇使用。for循環(huán)語(yǔ)句格式:例題:使用for循環(huán)語(yǔ)句控制在8段數(shù)碼管上循環(huán)顯示0~F。voidDigit_Led_Display(void){inti;for(i=0;i<16;i++){LED8ADDR=Symbol[value];//LED8ADDR為8段數(shù)碼管地址,//Symbol[]中為段碼值Delay(10000);//延時(shí)
}}循環(huán)語(yǔ)句
例題:在嵌入式系統(tǒng)中沒有程序的結(jié)尾,通常在主函數(shù)中有一個(gè)死循環(huán),如何實(shí)現(xiàn)死循環(huán)?
while(1){…}while循環(huán)語(yǔ)句格式:dowhile循環(huán)語(yǔ)句格式:4.4.2匯編語(yǔ)言與C語(yǔ)言的混合編程
匯編語(yǔ)言與C/C++的混合編程通常有以下幾種方式:(1)在C/C++代碼中嵌入?yún)R編指令。(2)在匯編程序和C/C++的程序之間進(jìn)行變量的互訪。(3)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 超聲造影在乳腺良惡性腫瘤鑒別診斷中的應(yīng)用
- 暴力抗議事件應(yīng)急預(yù)案
- 提升醫(yī)院管理的關(guān)鍵策略
- 二零二五版?zhèn)€人二手房交易合同(含車位使用權(quán))2篇
- 銷售活動(dòng)安全管理方案
- 老舊小區(qū)水管裝修方案
- 二零二五版新型土地廠房產(chǎn)權(quán)交易合同3篇
- 二零二五版協(xié)議離婚子女撫養(yǎng)權(quán)糾紛解決合同3篇
- 二零二五年度個(gè)人信托合同范本
- 透平機(jī)拆除施工方案
- 2025年中國(guó)南方航空股份有限公司招聘筆試參考題庫(kù)含答案解析
- 商務(wù)部發(fā)布《中國(guó)再生資源回收行業(yè)發(fā)展報(bào)告(2024)》
- 廣東省佛山市2025屆高三高中教學(xué)質(zhì)量檢測(cè) (一)化學(xué)試題(含答案)
- 項(xiàng)目管理實(shí)施規(guī)劃-無錫萬象城
- 浙大一院之江院區(qū)就診指南
- 離婚協(xié)議書電子版下載
- 相似三角形判定專項(xiàng)練習(xí)30題(有答案)
- 2023學(xué)年完整公開課版mydreamjob作文教學(xué)
- 巴基斯坦介紹課件
- 農(nóng)村個(gè)人房屋抵押借款合同
- 中國(guó)周邊安全環(huán)境-中國(guó)人民大學(xué) 軍事理論課 相關(guān)課件
評(píng)論
0/150
提交評(píng)論