九九热最新网址,777奇米四色米奇影院在线播放,国产精品18久久久久久久久久,中文有码视频,亚洲一区在线免费观看,国产91精品在线,婷婷丁香六月天

第五章 C及匯編語(yǔ)言的混合編程

上傳人:fgh****35 文檔編號(hào):247447250 上傳時(shí)間:2024-10-18 格式:PPT 頁(yè)數(shù):24 大?。?8KB
收藏 版權(quán)申訴 舉報(bào) 下載
第五章 C及匯編語(yǔ)言的混合編程_第1頁(yè)
第1頁(yè) / 共24頁(yè)
第五章 C及匯編語(yǔ)言的混合編程_第2頁(yè)
第2頁(yè) / 共24頁(yè)
第五章 C及匯編語(yǔ)言的混合編程_第3頁(yè)
第3頁(yè) / 共24頁(yè)

下載文檔到電腦,查找使用更方便

15 積分

下載資源

還剩頁(yè)未讀,繼續(xù)閱讀

資源描述:

《第五章 C及匯編語(yǔ)言的混合編程》由會(huì)員分享,可在線閱讀,更多相關(guān)《第五章 C及匯編語(yǔ)言的混合編程(24頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。

1、,單擊此處編輯母版文本樣式,第二級(jí),第三級(jí),第四級(jí),第五級(jí),*,單擊此處編輯母版標(biāo)題樣式,第五章,C/C+,及匯編語(yǔ)言的混合編程,5.1 ARM C/C+,編譯器,5.2,在,C/C+,程序中內(nèi)嵌匯編指令,5.3,從匯編程序中訪問(wèn),C,程序變量,5.4,匯編程序、,C,程序及,C+,程序相互調(diào)用,5.5,嵌入式,C,編程,1,5.1 ARM C/C+,編譯器,ARM,集成開(kāi)發(fā)環(huán)境中包含的,C/C+,編譯器。,編譯器,名稱,編譯器,種類(lèi),源文件,類(lèi)型,源文件,后綴,輸出目標(biāo)文件類(lèi)型,armcc,C,C,*.C,32,位,ARM,代碼,tcc,C,C,*.C,32,位,Thumb,代碼,armcp

2、p,C+,C/C+,*.C/*.C+,32,位,ARM,代碼,tcpp,C+,C/C+,*.C/*.C+,32,位,Thumb,代碼,2,5.1 ARM C/C+,編譯器,ARM,集成開(kāi)發(fā)環(huán)境中,C/C+,語(yǔ)言的庫(kù)包括:,ARM C,語(yǔ)言庫(kù),:,ARM C,語(yǔ)言庫(kù)包括標(biāo)準(zhǔn)的,C,語(yǔ)言函數(shù)集。,Rogue Wave C+,庫(kù):,包含標(biāo)準(zhǔn),C+,函數(shù)及基本,C+,對(duì)象。,支持庫(kù),:,支持庫(kù)提供了對(duì)不同種類(lèi)的體系及處理器的支持。,3,5.2,在,C/C+,程序中內(nèi)嵌匯編指令,在,CC+,程序中使用內(nèi)嵌的匯編指令的語(yǔ)法格式,:,在,ARM C,語(yǔ)言程序中,使用關(guān)鍵字,_,asm,來(lái)標(biāo)識(shí)一段匯,編指令程

3、序,。,_,asm,匯編語(yǔ)言程序,匯編語(yǔ)言程序,其中:如果一行中有多個(gè)匯編指令,指令之間使用分號(hào),(;),分開(kāi)。,在一條指令占多行,要使用續(xù)行符號(hào),().,4,5.2,在,C/C+,程序中內(nèi)嵌匯編指令,在,C/C+,程序中內(nèi)嵌匯編指令注意事項(xiàng):,必須小心使用物理寄存器,如,R0R3,IP,LR,和,CPSR,中的,N,Z,C,V,標(biāo)志位,.,因?yàn)橛?jì)算匯編代碼中的,C,表達(dá)式時(shí),可能會(huì)使用這些物理寄存器,并會(huì)修改,N,Z,C,V,標(biāo)志位。,_,asm,MOV R0,x,ADD y,R0,x/y /,計(jì)算,x/y,時(shí),R0,會(huì)被修改,在計(jì)算,x/y,時(shí),R0,會(huì)被修改,從而影響,R0+x/y,的結(jié)

4、果,.,用一個(gè),C,程序的變量代替,R0,就可以解決這個(gè)問(wèn)題,:,_,asm,MOV,var,x,ADD,y,var,x/y,內(nèi)嵌匯編器探測(cè)到隱含的寄存器沖突就會(huì)報(bào)錯(cuò),.,5,5.2,在,C/C+,程序中內(nèi)嵌匯編指令,在,C/C+,程序中內(nèi)嵌匯編指令注意事項(xiàng):,不要使用寄存器代替變量,.,盡管有時(shí)寄存器明顯對(duì)應(yīng)某個(gè)變量,但也不能直接使用寄存器代替變量,.,int,bad_f(int,x) /x,存放在,R0,中,_,asm,ADD R0,R0,#1 /,發(fā)生寄存器沖突,實(shí)際上,x,的值沒(méi)有變化,return(x);,盡管根據(jù)編譯器的編譯規(guī)則似乎可以確定,R0,對(duì)應(yīng),x,但這樣的代碼會(huì)使內(nèi)嵌匯編

5、器認(rèn)為,發(fā)生了寄存器沖突,.,用其他寄存器代替,R0,存放參數(shù),x,使得該函數(shù)將,x,原封不動(dòng)地返回,.,這段代碼的正確寫(xiě)法如下,:,int,bad_f(int,),_,asm,ADD x,x,#1,return(x),6,5.3,從匯編程序中訪問(wèn),C,程序變量,在,C,程序中聲明的全局變量可以被匯編程序通過(guò)地址間接訪問(wèn)。具體,訪問(wèn)方法如下:,使用,IMPORT,偽指令聲明這個(gè)全局變量,使用,LDR,指令讀取該全局變量的內(nèi)存地址,通常該全局變量的內(nèi)存地址存放在程序的數(shù)據(jù)緩沖池中。,根據(jù)該數(shù)據(jù)類(lèi)型,使用相應(yīng)的,LDR,指令讀取該全局變量的值;使用相,應(yīng)的,STR,指令修改該全局變量的值,AREA

6、,globals,,,CODE,,,READONLY,EXPORT,asmsub,IMPORT,glovbvar,;,聲明外部變量,glovbvar,asmsub,LDR R1,,,=,glovbvar,;,裝載變量地址,LDR R0,,,R1,;,讀出數(shù)據(jù),ADD R0,,,R0,,,#1,;加,1,操作,STR R0,,,R1,;,保存變量值,MOV PC LR,END,7,5.4,匯編程序、,C,程序及,C+,程序相互調(diào)用,在,C+,程序中使用,C,程序頭文件,在,C+,程序中使用,C,程序的系統(tǒng)頭文件,例:,/ C+ code /,這是一個(gè),C+,程序,#include /,使用,C,

7、程序的系統(tǒng)頭文件,Int,main() /,時(shí)可以直接調(diào)用,Return 0;,8,5.4,匯編程序、,C,程序及,C+,程序相互調(diào)用,在,C+,程序中使用,C,程序頭文件,在,C+,程序中使用,C,程序的用戶定義頭文件,/ C+ code /,這是一個(gè),C+,程序,Extern /,在,C+,程序中使用偽指令,extern “C”,#include “my-cheader1.h”,#include “my-cheader1.h”,Int,main(),Return 0;,9,5.4,匯編程序、,C,程序及,C+,程序相互調(diào)用,C,程序調(diào)用匯編程序,:,匯編程序的設(shè)置要遵循,ATPCS,規(guī)則,

8、保證程序調(diào)用時(shí)參數(shù)的正確傳遞。,在匯編程序中使用,EXPORT,偽指令聲明本子程序,使其它程序可以調(diào)用此子程序。,在,C,語(yǔ)言程序中使用,extern,關(guān)鍵字聲明外部函數(shù),(,聲明要調(diào)用的匯編子程序,),,即可調(diào)用此匯編子程序。,10,5.4,匯編程序、,C,程序及,C+,程序相互調(diào)用,C,程序調(diào)用匯編程序,調(diào)用匯編的,C,函數(shù):,#include ,extern void,strcopy(char,*,d,const,char *s) /,聲明外部函數(shù),即要調(diào)用的匯編子程,/,序,int,main(void),const char *,srcstr,=“First string-source

9、”,;,/,定義字符串常量,char,dstsrt, =“Second string-destination”,;,/,定義字符串變量,printf(“Before,copying,:,n”);,printf(“%sn,%,sn,”srcstr,dststr,); /,顯示源字符串和目標(biāo)字符串的內(nèi)容,strcopy(dststr,srcstr,); /,調(diào)用匯編子程序,R0=dststr,R1=,srcstr,printf(“After,copying,:,n”),printf(“%sn,%,sn,”srcstr,dststr,); /,顯示,strcopy,復(fù)制字符串結(jié)果,return(0)

10、;,11,5.4,匯編程序、,C,程序及,C+,程序相互調(diào)用,C,程序調(diào)用匯編程序,被調(diào)用匯編子程序,:,AREA,SCopy,CODE,READONLY,EXPORT,strcopy,;,聲明匯編程序,strcopy,以便外部程序引,;,用,strcopy,;R0,為目標(biāo)字符串的地址,;R1,為源字符串的地址,;,LDRB R2,R1,#1 ;,讀取字節(jié)數(shù)據(jù),源地址加,1,STRB R2,R0,#1 ;,保存讀取的,1,字節(jié)數(shù)據(jù),目標(biāo)地址加,1,CMP r2,#0 ;,判斷字符串是否復(fù)制完畢,BNE,strcopy,;,沒(méi)有復(fù)制完畢,繼續(xù)循環(huán),MOV,pc,lr,;,返回,END,12,5.

11、4,匯編程序、,C,程序及,C+,程序相互調(diào)用,匯編程序調(diào)用,C,程序,匯編程序的設(shè)置要遵循,ATPCS,規(guī)則,保證程序調(diào)用時(shí)參數(shù)的正確傳遞,.,在匯編程序中使用,IMPORT,偽指令聲明將要調(diào)用的,C,程序函數(shù),.,在調(diào)用,C,程序時(shí),要正確設(shè)置入口參數(shù),然后使用,BL,調(diào)用,.,13,5.4,匯編程序、,C,程序及,C+,程序相互調(diào)用,匯編程序調(diào)用,C,程序,匯編調(diào)用,C,程序的,C,函數(shù):,/*,函數(shù),sum5(),返回,5,個(gè)整數(shù)的和*,/,int,sum5(int a,lit b,int,c,int,d,int,e),return(a+b+c+d+e); /,返回,5,個(gè)變量的和,1

12、4,5.4,匯編程序、,C,程序及,C+,程序相互調(diào)用,匯編程序調(diào)用,C,程序,匯編調(diào)用,C,程序的匯編程序,AREA sample, CODE,READONLY,IMPORT sum5 ;,聲明外部標(biāo)號(hào),sum5,即,C,函數(shù),sum5(),CALLSUM,STMFD SP! LR ;LR,寄存器放棧,ADD R1,R0,R0 ;,設(shè)置,sum5,函數(shù)入口參數(shù),R0,為參數(shù),a,ADD R2,R1,R0 ;R1,為參數(shù),b,R2,為參數(shù),c,ADD R3,R1,R2,STR R3,SP,# -4! ;,參數(shù),e,要通過(guò)堆棧傳遞,ADD R3,R1,R1 ;R3,為參數(shù),d,BL sum5 ;

13、,調(diào)用,sum5(),結(jié)果保存在,R0,ADD SP,SP#4 ;,修正,SP,指針,LDMFD SP,PC ;,子程序返回,END,15,5.5,嵌入式,C,編程,概述:,C,語(yǔ)言的優(yōu)點(diǎn)是運(yùn)行速度快、編譯效率高、移植性好和可讀性強(qiáng)。因此在嵌入式程序設(shè)計(jì)中經(jīng)常會(huì)用到,C,語(yǔ)言程序設(shè)計(jì)。,嵌入式,C,語(yǔ)言程序設(shè)計(jì)是利用基本的,C,語(yǔ)言知識(shí),面向嵌入式工程實(shí)際應(yīng)用進(jìn)行程序設(shè)計(jì)。也就是說(shuō)它首先是,C,語(yǔ)言程序設(shè)計(jì),因此必須符合,C,語(yǔ)言基本語(yǔ)法,只是它是面向嵌入式的應(yīng)用而設(shè)計(jì)的程序。,16,5.5,嵌入式,C,編程,C,語(yǔ)言的“預(yù)處理偽指令”在嵌入式程序設(shè)計(jì)中的應(yīng)用。,1,、文件包含偽指令,格式:,

14、#include,;,標(biāo)準(zhǔn)頭文件,#include,“,頭文件名,.h”,;,自定義頭文件,2,、宏定義偽指令,其格式如下:,格式:,# define,宏標(biāo)識(shí)符 宏體,例:,#define U32 unsigned,int,#define U16 unsigned short,#define S32,int,#define S16 short,int,#define U8 unsigned char,#define S8 char,17,5.5,嵌入式,C,編程,C,語(yǔ)言的“預(yù)處理偽指令”在嵌入式程序設(shè)計(jì)中的應(yīng)用,。,3,、,條件宏:,先測(cè)試是否定義過(guò)某宏標(biāo)識(shí)符,然后決定如何處理。這樣做是為了

15、避免重復(fù)定義。,格式:,#,ifdef,宏標(biāo)識(shí)符,#,undef,宏標(biāo)識(shí)符,#define,宏標(biāo)識(shí)符宏體,#else,#define,宏標(biāo)識(shí)符宏體,#,endif,例:,#,ifdef,INCLUDE_SERIAL,#,undef,NUM_TTY,#define NUM_TTY N_UART_CHANNELS,#,undef,CONSOLE_TTY,#define CONSOLE_TTY 0,#,undef,CONSOLE_BAUD_RATE,#define CONSOLE_BAUD_RATE 115200,#,endif,18,5.5,嵌入式,C,編程,C,語(yǔ)言的“預(yù)處理偽指令”在嵌入式程序

16、設(shè)計(jì)中的應(yīng)用,4,、條件編譯偽指令,格式,#if,(,條件表達(dá)式,1,),#,elif,(,條件表達(dá)式,2,),#,elif,(,條件表達(dá)式,n,),#else,#,endif,這樣,編譯時(shí),編譯器僅對(duì),#if,(),#,endif,之間滿足某一條件表達(dá)式,的源文件部分進(jìn)行編譯。,19,5.5,嵌入式,C,編程,使用寄存器變量,當(dāng)對(duì)一個(gè)變量頻繁被讀寫(xiě)時(shí),需要反復(fù)訪問(wèn)內(nèi)存,從而花費(fèi)大量的存取時(shí),間。為此,,C,語(yǔ)言提供了一種變量,即寄存器變量。這種變量存放在,CPU,的寄存,器中,使用時(shí),不需要訪問(wèn)內(nèi)存,而直接從寄存器中讀寫(xiě),從而提高效率。寄存,器變量的說(shuō)明符,是,register,。,對(duì)于循環(huán)

17、次數(shù)較多的循環(huán)控制變量及循環(huán)體內(nèi)反復(fù),使用的變量均可定義為寄存器變量,而循環(huán)計(jì)數(shù)是應(yīng)用寄存器變量的最好候選者。,例:,/*,求,1+2+3+.+n,的值 *,/WORD Addition(BYTE n),register i,,,s=0,;,for(i=1,;,i 4;j = 562 - (562 5 5);,21,5.5,嵌入式,C,編程,活用位操作,C,語(yǔ)言位運(yùn)算除了可以提高運(yùn)算效率外,在嵌入式系統(tǒng),的編程中,它的另一個(gè)最典型的應(yīng)用,而且十分廣泛地正在,被使用著的是位間的(,&,)、(,|,)、非(,)操作,這跟嵌,入式系統(tǒng)的編程特點(diǎn)有很大關(guān)系。,例:,rGPCDAT,=(rGPCDAT&

18、0xFFFFFFF0)|0x0E,rINTMSK,&=(BIT_TIMER1),22,5.5,嵌入式,C,編程,數(shù)據(jù)指針,在嵌入式系統(tǒng)的編程中,常常要求在特定的內(nèi)存單元讀寫(xiě)內(nèi)容,匯編有對(duì)應(yīng),的,MOV,指令,而除,C/C+,以外的其它編程語(yǔ)言基本沒(méi)有直接訪問(wèn)絕對(duì)地址的能,力。在嵌入式系統(tǒng)的實(shí)際調(diào)試中,多借助,C,語(yǔ)言指針?biāo)哂械膶?duì)絕對(duì)地址單元內(nèi),容的讀寫(xiě)能力。以指針直接操作內(nèi)存多發(fā)生在如下幾種情況:,某,I/O,芯片被定位在,CPU,的存儲(chǔ)空間而非,I/O,空間,而且寄存器對(duì)應(yīng)于,某特定地址;,兩個(gè),CPU,之間以雙端口,RAM,通信,,CPU,需要在雙端口,RAM,的特定單,元(稱為,mai

19、l box,),書(shū)寫(xiě)內(nèi)容以在對(duì)方,CPU,產(chǎn)生中斷;,讀取在,ROM,或,FLASH,的特定單元所燒錄的漢字和英文字模。,例:,int,*p = (,int,*)0xF000FF00,;,*,p=0xABCD,;,#define rGPACON (*(volatile unsigned *)0x56000000),;,rGPACON,0x1234,;,23,5.5,嵌入式,C,編程,關(guān)鍵字,volatile,一般這個(gè)修飾符用來(lái)告知編譯器,被修飾的變量是個(gè)“易,變的”變量,(volatile,的本意是“易變的”,),防止編譯器進(jìn)行優(yōu)化。,將變量加上,volatile,修飾,則編譯器保證對(duì)此變量的讀寫(xiě)操作,都不會(huì)被優(yōu)化。,用法,1,、中斷服務(wù)程序中修改的供其它程序檢測(cè)的變量需要加,volatile,。,2,、,多任務(wù)環(huán)境下各任務(wù)間共享的標(biāo)志應(yīng)該加,volatile,。,3,、,存儲(chǔ)器映射的硬件寄存器通常也要加,volatile,說(shuō)明,因?yàn)槊看螌?duì)它的讀寫(xiě)都可能由不同意義。,24,

展開(kāi)閱讀全文
溫馨提示:
1: 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(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ì)自己和他人造成任何形式的傷害或損失。

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號(hào):ICP2024067431號(hào)-1 川公網(wǎng)安備51140202000466號(hào)


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺(tái),本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請(qǐng)立即通知裝配圖網(wǎng),我們立即給予刪除!