精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

對(duì)RISC-V GCC工具鏈進(jìn)行簡(jiǎn)單的中文科普與介紹

HOkf_real_farme ? 來(lái)源:未知 ? 作者:李倩 ? 2018-06-14 11:33 ? 次閱讀

隨著國(guó)內(nèi)第一本RISC-V中文書(shū)籍《手把手教你設(shè)計(jì)CPU——RISC-V處理器篇》正式上市,越來(lái)越多的愛(ài)好者開(kāi)始使用開(kāi)源的蜂鳥(niǎo)E203 RISC-V處理核,很多初學(xué)者留言詢(xún)問(wèn)有關(guān)RISC-V工具鏈?zhǔn)褂玫膯?wèn)題,因此本公眾號(hào)將開(kāi)始陸續(xù)發(fā)表若干篇有關(guān)RISC-V軟件工具鏈?zhǔn)褂玫奈恼拢ǎ篟ISC-V嵌入式開(kāi)發(fā)準(zhǔn)備篇1:編譯過(guò)程簡(jiǎn)介RISC-V嵌入式開(kāi)發(fā)準(zhǔn)備篇2:嵌入式開(kāi)發(fā)的特點(diǎn)介紹RISC-V嵌入式開(kāi)發(fā)入門(mén)篇1:RISC-V GCC工具鏈的介紹RISC-V嵌入式開(kāi)發(fā)入門(mén)篇2:RISC-V匯編語(yǔ)言程序設(shè)計(jì)RISC-V嵌入式開(kāi)發(fā)上手篇:基于HBird-E-SDK平臺(tái)的軟件開(kāi)發(fā)與運(yùn)行RISC-V嵌入式開(kāi)發(fā)實(shí)踐篇:運(yùn)行開(kāi)源蜂鳥(niǎo)E200 MCU更多示例程序RISC-V嵌入式開(kāi)發(fā)新奇篇:基于Windows Eclipse IDE的軟件開(kāi)發(fā)與運(yùn)行RISC-V嵌入式開(kāi)發(fā)升華篇:基于開(kāi)源蜂鳥(niǎo)E200 MCU移植RTOS

本文為RISC-V嵌入式開(kāi)發(fā)入門(mén)篇1:RISC-V GCC工具鏈的介紹。

本文的目的是對(duì)RISC-V GCC工具鏈進(jìn)行簡(jiǎn)單的中文科普與介紹。

注:本文力求通俗易懂,主要面向初學(xué)者,對(duì)RISC-V GCC工具鏈有所了解的讀者可以忽略此文。

1 RISC-V GCC工具鏈種類(lèi)

在本號(hào)上次發(fā)表的文章《編譯過(guò)程簡(jiǎn)介》中已經(jīng)介紹了通用的GCC工具鏈,RISC-V GCC工具鏈與普通的GCC工具鏈基本相同,用戶(hù)可以遵照開(kāi)源的riscv-gnu-toolchain項(xiàng)目(請(qǐng)?jiān)贕ithub中搜索riscv-gnu-toolchain)中的說(shuō)明自行生成全套的GCC工具鏈。

由于GCC工具鏈支持各種不同的處理器架構(gòu),因此不同處理器架構(gòu)的GCC工具鏈會(huì)有不同的命名。遵循GCC工具鏈的命名規(guī)則,當(dāng)前RISC-V GCC工具鏈有如下幾個(gè)版本:

以“riscv64-unknown-linux-gnu-”為前綴的版本,譬如riscv64-unknown-linux-gnu-gcc、riscv64-unknown-linux-gnu-gdb、riscv64-unknown-linux-gnu-ar等。具體的后綴名稱(chēng)與《編譯過(guò)程簡(jiǎn)介》中描述的GCC、GDB和Binutils工具相對(duì)應(yīng)。

“riscv64-unknown-linux-gnu-”前綴表示該版本的工具鏈?zhǔn)?4位架構(gòu)的Linux版本工具鏈。注意:此Linux不是指當(dāng)前版本工具鏈一定要運(yùn)行在Linux操作系統(tǒng)電腦上,此Linux是指該GCC工具鏈會(huì)使用Linux的Glibc作為C運(yùn)行庫(kù),請(qǐng)參見(jiàn)《編譯過(guò)程簡(jiǎn)介》了解Glibc的更多信息

