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