




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第第10章章 ARM C/C+編譯器編譯器10.1 ARM C/C+編譯器概述編譯器概述本節(jié)介紹編譯ARM程序時的一些基本概念。ARM編譯器的具體使用方法將在10.2節(jié)介紹。210.1.1 ARM C/C+編譯器及語言庫介紹編譯器及語言庫介紹ARM集成開發(fā)環(huán)境中包含的集成開發(fā)環(huán)境中包含的C/C+編譯器如表編譯器如表10.1中所示。中所示。3編譯器名稱編譯器種類源文件類型源文件后綴輸出的目標文件類型armccCC.C32位ARM代碼tccCC.C16位Thumb代碼armcppC+C/C+.C/.CPP32位ARM代碼tcppC+C/C+.C/.CPP16位Thumb代碼10.1.1 ARM C
2、/C+編譯器及語言庫介紹編譯器及語言庫介紹ARM集成開發(fā)環(huán)境中集成開發(fā)環(huán)境中C/C+語言的庫包括下面幾語言的庫包括下面幾種:種:ARM C語言庫Rogue Wave C+庫支持庫ARM中中C/C+語言庫是以二進制的形式提供的。對語言庫是以二進制的形式提供的。對應于不同的應于不同的ATPCS格式,有相應格式的格式,有相應格式的C/C+語言語言庫,這是通過不同的編譯器選項指定的。庫,這是通過不同的編譯器選項指定的。410.1.2 ARM編譯器中與搜索路徑相關的一些基本概念編譯器中與搜索路徑相關的一些基本概念下面這些因素可以影響下面這些因素可以影響ARM編譯器如何去搜索頭文編譯器如何去搜索頭文件和源
3、文件:件和源文件:編譯時指定的-I選項和-J選項。編譯時指定的-fk選項和-fd選項。環(huán)境變量ARMINC的值。文件名稱是基于絕對路徑的還是基于相對路徑的。文件名是用雙引號包括的還是用尖括號包括的。510.1.2 ARM編譯器中與搜索路徑相關的一些基本概念編譯器中與搜索路徑相關的一些基本概念1. 內存中的文件系統(tǒng)內存中的文件系統(tǒng)2. 當前位置當前位置3. ARMINC環(huán)境變量環(huán)境變量4. 編譯時的搜索路徑編譯時的搜索路徑610.2 ARM編譯器命令行格式編譯器命令行格式本節(jié)描述的編譯器的選項適用于本節(jié)描述的編譯器的選項適用于ARM集成開發(fā)環(huán)境集成開發(fā)環(huán)境中所有的編譯器。對于特定的編譯器有效的編
4、譯器中所有的編譯器。對于特定的編譯器有效的編譯器選項,在介紹時會特別指出。選項,在介紹時會特別指出。ARM編譯器命令行格式如下所示:編譯器命令行格式如下所示: compiler PCSoptions sourcelanguage searchpaths preprocessoroptions outputformat targetoptions debugoptions codegenerationoptions warningoptions additionalchecks erroroptions source710.2.1 過程調用標準過程調用標準可以通過編譯選項可以通過編譯選項-apc
5、s來指定使用的過程調用標準。其格式如下所來指定使用的過程調用標準。其格式如下所示:示:apcs qualifiers 其中,其中,qualifiers指定使用的過程調用標準。這里必須滿足兩個條件:指定使用的過程調用標準。這里必須滿足兩個條件:至少必須指定一個至少必須指定一個qualifier;如果指定多個;如果指定多個qualifier,各,各qualifier之間之間不能有空格。不能有空格。當沒有使用當沒有使用-apcs選項時,編譯器默認的過程調用標準如下所示:選項時,編譯器默認的過程調用標準如下所示:apcs /noswst/nointer/noropi/norwpi fpu softvf
6、p當使用選項當使用選項-cpu時,指定的值可能會使默認的時,指定的值可能會使默認的-fpu選項失效。選項失效。各種各種qualifiers的含義及用法如下所示。的含義及用法如下所示。1. 與interwork相關的qualifiers2. 與位置無關特性相關的qualifiers3. 與數據棧檢查相關的qualifiers810.2.2 設置源程序語言類型設置源程序語言類型下面的這些編譯選項用于指定編譯器可以處理的語下面的這些編譯選項用于指定編譯器可以處理的語言類型。默認情況下,言類型。默認情況下,ARM C編譯器處理編譯器處理ANSI C標準的源程序,標準的源程序,ARM C+編譯器處理編譯
7、器處理ISO/IEC C+源程序。使用這些選項可以指定源程序應在多大程源程序。使用這些選項可以指定源程序應在多大程度上符合各種標準。度上符合各種標準。-ansi-ansic-cpp-embeddedcplusplus-strict910.2.2 設置源程序語言類型設置源程序語言類型下面是這些選項的一些應用實例。下面是這些選項的一些應用實例。armcc -ansi:編譯ANSI標準C語言源程序,這是默認的選項。armcc -strict:編譯嚴格遵循ANSI標準的C語言源程序。armcpp:編譯標準C+源程序。armcpp -ansi:編譯ANSI標準C語言源程序。armcpp -ansi -s
8、trict:編譯嚴格遵循ANSI標準的C語言源程序。armcpp -strict:編譯嚴格遵循C+標準的源程序。1010.2.3 指定搜索路徑指定搜索路徑下面的一些選項用于指定編譯器搜索頭文件和源文下面的一些選項用于指定編譯器搜索頭文件和源文件時的路徑。這里介紹各選項各自的含義,它們組件時的路徑。這里介紹各選項各自的含義,它們組合使用時的規(guī)則在表合使用時的規(guī)則在表10.2中已經做過說明。中已經做過說明。-Idir-name-fk-fd-Jdir-name1110.2.4 設置預處理選項設置預處理選項下面的一些選項用于設置預處理選項。下面的一些選項用于設置預處理選項。-E-C-Dsymbol=v
9、alue-Dsymbol-Usymbol-M1210.2.5 設置輸出文件的類型設置輸出文件的類型下面的一些選項可以控制編譯器輸出的文件類型,下面的一些選項可以控制編譯器輸出的文件類型,它們可以是生成的匯編程序列表文件,也可以是未它們可以是生成的匯編程序列表文件,也可以是未進行連接的目標文件等。進行連接的目標文件等。-c(小寫)-list-fi-fj-fu-o file-MD-depend filename-S-fs1310.2.6 指定目標處理器和指定目標處理器和ARM體系版本體系版本在編譯源程序時,可以指定特定的在編譯源程序時,可以指定特定的CPU型號或者型號或者ARM體系的版本號,這樣,
10、編譯器就可以利用特定體系的版本號,這樣,編譯器就可以利用特定的處理器或的處理器或ARM體系的特性,生成性能更好的代體系的特性,生成性能更好的代碼。但是,這種做法可能造成程序在其他碼。但是,這種做法可能造成程序在其他ARM處理處理器上不兼容。器上不兼容。ARM編譯器包含下面兩個選項,用于指定目標處理編譯器包含下面兩個選項,用于指定目標處理器或者器或者ARM體系的版本。體系的版本。選項-cpu name:用于指定目標處理器和ARM體系的版本。選項-fpu:用于指定系統(tǒng)中浮點運算部件的體系。1410.2.6 指定目標處理器和指定目標處理器和ARM體系版本體系版本1. -cpu name的用法的用法2
11、. -fpu name的用法的用法選項-fpu name用于指定系統(tǒng)中浮點運算部件的體系。如果使用選項-fpu,則選項-cpu name隱含的浮點運算部件體系失效。1510.2.7 生成調試信息生成調試信息下面這些選項指定編譯器是否產生調試信息,如果下面這些選項指定編譯器是否產生調試信息,如果產生調試信息,則可以指定調試信息的格式。產生調試信息,則可以指定調試信息的格式。-goption-g+-g-gtp-dwarf21610.2.8 代碼生成的控制代碼生成的控制本小節(jié)介紹控制代碼生成的編譯選項。這些選項主本小節(jié)介紹控制代碼生成的編譯選項。這些選項主要包括下面幾類:要包括下面幾類:控制代碼優(yōu)化
12、的編譯選項。設置非受限浮點常量的默認類型的編譯選項??刂拼a段和數據段的編譯選項。設置內存模式(字節(jié)順序)的編譯選項。設置內存對齊模式的編譯選項。其他一些編譯選項。1710.2.8 代碼生成的控制代碼生成的控制1. 控制代碼優(yōu)化的編譯選項控制代碼優(yōu)化的編譯選項(1)-Onumber(2)-Ospace(3)-Otime(4)-Oinline(5)-Ono_inline(6)-Oautoinline(7)-Ono_autoinline(8)-Oknown_library(9)-Ono_known_library(10)-Oldrd(11)-Ono_ldrd(12)-spit_ldm1810.2.
13、8 代碼生成的控制代碼生成的控制2. 設置非受限的浮點常量的默認類型的編譯選項設置非受限的浮點常量的默認類型的編譯選項3. 控制代碼段和數據段的編譯選項控制代碼段和數據段的編譯選項4. 設置內存模式設置內存模式(字節(jié)順序字節(jié)順序)的編譯選項的編譯選項-littleend-bigend5. 設置內存對齊模式的編譯選項設置內存對齊模式的編譯選項-zasNumber-memaccess option6. 其他一些編譯選項其他一些編譯選項-fy-zc1910.2.9 控制警告信息的產生控制警告信息的產生編譯器在檢測到可能的錯誤時,將產生報警信息。編譯器在檢測到可能的錯誤時,將產生報警信息??梢酝瑫r指定
14、特定的編譯選項讓編譯器不產生特定可以同時指定特定的編譯選項讓編譯器不產生特定的警告信息。但是,通常情況應該檢查程序,而不的警告信息。但是,通常情況應該檢查程序,而不是關閉這些警告信息。是關閉這些警告信息。關閉特定報警信息的編譯選項的格式如下所示:關閉特定報警信息的編譯選項的格式如下所示:Woptions+options 其中,其中,+前的選項是將要被關閉的警告信息;前的選項是將要被關閉的警告信息;+后后的是被打開的警告信息。下面舉例說明本編譯選項的是被打開的警告信息。下面舉例說明本編譯選項的使用方法:的使用方法: Wad+fg2010.2.10 編譯時進行的一些額外的檢查編譯時進行的一些額外的
15、檢查通過指定下面的選項,可以要求編譯器在編譯通過指定下面的選項,可以要求編譯器在編譯時進行一些額外的檢查,這樣做有利于保持程時進行一些額外的檢查,這樣做有利于保持程序有良好的移植性。序有良好的移植性。-fa-fh-fp-fv-fx2110.2.11 控制錯誤信息控制錯誤信息ARM編譯器允許用戶關閉某些可以恢復的錯誤,或者將某編譯器允許用戶關閉某些可以恢復的錯誤,或者將某些錯誤類型些錯誤類型“降級降級”,作為警告類型處理。這種做法在將一,作為警告類型處理。這種做法在將一些程序從其他環(huán)境移植到些程序從其他環(huán)境移植到ARM環(huán)境時,會有一些幫助。但環(huán)境時,會有一些幫助。但是,這種做法將使程序不符合是,
16、這種做法將使程序不符合ANSI C、ISO C+標準,而標準,而且可能使程序不能正確執(zhí)行。因此,一般情況下,還是通過且可能使程序不能正確執(zhí)行。因此,一般情況下,還是通過改正程序,而不是關閉錯誤信息來完成程序。改正程序,而不是關閉錯誤信息來完成程序??刂棋e誤信息的選項格式如下所示:控制錯誤信息的選項格式如下所示: Eoptions+options 其中,其中,+前的選項是將要被關閉的錯誤信息;前的選項是將要被關閉的錯誤信息;+后是被打開后是被打開的錯誤信息。下面舉例說明本編譯選項的使用方法:的錯誤信息。下面舉例說明本編譯選項的使用方法: Eac+fi2210.3 ARM編譯器中的編譯器中的pra
17、gmas在在ARM編譯器中,編譯器中,pragmas的格式如下所示:的格式如下所示: #pragma no_featurename 其中,其中,#pragma feature-name設置設置feature-name,而,而#pragma no_feature-name取消取消feature-name。ARM編譯器支持的各種編譯器支持的各種pragmas如表如表10.5所示。所示。23pragmas 名稱默認狀態(tài)含 義check_printf_formatoff檢查printf類函數中字符串的格式check_scanf_formatoff檢查scanf類函數中字符串的格式check_stack
18、on檢查數據棧是否溢出debugon是否產生調試信息表import-引入外部符號ospace-編譯器對代碼大小進行優(yōu)化otime-編譯器對代碼運行速度進行優(yōu)化onum-指定編譯器的優(yōu)化級別softfp_linkageoff是否使用軟件浮點連接10.3 ARM編譯器中的編譯器中的pragmas1. check_printf_format2. check_scanf_format3. debug4. ospace5. otime6. onum7. stack_check8. softfp_linkage9. import2410.4 ARM編譯器特定的關鍵詞編譯器特定的關鍵詞ARM編譯器支持一些對
19、編譯器支持一些對ANSI C進行擴展的關鍵進行擴展的關鍵詞。這些關鍵詞用于聲明變量、聲明函數、對特定詞。這些關鍵詞用于聲明變量、聲明函數、對特定的數據類型進行一定的限制。的數據類型進行一定的限制。2510.4.1 用于聲明函數的關鍵詞用于聲明函數的關鍵詞1. _asm2. _inline3. _irq4. _pure5. _softfp6. _swi7. _swi_indirect8. _value_in_regs9. _weak2610.4.2 用于聲明變量的關鍵詞用于聲明變量的關鍵詞1. register2. _int643. _global_reg(vreg)2710.4.3 用于限定數
20、據類型的關鍵詞用于限定數據類型的關鍵詞1. _align(8)2. _packed(1)關鍵詞_packed使被其限定的數據是1字節(jié)對齊的,即:_packed類型的對象不會插入任何“補丁”來實現字節(jié)對齊。_packed類型的對象使用非對齊的存儲訪問進行讀寫。(2)關鍵詞_packed不能用于限定下面的數據類型:浮點類型。包含浮點類型的結構和聯合。前面沒有用_packed的結構。3. _volatile4. _weak2810.5 ARM編譯器支持的基本數據類型編譯器支持的基本數據類型ARM編譯器支持的基本數據類型如表編譯器支持的基本數據類型如表10.6所示。所示。29數據類型長 度對齊特性Ch
21、ar81(字節(jié)對齊)Short162(半字對齊)Int 324(字對齊)Long324(字對齊)Long long644(字對齊)Float324(字對齊)Double644(字對齊)Long double644(字對齊)All pointers324(字對齊)Bool(C+ only)324(字對齊)10.5 ARM編譯器支持的基本數據類型編譯器支持的基本數據類型1. 整數類型整數類型2. 浮點數浮點數3. 指針類型的數據指針類型的數據3010.6 ARM編譯器中的預定義宏編譯器中的預定義宏ARM編譯器預定義了一些宏,有些預定義宏對應一編譯器預定義了一些宏,有些預定義宏對應一定的數值,有些預
22、定義宏沒有對應的數值。表定的數值,有些預定義宏沒有對應的數值。表10.7列出了這些預定義宏及其有效的場合。列出了這些預定義宏及其有效的場合。參見教材P3373110.7 ARM中的中的C/C+庫庫本節(jié)介紹本節(jié)介紹ARM C/C+運行時庫,這些庫為運行運行時庫,這些庫為運行C/C+應用程序提供了各種支持。本節(jié)主要包括下應用程序提供了各種支持。本節(jié)主要包括下面面4部分內容:部分內容:ARM中C/C+庫的基本概念。建立一個使用C/C+庫的C/C+應用程序。建立一個不使用C/C+庫的C/C+應用程序。裁減C/C+運行時庫,以適應特定的目標運行環(huán)境。3210.7.1 ARM中的中的C/C+運行時庫概述運
23、行時庫概述1. ARM中的中的C/C+運行時庫類型運行時庫類型2. ARM中中C/C+庫的存放位置庫的存放位置3. ARM C/C+庫的可重入性庫的可重入性4. 使用使用ARM C/C+庫時應注意的事項庫時應注意的事項3310.7.2 建立一個包含建立一個包含C/C+運行時庫的運行時庫的C/C+應用程序應用程序C/C+應用程序可以使用應用程序可以使用C/C+運行時庫中的函數,這時,運行時庫中的函數,這時,C運行時庫運行時庫將會完成下面的功能。將會完成下面的功能。建立建立C/C+應用程序運行環(huán)境,這包括:應用程序運行環(huán)境,這包括:建立數據棧。如果需要,建立數據堆。初始化需要使用的C/C+運行時庫
24、。運行程序main()。提供對ISO C標準規(guī)定的函數的支持。捕捉C/C+應用程序運行時產生的錯誤信息,并根據具體的實施規(guī)則進行相應的處理。C/C+應用程序使用應用程序使用C/C+運行時庫的方式有下面幾種,本小節(jié)介紹前運行時庫的方式有下面幾種,本小節(jié)介紹前兩種,兩種,10.7.3小節(jié)介紹第小節(jié)介紹第3種。種。(1)在semihost環(huán)境下使用C/C+運行時庫。(2)在沒有主機支持的環(huán)境下,如應用程序位于目標系統(tǒng)的ROM中,使用C/C+運行時庫。(3)C/C+應用程序不使用main(),也不初始化C/C+運行時庫。3410.7.2 建立一個包含建立一個包含C/C+運行時庫的運行時庫的C/C+應用程序應用程序1. 在在semihost環(huán)境下使用環(huán)境下使用C/C+運行時庫運行時庫2. 在在nonsemihosted環(huán)境下使用環(huán)境下使用C/C+運行時庫運行時庫3510.7.3 建立不包含建立不包含C運行時庫的應用程序運行時庫的應用程序當應用程序中包含了函數當應用程序中包含了函數main()時,將會引起對時,將會引起對C運行時庫的初始化。如果應用程序中不
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 創(chuàng)新型離婚協(xié)議:婚姻解除與財產分配協(xié)議
- 房地產代償權轉讓合同模板
- 文化創(chuàng)意產業(yè)合作合同知識產權使用授權補充協(xié)議
- 銀行遷址開業(yè)宣傳方案
- 培訓項目外包方案模板
- 青島中考試題及答案
- 拆遷評估工作方案
- 天津社工面試題及答案
- 小區(qū)搬運業(yè)務方案
- 在線遴選面試題及答案
- 老年人誤吸的預防團體標準
- 高中數學第三章不等式章末復習提升省公開課一等獎新課獲獎課件
- 中職高教版(2023)語文職業(yè)模塊-第五單元:走近大國工匠(二)學習工匠事跡 領略工匠風采【課件】
- 學校保潔服務投標方案(技術方案)
- 2025年度礦山尾礦綜合利用項目合作協(xié)議3篇
- 《旅游經濟學》課程教學大綱
- 急性腎衰應急預案
- 《水利工程設計變更管理暫行辦法》知識培訓
- 盆腔炎中醫(yī)課件
- 中國急性缺血性腦卒中早期血管內介入診療指南
評論
0/150
提交評論