同理,“riscv32-unknown-linux-gnu-”前綴的版本則是32位架構(gòu)。

注意:此處的前綴riscv64(還有riscv32的版本)與運(yùn)行在64位或者32位電腦上毫無(wú)關(guān)系,此處的64和32是指如果沒(méi)有通過(guò)-march和-mabi選項(xiàng)指定RISC-V架構(gòu)的位寬,默認(rèn)將會(huì)按照64位還是32位的RISC-V架構(gòu)來(lái)編譯程序。有關(guān)-march和-mabi選項(xiàng)的含義,請(qǐng)參見(jiàn)第3節(jié)。

以“riscv64-unknown-elf-”為前綴的版本,則表示該版本為非Linux(Non-linux)版本的工具鏈。注意:

此Non-Linux不是指當(dāng)前版本工具鏈一定不能運(yùn)行在Linux操作系統(tǒng)的電腦上,此Non-Linux是指該GCC工具鏈會(huì)使用newlib作為C運(yùn)行庫(kù),請(qǐng)參見(jiàn)本號(hào)上次發(fā)表的文章《嵌入式開(kāi)發(fā)特點(diǎn)》中了解newlib的更多信息。

同上理,此處的前綴riscv64(還有riscv32的版本)與運(yùn)行在64位或者32位電腦上毫無(wú)關(guān)系,此處的64和32是指如果沒(méi)有通過(guò)-march和-mabi選項(xiàng)指定RISC-V架構(gòu)的位寬,默認(rèn)將會(huì)按照64位還是32位的RISC-V架構(gòu)來(lái)編譯程序。有關(guān)-march和-mabi選項(xiàng)的含義,請(qǐng)參見(jiàn)第3節(jié)。

以“riscv-none-embed-”為前綴的版本,則表示是最新為裸機(jī)(bare-metal)嵌入式系統(tǒng)而生成的交叉編譯工具鏈,所謂裸機(jī)(bare-metal)是嵌入式領(lǐng)域的一個(gè)常見(jiàn)形態(tài),表示不運(yùn)行操作系統(tǒng)的系統(tǒng)。該版本使用新版本的newlib作為C運(yùn)行庫(kù),并且支持newlib-nano,能夠?yàn)榍度胧较到y(tǒng)生成更加優(yōu)化的代碼體積(Code Size)。開(kāi)源的蜂鳥(niǎo)E203 MCU系統(tǒng)是典型的嵌入式系統(tǒng),因此將使用“riscv-none-embed-”為前綴的版本作為RISC-V GCC交叉工具鏈。注意:

此版本編譯器由于使用newlib和newlib-nano作為C運(yùn)行庫(kù),所以必須對(duì) newlib底層的樁函數(shù)進(jìn)行移植,否則無(wú)法正常使用調(diào)用底層樁函數(shù)的C函數(shù)(譬如printf會(huì)調(diào)用write樁函數(shù))。

關(guān)于Newlib和newlib-nano及其樁函數(shù),請(qǐng)參見(jiàn)本號(hào)上次發(fā)表的文章《嵌入式開(kāi)發(fā)特點(diǎn)》中了解更多信息。

2 riscv-none-embed工具鏈下載

對(duì)于riscv-none-embed版本的工具鏈而言,為了方便用戶(hù)直接使用預(yù)編譯好的工具鏈,Eclipse開(kāi)源社區(qū)會(huì)定期更新發(fā)布最新版本的預(yù)編譯好的RISC-V嵌入式GCC工具鏈,包括Windows版本和Linux版本。請(qǐng)?jiān)诠雀柚兴阉鳌皉eleases gnu-mcu-eclipse/riscv-none-gcc”進(jìn)入網(wǎng)頁(yè)下載Windows版本或者Linux版本,如圖1中所示。對(duì)于Linux和Windows版本均只需在相應(yīng)的操作系統(tǒng)中解壓即可使用。

