在嵌入式開發(fā)中,當我們完成了工程創(chuàng)建、代碼編輯等操作之后,就可以開始進行工程編譯。 對于使用內(nèi)置工程模板創(chuàng)建或外部導(dǎo)入的項目,MounRiver® Studio(MRS)會根據(jù)對應(yīng)芯片內(nèi)核自動配置好目標工具鏈(riscv-none-embed-gcc或arm-none-eabi-gcc),同時,目標平臺、優(yōu)化等級、調(diào)試等級以及文件引用等編譯配置也會自動設(shè)置完畢。
【工程屬性頁】在資源管理器窗口選中要編譯的工程,點擊工具欄上的工程屬性配置按鈕,或者點擊右鍵菜單中的”Properties”進入編譯選項屬性頁面。
1.png (83.16 KB, 下載次數(shù): 116)
下載附件
2021-9-27 14:43 上傳
【目標處理器】用于指定目標指令架構(gòu)、擴展函數(shù)等參數(shù)。 - Architecture是指令集架構(gòu),rv32i是RISC-V 基礎(chǔ)整數(shù)指令集RVM表示支持乘除法擴展,RVA表示支持原子擴展,RVF表示單精度浮點數(shù)擴展,RVD為雙精度浮點數(shù)擴展,RVC為壓縮指令擴展。
- IntegerABI 為RISC-V應(yīng)用程序整數(shù)二進制接口,F(xiàn)loating point ABI為RISC-V應(yīng)用程序浮點數(shù)二進制接口,RISC-V 編譯器支持多個 ABI,具體取決于 F 和 D 擴展是否存在。RV32 的 ABI 分別名為 ilp32,ilp32f 和 ilp32d。ilp32 表示 C 語言的整型(int),長整型(long)和指針(pointer) 都是 32 位,可選后綴表示如何傳遞浮點參數(shù)。在 ilp32 中,浮點參數(shù)在整數(shù)寄存器中傳遞; 在 ilp32f中,單精度浮點參數(shù)在浮點寄存器中傳遞;在 ilp32d中,雙精度浮點參數(shù)也在浮點寄存器中傳遞。自然,如果想在浮點寄存中傳遞浮點參數(shù),需要相應(yīng)的浮點ISA 添加 F 或 D 擴展。因此要編譯 RV32I 的代碼(GCC 選項-march=rv32i),必須使用 ilp32ABI(GCC選項-mabi=ilp32)。反過來,調(diào)用約定并不要求浮點指令一定要使用浮點寄存器,因此RV32IFD與 ilp32,ilp32f和 ilp32d都兼容。
- Tuning 由微架構(gòu)優(yōu)化給定處理器的輸出,默認是rocket。
- Code model主要有兩種模式:
-mcmodel=medlow:程序及其靜態(tài)定義的符號必須位于單個2 GiB地址范圍內(nèi),并且必須位于絕對地址-2 GiB和+2 GiB之間。程序可以靜態(tài)或動態(tài)鏈接。這是默認的代碼模型。 -mcmodel=medany:程序及其靜態(tài)定義的符號可以任何單個2 GiB地址范圍內(nèi)。程序可以靜態(tài)或動態(tài)地連接。 - Align 中-mstrict-align-mno-strict-align 取決于處理器是否支持內(nèi)存的非對齊訪問。
- Small data limit 在某些目標上將小于n字節(jié)的全局和靜態(tài)變量放進一個特殊的段。
【優(yōu)化等級】主要是配置GCC的優(yōu)化選項,想要添加其他優(yōu)化選項可以寫在下方other optimizationflags中。
2.png (98.38 KB, 下載次數(shù): 90)
下載附件
2021-9-27 14:43 上傳
- -O、-O1:使用能減少目標文件大小以及執(zhí)行時間并且不會使編譯時間明顯增加的優(yōu)化.在編譯大型程序的時候會顯著增加編譯時內(nèi)存的使用.
- -O2: 包含-O1的優(yōu)化并增加了不需要在目標文件大小和執(zhí)行速度上進行折衷的優(yōu)化.編譯器不執(zhí)行循環(huán)展開以及函數(shù)內(nèi)聯(lián).此選項將增加編譯時間和目標文件的執(zhí)行性能.
- -Os:專門優(yōu)化目標文件大小,執(zhí)行所有的不增加目標文件大小的-O2優(yōu)化選項.并且執(zhí)行專門減小目標文件大小的優(yōu)化選項.
- -O3: 打開所有-O2的優(yōu)化選項并且增加部分參數(shù)。
【警告等級】用于設(shè)置GCC的警告參數(shù)選項。
3.png (163.04 KB, 下載次數(shù): 94)
下載附件
2021-9-27 14:43 上傳
- -fsyntax-only:檢查代碼中的語法錯誤,但除此之外不要做任何事情。
- -fmax-errors=n:將錯誤消息的最大數(shù)量限制為n ,此時GCC會緩存,而不是嘗試繼續(xù)處理源代碼。 如果n為0(默認值),則生成的錯誤消息數(shù)量不受限制。 如果還指定了-Wfatal-errors ,則重大錯誤優(yōu)先于此選項。
- -Werror:使所有的警告進入錯誤
- -pedantic:允許發(fā)出ANSI/ISO C標準所列出的所有警告
- -pedantic-errors:允許發(fā)出ANSI/ISO C標準所列出的錯誤
- -Wfatal-errors:遇到第一個錯誤就停止,減少查找錯誤時間
【調(diào)試等級】紅框中的-g設(shè)置GDB調(diào)試信息,注意生成靜態(tài)庫時將紅框中調(diào)為None,否則生成的庫會包含調(diào)試信息,導(dǎo)致庫文件過大。
4.png (49.52 KB, 下載次數(shù): 86)
下載附件
2021-9-27 14:43 上傳
【匯編、頭文件添加】紅框中的位置分別為添加匯編、頭文件接口,點擊右側(cè)方框上綠色的加號去添加文件路徑。
5.png (52.47 KB, 下載次數(shù): 78)
下載附件
2021-9-27 14:43 上傳
【鏈接腳本文件添加】紅框中的位置分別為添加鏈接腳本文件接口,點擊右側(cè)方框上綠色的加號去添加文件路徑。
6.png (54.27 KB, 下載次數(shù): 81)
下載附件
2021-9-27 14:43 上傳
【庫文件添加】 -L添加庫文件的路徑,-l添加庫名,注意庫名要去掉前綴和后綴,例如libtest.a,只需要填寫test。
7.png (48.46 KB, 下載次數(shù): 81)
下載附件
2021-9-27 14:43 上傳
【鏈接其他文件】Other objects 可以添加想要參與鏈接的.o或者.lib文件。
8.png (58.52 KB, 下載次數(shù): 99)
下載附件
2021-9-27 14:43 上傳
【輸出文件格式】右側(cè)紅框中可點擊下拉框選擇編譯后輸出BIN文件或者HEX文件。
9.png (47.16 KB, 下載次數(shù): 72)
下載附件
2021-9-27 14:43 上傳
【輸出類型】圖示位置可選擇生成可執(zhí)行文件或者靜態(tài)庫文件。
10.png (24.09 KB, 下載次數(shù): 92)
下載附件
2021-9-27 14:43 上傳
以上就是MRS常用的編譯配置,編譯之后生成的文件會存在工程目錄中obj文件中,其中.list和.map文件可用于對程序分析。
|