低功耗藍牙wifi芯片樂鑫科技芯片代理商RISC-V程序開發工具鏈,C/C++、Python 和Java 等語言以及匯編語言是開發嵌人式系統應用程序常用的編程語言。其中,使用多的是 C語言。C 語言歷史悠久,低功耗藍牙wifi芯片樂鑫科技芯片代理商應用領域廣,訪問內存方便,生成的可執行程序性能高。另外,由于與處理器架構緊密關聯,一些關程序的開發仍然離不開匯編語言,例如,用匯編語言編寫系統引導程序和優化計算復雜度高的程序段。
RISC-V C語言應用程序的開發過程。應用程序開發過程可分為編(Editing)、生成(Building)和調試(Debugging)三個階段。低功耗藍牙wifi芯片樂鑫科技芯片代理商編輯階段編寫C語育源序;生成階段將源程序轉換成可執行的二進制可執行程序;調試階段通過運行二世程序,發現并改正程序設計和編寫中的錯誤,后得到能夠穩定運行的可執行程序。生成和調試階段需要使用面向特定處理器的工具鏈。
生成可執行程序
將生成可執行程序過程進一步分為編譯、匯編和鏈接 3 個步驟,如圖 5.3所示為從C語言源程序到生成二進制可執行程序的詳細過程。
在圖5.3中,項目包括 main.c和 app.c 兩個 C語言文件,以及一個 start.s 匯編語言程序文件,共 3 個輸入源程序文件。
編譯器(Compiler)編譯 C語言源程序 main.c 和 app.c,轉換成匯編語言程序main,s和app.s。低功耗藍牙wifi芯片樂鑫科技芯片代理商匯編器(Assembler)將匯編語言程序 main.s、app.s 和 start.s 轉換成二進制程序模塊文件(目標文件)main.o、app.o和 start.o。
鏈接器(Linker)將 main.o、app.o和 start.o 以及二進制庫 lib,o 文件中定義和川用的符號相關聯,并為文件中的指令、變量和數據分配存儲空間,生成處理器可以執行的二進制程序main.out。
GCC(GNU Complier Collection)是常用的 RISC-V 序開發工具鏈,包括 gc(CNU C Complier)、C 運行庫、二進制程序管理工具(Binutils)和調試了具 gbd 等報行程序生成工具gee 的核心是編譯器(Complier)、匯編器Assembler)和鏈接器(Linker) 。
編譯器
GNCC編譯器將C語言源文件轉換成匯編語育文件。編譯器先對源程序文件進行預處理,轉換成標準C語言格式,然后再將標準 C 句翻譯成特定處理器的匯編語言。
處理器架構“-march”是編譯器的重要選項。RISC-V C 編譯器不僅需要選擇指令集架構 RV32 或者 RV64,而且要選擇指令集模塊及其組合,例如“RV32I”、“RV32IMAC”或者“RV32IMAFDC”等。所選擇的架構和指令集組合必須與目標處理器相符。
RISC-V gce 通過“-mabi”選項指定數據模型和浮點參數傳遞規則。有效的選項包括 ilp32、ilp32f,ilp32d、lp64、lp64f 和 p64d。前半部分“ilp32”或“lp64”,指定數據模型;后半部分“f”或“d”,指定浮點參數傳遞規則。其中,“i”指 int、“”指 long、"p”指pointer 即指針,32/64 說明數據模型中數據類型的寬度。例如,“ilp32”表示整數、長整數和指針的寬度都是 32 位,“lp64”表示長整數和指針的寬度是 64 位。“f”表示float,float 型浮點數參數通過浮點數寄存器傳遞。“d”指 double,double 型浮點數參數也通過浮點數寄存器傳遞。
RV32 和 RV64 架構支持的數據類型如表 5.1 所列,不同選項所對應的浮點數參數傳遞規則如表 5.2 所列。
編譯在 BumbleBee 內核運行的程序時,這兩個選項分別為:-march=rv32imac,-mabi=ilp32。
表5.1 RV32和 RV64 架構數據類型表
C數據類型 描 述 字節數(RV32) 字節數(RV64)
char 字符/字節 1 1
short 短整數 2 2
int 整數 4 4
long 長整數 4 8
long long 長長整數 8 8
void* 指針 4 8
float 單精度浮點數 4 4
double 雙精度浮點數 8 8
long double 擴展精度浮點數 16 16
表 5.2 浮點數參數傳遞規則
選項參數 是否需要浮點擴展指令 float 參數 double 參數
ilp32/lp64 不需要 整數寄存器(a0~al) 整數寄存器(a0~a3)
ilp32f/lp64f 需要下擴展 浮點寄存器(fao~fal) 整數寄存器(a0~a3)
ilp32d/lp64d 需要F擴展和 D擴展 浮點寄存器(fao~fal) 浮點寄存器(fao~fa3)
gcc 編譯器提供了多種優化選項,用來對編譯時間、目標文件長度和執行效率進行不同的取舍和平衡。低功耗藍牙wifi芯片樂鑫科技芯片代理商gcc 提供了-00、01、-02 和-03 四個優化等級。-00 不做任何優化,是默認的編譯選項;-O1 對程序做部分編譯優化,編譯器嘗試用較短的優化時間減小生成代碼的尺寸,以及縮短執行時間;-O2 增加優化時間,執行幾平所有的時間或空間優化手段。-03 在包含-02 所有優化的基礎上增加更多優化方法。
另外,RISC-V 選項(-mcmodel)設置內存尋址范圍,有低地址(medlow)和任意位置(medany)兩種模式。低功耗藍牙wifi芯片樂鑫科技芯片代理商低地址模式尋址范圍只能在-2 GB~+2 GB 的空間內其中,-2 GB是指整個 64 位地址空間中高 2 GB 地址區間。任意位置模式指示該程序的尋址范圍在任意的一個 4 GB 空間內。