在嵌入式開發中,當我們完成了工程建立、代碼編輯等操作之後,就可以開始進行工程編譯。 對于使用内置工程模闆建立或外部導入的項目,MounRiver® Studio(MRS)會根據對應晶片核心自動配置好目标工具鍊(riscv-none-embed-gcc或arm-none-eabi-gcc),同時,目标平台、優化等級、調試等級以及檔案引用等編譯配置也會自動設定完畢。
MRS最新V1.51版本安裝包擷取方式:www.mounriver.com 。
【工程屬性頁】在資料總管視窗選中要編譯的工程,點選工具欄上的工程屬性配置按鈕,或者點選右鍵菜單中的”Properties”進入編譯選項屬性頁面。

【目标處理器】用于指定目标指令架構、擴充函數等參數。
1.Architecture是指令集架構,rv32i是RISC-V 基礎整數指令集
2.RVM表示支援乘除法擴充,RVA表示支援原子擴充,RVF表示單精度浮點數擴充,RVD為雙精度浮點數擴充,RVC為壓縮指令擴充。
3.Integer ABI 為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),必須使用 ilp32 ABI(GCC選項-mabi=ilp32)。反過來,調用約定并不要求浮點指令一定要使用浮點寄存器,是以 RV32IFD 與 ilp32,ilp32f 和 ilp32d 都相容。
4.Tuning 由微架構優化給定處理器的輸出,預設是rocket。
5.Code model主要有兩種模式:
-mcmodel=medlow:程式及其靜态定義的符号必須位于單個2 GiB位址範圍内,并且必須位于絕對位址-2 GiB和+2 GiB之間。程式可以靜态或動态連結。這是預設的代碼模型。
-mcmodel=medany:程式及其靜态定義的符号可以任何單個2 GiB位址範圍内。程式可以靜态或動态地連接配接。
6.Align 中-mstrict-align -mno-strict-align 取決于處理器是否支援記憶體的非對齊通路。
7.Small data limit 在某些目标上将小于n位元組的全局和靜态變量放進一個特殊的段。
【優化等級】主要是配置GCC的優化選項,想要添加其他優化選項可以寫在下方other optimization flags中。
1.-O0:無優化(預設)
2.-O、-O1:使用能減少目标檔案大小以及執行時間并且不會使編譯時間明顯增加的優化.在編譯大型程式的時候會顯著增加編譯時記憶體的使用.
3.-O2: 包含-O1的優化并增加了不需要在目标檔案大小和執行速度上進行折衷的優化.編譯器不執行循環展開以及函數内聯.此選項将增加編譯時間和目标檔案的執行性能.
4.-Os:專門優化目标檔案大小,執行所有的不增加目标檔案大小的-O2優化選項.并且執行專門減小目标檔案大小的優化選項.
5.-O3: 打開所有-O2的優化選項并且增加部分參數。
【警告等級】用于設定GCC的警告參數選項。
1.-fsyntax-only:檢查代碼中的文法錯誤,但除此之外不要做任何事情。
2.-fmax-errors= n:将錯誤消息的最大數量限制為n ,此時GCC會緩存,而不是嘗試繼續處理源代碼。 如果n為0(預設值),則生成的錯誤消息數量不受限制。 如果還指定了-Wfatal-errors ,則重大錯誤優先于此選項。
3.-w:禁止所有警告消息。
4.-Werror:使所有的警告進入錯誤
5.-pedantic:允許發出ANSI/ISO C标準所列出的所有警告
6.-pedantic-errors:允許發出ANSI/ISO C标準所列出的錯誤
7.-Wfatal-errors:遇到第一個錯誤就停止,減少查找錯誤時間
【調試等級】紅框中的-g設定GDB調試資訊,注意生成靜态庫時将紅框中調為None,否則生成的庫會包含調試資訊,導緻庫檔案過大。
【彙編、頭檔案添加】紅框中的位置分别為添加彙編、頭檔案接口,點選右側方框上綠色的加号去添加檔案路徑。
【連結腳本檔案添加】紅框中的位置分别為添加連結腳本檔案接口,點選右側方框上綠色的加号去添加檔案路徑。
【庫檔案添加】
-L添加庫檔案的路徑,-l添加庫名,注意庫名要去掉字首和字尾,例如libtest.a,隻需要填寫test。
【連結其他檔案】Other objects 可以添加想要參與連結的.o或者.lib檔案。
【輸出檔案格式】右側紅框中可點選下拉框選擇編譯後輸出BIN檔案或者HEX檔案。
【輸出類型】圖示位置可選擇生成可執行檔案或者靜态庫檔案。
以上就是MRS常用的編譯配置,編譯之後生成的檔案會存在工程目錄中obj檔案中,其中.list和.map檔案可用于對程式分析。