圖1 riscv-none-embed工具鏈下載鏈接

3 RISC-V GCC工具鏈的(–march=)和(–mabi=)選項(xiàng)

3.1 (–march=)選項(xiàng)

由于RISC-V的指令集是模塊化的指令集,因此在為目標(biāo)RISC-V平臺(tái)進(jìn)行交叉編譯之時(shí),需要通過(guò)選項(xiàng)指定目標(biāo)RISC-V平臺(tái)所支持的模塊化指令集組合,該選項(xiàng)為(-march=),有效的選項(xiàng)值如下:

rv32i[m][a][f[d]][c]

rv32g[c]

rv64i[m][a][f[d]][c]

rv64g[c]

注意:在上述選項(xiàng)中rv32表示目標(biāo)平臺(tái)是32位架構(gòu),rv64表示目標(biāo)平臺(tái)是64位架構(gòu),其他i/m/a/f/d/c/g分別代表了RISC-V模塊化指令子集的字母簡(jiǎn)稱(chēng)。請(qǐng)參見(jiàn)RISC-V中文書(shū)籍《手把手教你設(shè)計(jì)CPU——RISC-V處理器篇》中附錄A.1節(jié)中關(guān)于RISC-V架構(gòu)指令集的詳細(xì)中文介紹。

本節(jié)后文會(huì)介紹(-march=)選項(xiàng)使用的具體實(shí)例。

3.2 (–mabi=)選項(xiàng)

由于RISC-V的指令集是模塊化的指令集,因此在為目標(biāo)RISC-V平臺(tái)進(jìn)行交叉編譯之時(shí),需要通過(guò)選項(xiàng)指定嵌入式RISC-V目標(biāo)平臺(tái)所支持的ABI函數(shù)調(diào)用規(guī)則(有關(guān)ABI函數(shù)調(diào)用規(guī)則的相關(guān)信息請(qǐng)參見(jiàn)RISC-V中文書(shū)籍《手把手教你設(shè)計(jì)CPU——RISC-V處理器篇》中附錄A的圖A-1)。RISC-V定義了兩種整數(shù)的ABI調(diào)用規(guī)則和三種浮點(diǎn)ABI調(diào)用規(guī)則,通過(guò)選項(xiàng)(-abi=)指明,有效的選項(xiàng)值如下:

ilp32

ilp32f

ilp32d

lp64

lp64f

lp64d

注意:

在上述選項(xiàng)中兩種前綴(ilp32和lp64)表示的含義如下:

前綴ilp32表示目標(biāo)平臺(tái)是32位架構(gòu),在此架構(gòu)下,C語(yǔ)言的“int”和“l(fā)ong”變量長(zhǎng)度為32比特,“l(fā)ong long”變量為64位;

前綴lp64表示目標(biāo)平臺(tái)是64位架構(gòu),C語(yǔ)言的“int”變量長(zhǎng)度為32比特,而“l(fā)ong”變量長(zhǎng)度為64比特。

RISC-V的32位和64位架構(gòu)下更多的數(shù)據(jù)類(lèi)型寬度如圖2中所示。

圖2 RISC-V的32位和64位架構(gòu)下的數(shù)據(jù)類(lèi)型寬度

上述選項(xiàng)中的三種后綴類(lèi)型(無(wú)后綴、后綴f、后綴d)表示的含義如下:

無(wú)后綴:在此架構(gòu)下,如果使用了浮點(diǎn)類(lèi)型的操作,直接使用RISC-V浮點(diǎn)指令進(jìn)行支持。但是當(dāng)浮點(diǎn)數(shù)作為函數(shù)參數(shù)進(jìn)行傳遞之時(shí),無(wú)論單精度浮點(diǎn)數(shù)還是雙精度浮點(diǎn)數(shù)均需要通過(guò)存儲(chǔ)器中的堆棧進(jìn)行傳遞。

