資源描述:
《arm匯編語(yǔ)言和c c語(yǔ)言溷合編程的方法》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在學(xué)術(shù)論文-天天文庫(kù)。
1、電子測(cè)量技術(shù)第29卷第6期嵌入式技術(shù)ELECTRONICMEASUREMENTTECHNOLOGY2006年12月ARM匯編語(yǔ)言和C/C++語(yǔ)言混合編程的方法史斌(天津大學(xué)電子信息工程學(xué)院天津300072)摘要:文中首先對(duì)在嵌入式系統(tǒng)設(shè)計(jì)中廣泛應(yīng)用的ARM系列微處理器做了簡(jiǎn)要介紹;接著詳細(xì)闡述了基于ARM核的嵌入式微處理器的匯編語(yǔ)言和C/C++語(yǔ)言混合編程的方法:包括代碼簡(jiǎn)潔而功能有限的在線匯編技術(shù)和功能強(qiáng)大、基于模塊化設(shè)計(jì)的ATPCS規(guī)則;最后給出了詳細(xì)的示例代碼和分析。關(guān)鍵詞:嵌入式系統(tǒng);ARM;匯編語(yǔ)言;在線匯編;ATPCS規(guī)則ProgrammingofARMwithb
2、othassemblyandC/C++languageShiBin(SchoolofElectronic&InformationEngineeringTianjinUniversity,Tianjin300072)Abstract:ThisarticlebrieflyintroducedARMserialmicroprocessor,whichisextensivelyusedinembeddedsystemdesign;andthengavethetwomethodsofARM2coreembeddedprocessorprogrammingwithbothassembly
3、andC/C++Languageincludingin2lineassemblywhichiscompactbuthavesomelimitsandATPCSruleswhicharepowerfulandmodularized.Atlast,thereissomesourcecodewithanalysisfordemonstration.Keywords:embeddedsystem;ARM;assembly;in2lineassembly;ATPCS{0引言MRSr0,CPSR;//將狀態(tài)積存器的內(nèi)容傳遞ARM是一種高性能、低功耗的32位RISC嵌入式處到r0理器系列。
4、目前在各種嵌入式系統(tǒng)中ARM獲得了廣泛的ORRR0,R0,0x000000C0;//通過(guò)或運(yùn)算將應(yīng)用。r0的第6,7兩位置1,其它位不變ARM編程可以使用匯編語(yǔ)言和C/C++語(yǔ)言,使用MSRCPSR_c,r0;//將r0的低8位送到匯編語(yǔ)言編程目標(biāo)代碼效率較高,但較為繁瑣,設(shè)計(jì)大型CPSR的低8位,以屏蔽FIQ中斷系統(tǒng)時(shí)不易維護(hù);而C/C++語(yǔ)言比較簡(jiǎn)潔明了,但代碼}效率即使經(jīng)過(guò)優(yōu)化,也比匯編語(yǔ)言低,特別是在一些實(shí)時(shí)INTPND=0xffffffff;//清除全部中斷標(biāo)志位,性強(qiáng)和需要精細(xì)處理的場(chǎng)合,C/C++語(yǔ)言難以勝任。因C/C++代碼此一個(gè)折中的辦法是:使用C/C++語(yǔ)
5、言寫(xiě)整體框架,而}使用匯編語(yǔ)言實(shí)現(xiàn)局部模塊,這就涉及到匯編語(yǔ)言和C/C因?yàn)镃PSR是一個(gè)物理寄存器,沒(méi)有存儲(chǔ)器的I/O映++語(yǔ)言混合編程的問(wèn)題。為此本文介紹了在ADS中常射,而ARM的C/C++語(yǔ)言使用的是ANSI標(biāo)準(zhǔn),不像用的2種匯編語(yǔ)言和C/C++語(yǔ)言混合編程方法:在線匯KeilC51那樣有諸如sbit和sfr的擴(kuò)展,所以訪問(wèn)CPSR的編(in2lineassembly)和ATPCS(ARM2ThumbProduce唯一方法就是用匯編語(yǔ)言;通過(guò)在C/C++代碼中插入一CallStandard)規(guī)則。段簡(jiǎn)短的匯編代碼,來(lái)實(shí)現(xiàn)對(duì)CPSR的訪問(wèn)。再比如一些波形發(fā)生的場(chǎng)合,需要每
6、隔一段精確的時(shí)間向端口送數(shù)1在線匯編(in2lineassembly)據(jù),那么C/C++代碼經(jīng)編譯后產(chǎn)生的指令數(shù)是無(wú)法預(yù)知在線匯編的具體含義就是:在C/C++代碼中插入一的,所以無(wú)法實(shí)現(xiàn)精確定時(shí),因此就要使用在線匯編。段匯編代碼,以實(shí)現(xiàn)某種C/C++無(wú)法達(dá)到的效果,例如:在線匯編通過(guò)__asm關(guān)鍵字實(shí)現(xiàn),一般格式為:{??//C/C++代碼INTMSK=0xffffffff;//屏蔽所有的向量中斷,__asmC/C++代碼{__asm//插入一段匯編代碼指令1;指令2;指令3;??·89·第29卷電子測(cè)量技術(shù)指令n;指令n+1;??是C/C++模塊(代碼段)和匯編模塊(函數(shù))
7、相互調(diào)用的??一套規(guī)則(很多C/C++編譯器都有類似的規(guī)則),其具體}//括號(hào)內(nèi)為匯編代碼內(nèi)容為(不涉及ARM代碼和Thumb代碼的相互調(diào)用)。??//C/C++代碼2.1被調(diào)用模塊的寄存器使用其中匯編指令的操作數(shù)可以是物理寄存器,也可以是調(diào)用模塊和被調(diào)用模塊通過(guò)r0r3傳遞參數(shù),因此參數(shù)C/C++語(yǔ)言的變量、行號(hào)和表達(dá)式,這點(diǎn)是比純匯編代碼少于4個(gè)時(shí)可以隨意使用剩余的寄存器而不必保存和恢最大的方便之處。其實(shí)寫(xiě)在線匯編代碼的思路和純匯編復(fù);使用r4r11之前一定要先在堆棧中保存起來(lái),退出時(shí)再差不多,但要