嵌入式系統(tǒng)及應(yīng)用-Chapter09-ARM編譯器_第1頁
嵌入式系統(tǒng)及應(yīng)用-Chapter09-ARM編譯器_第2頁
嵌入式系統(tǒng)及應(yīng)用-Chapter09-ARM編譯器_第3頁
嵌入式系統(tǒng)及應(yīng)用-Chapter09-ARM編譯器_第4頁
嵌入式系統(tǒng)及應(yīng)用-Chapter09-ARM編譯器_第5頁
已閱讀5頁,還剩35頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

嵌入式系統(tǒng)及應(yīng)用1第九章

ARMC/C++編譯器C/C++編譯器概述編譯器命令行格式pragmas和特定關(guān)鍵字?jǐn)?shù)據(jù)類型和預(yù)定義宏C/C++庫2C/C++編譯器概述編譯器和語言庫搜索路徑3編譯器和語言庫編譯器名稱編譯器種類源文件類型源文件后綴目標(biāo)文件類型armccCC*.C32位ARM代碼tccCC*.C16位Thumb代碼armcppC++C/C++*.C/*.CPP32位ARM代碼tcppC++C/C++*.C/*.CPP16位Thumb代碼4編譯器和語言庫文件類型*.c:C編譯器源文件*.c,*.cp,*.cpp,*.c++,*.cc:C++編譯器源文件*.h:頭文件*.s:ARM匯編代碼源文件*.o:ELF格式目標(biāo)文件(含DRAWF2調(diào)試信息)*.lst:錯誤和告警信息列表文件5編譯器和語言庫ARMC語言庫RogueWaveC++庫支持庫對于不同ATPCS有相對應(yīng)的語言庫支持6搜索路徑內(nèi)存中的ANSIC語言庫的頭文件系統(tǒng)當(dāng)前路徑(BerkeleyUnix規(guī)則)ARMINC環(huán)境變量指定搜索路徑7編譯器命令行格式過程調(diào)用標(biāo)準(zhǔn)源程序語言類型搜索路徑輸出文件類型目標(biāo)處理器和ARM體系版本調(diào)試信息和代碼生成控制告警和錯誤信息控制8編譯器命令行格式compiler[PCS-options][source-language][search-paths][preprocessor-options][output-format][target-options][debug-options][code-generation-option][warning-options][additional-checks][error-options][source]armcc-viapar

source.c-errorserrorfile9過程調(diào)用標(biāo)準(zhǔn)-apcs/noswst/nointer/noropi/norwpi-fpu

softvfp與interwork相關(guān)的qualifiers-interwork/-nointerwork與位置無關(guān)特性相關(guān)的qualifiers-ropi/-noropi-rwpi/-norwpi與數(shù)據(jù)棧檢查相關(guān)的qualifiers-swstackcheck/-noswstackcheck10源程序語言類型-ansi-ansic-cpp-embeddedcplusplus-strict11搜索路徑-I-fk-fd-j12輸出文件類型-c-list-ofile-S13目標(biāo)處理器和ARM體系版本-cpuname-cpuARM940T-cpu4T-fpuname-fpunone-fpu

vfp-fpu

softfpa14調(diào)試信息和代碼生成控制調(diào)試信息控制-g[option]-dwarf2代碼生成控制代碼優(yōu)化編譯選項代碼段、數(shù)據(jù)段的編譯選項內(nèi)存模式編譯選項對齊模式編譯選項15告警信息和錯誤信息控制告警信息控制-W[options]+[options]一般情況下應(yīng)更改程序而不是關(guān)閉告警信息錯誤信息控制-E[options]+[options]一般情況下應(yīng)更改程序而不是關(guān)閉錯誤信息16pragmas和關(guān)鍵字pragmas聲明函數(shù)的關(guān)鍵字聲明變量的關(guān)鍵字限定數(shù)據(jù)類型的關(guān)鍵字17pragma格式check_printf_format,check_scanf_format,debug,Ospace,Otime,Onum,stack_check,softfp_linkage,import-pragmafeature-name設(shè)置特性-pragma

no_feature-name取消特性舉例

#pragma

check_printf_formats

externvoidmyprintf(constchar*,...)

#pragma

no_check_printf_formats18聲明函數(shù)的關(guān)鍵字__asm__inline__irq__pure__softfp__swi__swi_indirect__value_in_regs__weak19聲明變量的關(guān)鍵字register_int64_global_reg20聲明變量的關(guān)鍵字_align(8)_packed_volatile_weak21數(shù)據(jù)類型和預(yù)定義宏基本數(shù)據(jù)類型預(yù)定義宏22基本數(shù)據(jù)類型數(shù)據(jù)類型長度(位)對其特性char81字節(jié)對齊short162半字對齊int324字節(jié)對齊long324字節(jié)對齊longlong644字節(jié)對齊float324字節(jié)對齊double644字節(jié)對齊longdouble644字節(jié)對齊allpointer324字節(jié)對齊bool324字節(jié)對齊23預(yù)定義宏見P321編程

#ifdef

MACRO_NAME

...

#else

...

#endif24C/C++庫C/C++運(yùn)行時庫概述建立包含運(yùn)行時庫的應(yīng)用程序建立不包含運(yùn)行時庫的應(yīng)用程序裁減C/C++運(yùn)行時庫25C/C++運(yùn)行時庫概述C運(yùn)行時庫ISOC語言庫標(biāo)準(zhǔn)中定義的函數(shù)運(yùn)行于semihosting、與目標(biāo)系統(tǒng)相關(guān)的函數(shù)C/C++編譯器需要的支持函數(shù)C++運(yùn)行時庫RogueWave標(biāo)準(zhǔn)C++庫C++編譯器的支持函數(shù)其它C++庫26C/C++運(yùn)行時庫概述運(yùn)行時庫選擇內(nèi)存模式:bigendianorlittel

endian浮點(diǎn)運(yùn)算類型數(shù)據(jù)棧溢出檢查代碼位置無關(guān)特性存放位置intall\lib\armlibintall\lib\cpplib27C/C++運(yùn)行時庫概述可重入性使用位置相關(guān)尋址方式的靜態(tài)數(shù)據(jù)的函數(shù)是不可重入的使用位置無關(guān)尋址方式的靜態(tài)數(shù)據(jù)的函數(shù)是可重入的重入規(guī)則28C/C++運(yùn)行時庫概述注意事項C運(yùn)行時庫以二進(jìn)制提供編譯自己的C運(yùn)行時庫重新實(shí)現(xiàn)部分函數(shù)實(shí)現(xiàn)C運(yùn)行時庫移植C++運(yùn)行時庫不是免費(fèi)的29建立包含運(yùn)行時庫的應(yīng)用程序建立C/C++應(yīng)用程序運(yùn)行環(huán)境建立數(shù)據(jù)棧建立數(shù)據(jù)堆初始化運(yùn)行時庫運(yùn)行main()函數(shù)提供堆ISOC標(biāo)準(zhǔn)規(guī)定的函數(shù)捕捉運(yùn)行時錯誤信息30建立包含運(yùn)行時庫的應(yīng)用程序在semihost環(huán)境下使用C/C++運(yùn)行時庫在無主機(jī)支持環(huán)境下使用C/C++運(yùn)行時庫不使用main()函數(shù)和不初始化運(yùn)行時庫環(huán)境下使用運(yùn)行庫環(huán)境31semihosted下使用運(yùn)行時庫ARM使用SWI軟件中斷方式提供支持使用ARM標(biāo)準(zhǔn)semihostingSWI建立自己的semihostingSWI中斷處理函數(shù)semihosting函數(shù)是可以被重新實(shí)現(xiàn)的32semihosted下使用運(yùn)行時庫ARM工具對semihosting的支持ARMulator提供semihostingSWI支持Angel調(diào)試監(jiān)視器提供semihostingSWI支持Multi-ICE/EmbeddedICE提供semihostingSWI支持33semihosted下使用運(yùn)行時庫去除semihosting支持刪除semihosting函數(shù)調(diào)用重新實(shí)現(xiàn)semihosting函數(shù)實(shí)現(xiàn)SWI中斷處理程序34nonsemihosted下使用運(yùn)行時庫在無semihosting支持環(huán)境下不能調(diào)用包含semihosting功能的函數(shù)在無semihosting支持環(huán)境下使用運(yùn)行時庫建立與目標(biāo)環(huán)境相關(guān)的函數(shù)實(shí)現(xiàn)不實(shí)用semihosting功能將新的目標(biāo)文件與應(yīng)用程序連接更新配置建立適應(yīng)目標(biāo)環(huán)境的應(yīng)用系統(tǒng)35nonsemihosted下使用運(yùn)行時庫重新實(shí)現(xiàn)semihosting功能函數(shù)和目標(biāo)環(huán)境相關(guān)函數(shù)以提供給C運(yùn)行時庫使用表10.8列舉了直接依賴semihosting功能的函數(shù);表10.9列舉了間接依賴semihosting功能的函數(shù);36建立不包含運(yùn)行時庫的應(yīng)用程序若不包含main()函數(shù)則不會對C運(yùn)行時庫進(jìn)行初始化,稱為裸機(jī)C程序:不支持?jǐn)?shù)據(jù)棧檢查不支持stdio不支持signal()和raise()不支持atexit()和alloca()重新實(shí)現(xiàn)__rt_raise()已便被錯誤處理代碼使用編寫匯編代碼實(shí)現(xiàn)C程序運(yùn)行環(huán)境初始化,并保證代碼在C程序前運(yùn)行37建立不包含運(yùn)行時庫的應(yīng)用程序重新實(shí)現(xiàn)部分函數(shù)以使用C運(yùn)行時庫實(shí)現(xiàn)__rt_raise()獲取除法、結(jié)構(gòu)數(shù)據(jù)復(fù)制和浮點(diǎn)數(shù)算術(shù)運(yùn)算支持顯示調(diào)用set_local()獲取與地域相關(guān)函數(shù)支持,比如atoi(),sprintf(),sscanf()實(shí)現(xiàn)_fp_init()獲取浮點(diǎn)運(yùn)算實(shí)現(xiàn)fputc()和ferror()實(shí)現(xiàn)低級輸出支持,實(shí)現(xiàn)fgetc()和__backspace()實(shí)現(xiàn)低級輸入支持;38裁減C/C++運(yùn)行時庫C/C++運(yùn)行時庫入口點(diǎn):__main()將nonroot執(zhí)行代碼域復(fù)制到運(yùn)行地址空間將

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論