f:表示目標(biāo)平臺(tái)支持硬件單精度浮點(diǎn)指令。在此架構(gòu)下,如果使用了浮點(diǎn)類(lèi)型的操作,直接使用RISC-V浮點(diǎn)指令進(jìn)行支持。但是當(dāng)浮點(diǎn)數(shù)作為函數(shù)參數(shù)進(jìn)行傳遞之時(shí),單精度浮點(diǎn)數(shù)可以直接通過(guò)寄存器傳遞,而雙精度浮點(diǎn)數(shù)需要通過(guò)存儲(chǔ)器中的堆棧進(jìn)行傳遞。

d:表示目標(biāo)平臺(tái)支持硬件雙精度浮點(diǎn)指令。在此架構(gòu)下,如果使用了浮點(diǎn)類(lèi)型的操作,直接使用RISC-V浮點(diǎn)指令進(jìn)行支持。當(dāng)浮點(diǎn)數(shù)作為函數(shù)參數(shù)進(jìn)行傳遞之時(shí),無(wú)論單精度還是雙精度浮點(diǎn)數(shù)都可以直接通過(guò)寄存器傳遞。

本節(jié)后文會(huì)介紹(-mabi=)選項(xiàng)使用的具體實(shí)例。

3.3 (–march=)和(–mabi=)不同選項(xiàng)編譯實(shí)例

為了便于讀者更加形象地理解(-march=)和(-mabi=)選項(xiàng)的具體含義,下面以一個(gè)實(shí)例加以介紹。

假設(shè)有一段C語(yǔ)言函數(shù)代碼,如下所示:

//這是一個(gè)名為dmul的函數(shù),其有兩個(gè)參數(shù),為double類(lèi)型的雙精度浮點(diǎn)數(shù) double dmul(double a, double b) { return b * a; }

如果使用-march=rv64imafdc -mabi=lp64d的選項(xiàng)組合進(jìn)行編譯,則會(huì)生成如下匯編代碼:

$ riscv64-unknown-elf-gcc test.c -march=rv64imafdc -mabi=lp64d -o- -S -O3//所生成的匯編代碼如下,從中可以看出,浮點(diǎn)數(shù)乘法操作直接使用了RISC-V的fmul.d指令進(jìn)行支持,且函數(shù)的兩個(gè)double類(lèi)型的參數(shù)直接使用浮點(diǎn)通用寄存器fa0和fa1進(jìn)行傳遞。這是因?yàn)椋? -march選項(xiàng)指明了目標(biāo)平臺(tái)支持的模塊化指令子集為imafdc,其中包含了F和D指令子集,即支持單精度和雙精度浮點(diǎn)指令,因此可以直接使用RISC-V的浮點(diǎn)指令來(lái)支持浮點(diǎn)數(shù)的操作。- -mabi選項(xiàng)指明了后綴“d”,表示當(dāng)浮點(diǎn)數(shù)作為函數(shù)參數(shù)進(jìn)行傳遞之時(shí),無(wú)論單精度還是雙精度浮點(diǎn)數(shù)都可以直接通過(guò)寄存器傳遞。 dmul: fmul.d fa0,fa0,fa1 ret

如果使用-march=rv32imac -mabi=ilp32的選項(xiàng)組合進(jìn)行編譯,則會(huì)生成如下匯編代碼:

$ riscv64-unknown-elf-gcc test.c -march=rv32imac -mabi=ilp32 -o- -S -O3//所生成的匯編代碼如下,從中可以看出,浮點(diǎn)數(shù)乘法操作由C庫(kù)函數(shù)(__muldf3)進(jìn)行支持,這是因?yàn)椋? -march選項(xiàng)指明了目標(biāo)平臺(tái)支持的模塊化指令子集為I/M/A/C,其中未包含了F和D指令子集,即不支持單精度和雙精度浮點(diǎn)指令,因此無(wú)法直接使用RISC-V的浮點(diǎn)指令來(lái)支持浮點(diǎn)數(shù)的操作。 dmul: mv a4,a2 mv a5,a3 add sp,sp,-16 mv a2,a0 mv a3,a1 mv a0,a4 mv a1,a5 sw ra,12(sp) call __muldf3 lw ra,12(sp) add sp,sp,16 jr ra

如果使用-march=rv32imafdc -mabi=ilp32的選項(xiàng)組合進(jìn)行編譯,則會(huì)生成如下匯編代碼:

$ riscv64-unknown-elf-gcc test.c -march=rv32imafdc -mabi=ilp32 -o- -S -O3//所生成的匯編代碼如下,從中可以看出,浮點(diǎn)數(shù)乘法操作直接使用了RISC-V的fmul.d指令進(jìn)行支持,但是函數(shù)的兩個(gè)浮點(diǎn)類(lèi)型的參數(shù)均通過(guò)堆棧進(jìn)行的傳遞,這是因?yàn)椋? -march選項(xiàng)指明了目標(biāo)平臺(tái)支持的模塊化指令子集為I/M/A/F/D/C,其中包含了F和D指令子集,即支持單精度和雙精度浮點(diǎn)指令,因此可以直接使用RISC-V的浮點(diǎn)指令來(lái)支持浮點(diǎn)數(shù)的操作。- -mabi選項(xiàng)指明了“無(wú)后綴”,表示當(dāng)浮點(diǎn)數(shù)作為函數(shù)參數(shù)進(jìn)行傳遞之時(shí),無(wú)論單精度還是雙精度浮點(diǎn)數(shù)都需要通過(guò)堆棧進(jìn)行傳遞。 dmul: add sp,sp,-16 //對(duì)堆棧指針寄存器(sp)進(jìn)行調(diào)整,分配堆棧空間 sw a0,8(sp) //將函數(shù)參數(shù)寄存器a0中的值存入堆棧 sw a1,12(sp) //將函數(shù)參數(shù)寄存器a1中的值存入堆棧 fld fa5,8(sp) //從堆棧中取回雙精度浮點(diǎn)操作數(shù) sw a2,8(sp) //將函數(shù)參數(shù)寄存器a2中的值存入堆棧 sw a3,12(sp) //將函數(shù)參數(shù)寄存器a3中的值存入堆棧 fld fa4,8(sp) //從堆棧中取回雙精度浮點(diǎn)操作數(shù) fmul.d fa5,fa5,fa4 //調(diào)用RISC-V的浮點(diǎn)指令進(jìn)行運(yùn)算 fsd fa5,8(sp) //將計(jì)算結(jié)果存回堆棧 lw a0,8(sp) //通過(guò)堆棧將結(jié)果賦值給函數(shù)結(jié)果返回寄存器a0 lw a1,12(sp) //通過(guò)堆棧將結(jié)果賦值給函數(shù)結(jié)果返回寄存器a1 add sp,sp,16 //對(duì)堆棧指針寄存器(sp)進(jìn)行調(diào)整,回收堆棧空間 jr ra

如果使用-march=rv32imac -mabi=ilp32d的選項(xiàng)組合進(jìn)行編譯,則會(huì)報(bào)非法錯(cuò)誤:

$ riscv64-unknown-elf-gcc test.c -march=rv32imac -mabi=ilp32d -o- -S -O3cc1: error: requested ABI requires -march to subsume the 'D' extension//從中可以看出報(bào)非法錯(cuò)誤,這是因?yàn)椋? -march選項(xiàng)指明了目標(biāo)平臺(tái)支持的模塊化指令子集為I/M/A/C,其中未包含了F和D指令子集,即不支持單精度和雙精度浮點(diǎn)指令,因此無(wú)法直接使用RISC-V的浮點(diǎn)指令來(lái)支持浮點(diǎn)數(shù)的操作。- -mabi選項(xiàng)指明了后綴“d”,表示目標(biāo)平臺(tái)支持硬件浮點(diǎn)指令。這一點(diǎn)與-march選項(xiàng)中指明的指令集子集產(chǎn)生了沖突。

3.4 (–march=)和(–mabi=)選項(xiàng)合法組合

雖然(–march=)和(–mabi=)選項(xiàng)理論上可以組成很多種不同的組合,但是目前并不是所有的(–march=)和(–mabi=)選項(xiàng)組合都是合法,目前的riscv-none-embed工具所支持的組合如下:

march=rv32i/mabi=ilp32

march=rv32ic/mabi=ilp32

march=rv32im/mabi=ilp32

march=rv32imc/mabi=ilp32

march=rv32iac/mabi=ilp32

march=rv32imac/mabi=ilp32

march=rv32imaf/mabi=ilp32f

march=rv32imafc/mabi=ilp32f

march=rv32imafdc/mabi=ilp32f

march=rv32gc/mabi=ilp32f

march=rv64imac/mabi=lp64

march=rv64imafdc/mabi=lp64d

march=rv64gc/mabi=lp64d

注意:上述有效組合來(lái)自于本文撰寫(xiě)時(shí)的信息。隨著時(shí)間推移,新發(fā)布的riscv-none-embed工具可能會(huì)支持更多的組合,請(qǐng)讀者以其最新的發(fā)布說(shuō)明(Release Notes)為準(zhǔn)。

4 RISC-V GCC工具鏈的(–mcmodel=)選項(xiàng)

目前RISC-V GCC工具鏈認(rèn)為,在實(shí)際的情形中,一個(gè)程序的大小一般不會(huì)超過(guò)4GB的大小,因此在程序內(nèi)部的尋址空間不能超過(guò)4GB的空間。而在64位的架構(gòu)中,地址空間的大小遠(yuǎn)遠(yuǎn)的大于4GB的空間,因此針對(duì)RV64架構(gòu)而言,RISC-V GCC工具鏈定義了(–mcmodel=)選項(xiàng)用于指定尋址范圍的模式,使得編譯器在編譯階段能夠按照相應(yīng)的策略編譯生成代碼。其有效的選項(xiàng)值如下:

-mcmodel=medlow

-mcmodel=medany

注意:

在RV32架構(gòu)中,整個(gè)地址空間的大小就是4GB,因此(–mcmodel=)選項(xiàng)的任何值對(duì)于編譯的結(jié)果都無(wú)影響。

RISC-V GCC工具鏈在未來(lái)可能也會(huì)支持大于4GB的尋址空間。

medlow和medany兩個(gè)選項(xiàng)的含義分別解釋如下。

(-mcmodel=medlow)選項(xiàng)

(-mcmodel==medlow)選項(xiàng)用于指示該程序的尋址范圍固定只能在-2GB至+2GB的空間內(nèi)。注意:地址區(qū)間沒(méi)有負(fù)數(shù)可言,-2GB是指整個(gè)64位地址空間最高2GB地址區(qū)間。由于此模式的尋址空間是固定的-2GB至+2GB的空間內(nèi),因此編譯器能夠相對(duì)生成比較高效的代碼,但是由于尋址空間固定,對(duì)于整個(gè)64位的大多數(shù)地址空間都無(wú)法訪問(wèn)到,用戶(hù)需小心使用。

(-mcmodel=medany)選項(xiàng)

(-mcmodel==medlow)選項(xiàng)用于指示該程序的尋址范圍可以在任意的一個(gè)4G空間內(nèi)。由于此模式的尋址空間不是固定的,所以相對(duì)比較靈活。

5 RISC-V GCC工具鏈的其他選項(xiàng)

本章僅介紹了RISC-V GCC工具鏈幾個(gè)特別的選項(xiàng),有關(guān)RISC-V GCC工具鏈的完整選項(xiàng)列表和解釋?zhuān)信d趣的讀者可以在谷歌輸入“gcc/RISC-V-Options”關(guān)鍵字進(jìn)行搜索進(jìn)入相關(guān)網(wǎng)頁(yè)查詢(xún),如圖3中所示。

圖3 RISC-V GCC工具鏈的完整選項(xiàng)列表和解釋

6 RISC-V GCC工具鏈的預(yù)定義宏

RISC-V GCC會(huì)根據(jù)編譯生成若干預(yù)定義的宏,在Linux操作環(huán)境中可以使用如下方法查看和RISC-V相關(guān)的宏:

//首先創(chuàng)建一個(gè)空文件touch empty.h//使用RISC-V GCC的-E選項(xiàng)對(duì)empty.h進(jìn)行預(yù)處理,有關(guān)“預(yù)處理”的背景知識(shí)請(qǐng)參見(jiàn)本號(hào)文章《編譯過(guò)程簡(jiǎn)介》//通過(guò)grep命令對(duì)于處理后的文件搜索riscv的關(guān)鍵字//如果使用-march=rv32imac -mabi=ilp32選項(xiàng)可以看出生成如下預(yù)定義宏riscv-none-embed-gcc -march=rv32imac -mabi=ilp32 -E -dM empty.h | grep riscv#define __riscv 1#define __riscv_atomic 1#define __riscv_cmodel_medlow 1#define __riscv_float_abi_soft 1#define __riscv_compressed 1#define __riscv_mul 1#define __riscv_muldiv 1#define __riscv_xlen 32#define __riscv_div 1//如果使用-march=rv32imafdc -mabi=ilp32f選項(xiàng)可以看出生成如下預(yù)定義宏riscv-none-embed-gcc -march=rv32imafdc -mabi=ilp32f -E -dM empty.h | grep riscv #define __riscv 1#define __riscv_atomic 1#define __riscv_cmodel_medlow 1#define __riscv_float_abi_single 1#define __riscv_fdiv 1#define __riscv_flen 64#define __riscv_compressed 1#define __riscv_mul 1#define __riscv_muldiv 1#define __riscv_xlen 32#define __riscv_fsqrt 1#define __riscv_div 1

7 RISC-V GCC工具鏈?zhǔn)褂脤?shí)例

本號(hào)后續(xù)發(fā)文《基于HBird-E-SDK平臺(tái)的軟件開(kāi)發(fā)與運(yùn)行》將結(jié)合HBird-E-SDK平臺(tái)的實(shí)例了解如何使用RISC-V GCC工具鏈進(jìn)行嵌入式程序的開(kāi)發(fā)與編譯。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 嵌入式開(kāi)發(fā)

    關(guān)注

    18

    文章

    1022

    瀏覽量

    47512
  • RISC-V
    +關(guān)注

    關(guān)注

    44

    文章

    2229

    瀏覽量

    46030

原文標(biāo)題:RISC-V嵌入式開(kāi)發(fā)入門(mén)篇1:RISC-V GCC工具鏈的介紹

文章出處:【微信號(hào):real_farmer,微信公眾號(hào):硅農(nóng)亞歷山大】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    RISC-V 工具簡(jiǎn)介

    性能是硬件+工具的綜合能力體現(xiàn),單比較硬件頻率指標(biāo)沒(méi)有實(shí)際意義。調(diào)試高效性直接影響了開(kāi)發(fā)者分析解決問(wèn)題效率,也是決定了處理器能否開(kāi)發(fā)者接受、是否可以被廣泛應(yīng)用。 三、RISC-V 工具
    發(fā)表于 10-25 22:59

    科普RISC-V生態(tài)架構(gòu)(認(rèn)識(shí)RISC-V)

    工具、RTOS/Linux操作系統(tǒng)的移植等工作都取得關(guān)鍵突破;2018年11月,RISC-V基金會(huì)宣布了與Linux基金會(huì)的聯(lián)合合作。作為合作的一部分,Linux基金會(huì)還將為RISC-V
    發(fā)表于 08-02 11:50

    RISC-V工具簡(jiǎn)介

    環(huán)境,分別面向MCU應(yīng)用開(kāi)發(fā)和通用應(yīng)用開(kāi)發(fā),降低現(xiàn)有工程遷移到RISC-V架構(gòu)芯片上的難度。關(guān)于劍池系列工具的每個(gè)工具,在后續(xù)的文章中會(huì)做詳細(xì)介紹
    發(fā)表于 09-01 14:24

    嵌入式開(kāi)發(fā)的特點(diǎn)有哪些呢

    本文的目的是對(duì)嵌入式開(kāi)發(fā)的特點(diǎn)進(jìn)行簡(jiǎn)單科普與回顧,為后續(xù)詳細(xì)介紹RISC-V GCC
    發(fā)表于 11-05 08:27

    對(duì)RISC-V編譯過(guò)程進(jìn)行簡(jiǎn)單科普與回顧

    本文的目的是對(duì)編譯過(guò)程進(jìn)行簡(jiǎn)單科普與回顧,為后續(xù)詳細(xì)介紹RISC-V GCC
    發(fā)表于 11-05 08:55

    RISC-V GCC工具的種類(lèi)及下載步驟

    本文的目的是對(duì)RISC-V GCC工具進(jìn)行簡(jiǎn)單中文科普
    發(fā)表于 11-08 07:09

    RISC-V嵌入式開(kāi)發(fā)的特點(diǎn)有哪些

    RISC-V處理核,很多初學(xué)者留言詢(xún)問(wèn)有關(guān)RISC-V工具使用的問(wèn)題,因此本公眾號(hào)將開(kāi)始陸續(xù)發(fā)表若干篇有關(guān)RISC-V軟件
    發(fā)表于 11-08 08:33

    RISC-V工具簡(jiǎn)介

    ,能否被開(kāi)發(fā)者廣泛使用。RISC-V 工具的現(xiàn)狀RISC-V 工具的現(xiàn)狀如何?能否滿(mǎn)足當(dāng)前的
    發(fā)表于 03-09 06:32

    移植RISC-V CH32V103R BSP的教程

    72 MHz準(zhǔn)備編譯工具env工具里面默認(rèn)只帶了arm_gcc 的 toolchain,要編譯 RISC-V,還需要下載
    發(fā)表于 03-14 15:08

    請(qǐng)問(wèn)最新的riscv gcc 開(kāi)發(fā)工具在哪能下載?

    下載的MountRiver 1.70 版本,內(nèi)置的riscv 工具gcc version 8.2.0 (xPack GNU RISC-V Embedded
    發(fā)表于 06-20 06:20

    我了解的RISC-V

    已經(jīng)提供了完整的工具,并且RISC-V基金會(huì)持續(xù)維護(hù)該工具。當(dāng)前RISC-V的支持已經(jīng)合并到
    發(fā)表于 03-19 10:52

    2c4f0a764eabff4aabcead781fe17a64

    本文的目的是對(duì)嵌入式開(kāi)發(fā)的特點(diǎn)進(jìn)行簡(jiǎn)單科普與回顧,為后續(xù)詳細(xì)介紹RISC-V GCC
    發(fā)表于 11-02 17:51 ?9次下載
    2c4f0a764eabff4aabcead781fe17a64

    RISC-V嵌入式開(kāi)發(fā)準(zhǔn)備篇1:編譯過(guò)程簡(jiǎn)介

    本文的目的是對(duì)編譯過(guò)程進(jìn)行簡(jiǎn)單科普與回顧,為后續(xù)詳細(xì)介紹RISC-V GCC
    發(fā)表于 11-02 19:06 ?38次下載
    <b class='flag-5'>RISC-V</b>嵌入式開(kāi)發(fā)準(zhǔn)備篇1:編譯過(guò)程簡(jiǎn)介

    RISC-V嵌入式開(kāi)發(fā)入門(mén)篇1:RISC-V GCC工具介紹

    本文的目的是對(duì)RISC-V GCC工具進(jìn)行簡(jiǎn)單中文科普
    發(fā)表于 11-03 09:06 ?30次下載
    <b class='flag-5'>RISC-V</b>嵌入式開(kāi)發(fā)入門(mén)篇1:<b class='flag-5'>RISC-V</b> <b class='flag-5'>GCC</b><b class='flag-5'>工具</b><b class='flag-5'>鏈</b>的<b class='flag-5'>介紹</b>

    RISC-V設(shè)計(jì)支持工具,支持RISC-V技術(shù)的基礎(chǔ)

    RISC-V設(shè)計(jì)支持工具,支持RISC-V技術(shù)的基礎(chǔ) ppt分享
    發(fā)表于 07-14 17:15 ?12次下載