皋陶 发表于 2020-8-23 20:52:29

picoRV32 (RISC-V) GCC 编译环境

本帖最后由 皋陶 于 2020-8-26 15:21 编辑

我在windows7 32/64bit系统下都分别试过,编译 OK
采用的是 eclipse + GNU ,具体链接如下(32bit):
GNU 编译器
https://github.com/gnu-mcu-eclipse/riscv-none-gcc/releases/tag/v7.2.0-1-20171109[^]
(gnu-mcu-eclipse-riscv-none-gcc-7.2.0-1-20171109-1926-win32-setup)

elipcse c/c++安装包,用的是Neon3这个版本:http://www.eclipse.org/downloads/packages/eclipse-ide-cc-developers/neon3[^]
(eclipse-cpp-neon-3-win32)

CDT,eclipse c/c++的开发环境,下载的是9.2.1
https://projects.eclipse.org/projects/tools.cdt[^](cdt-9.2.1)

eclipse for gnu-mcu-clipse的plugin
https://github.com/gnu-mcu-eclipse/eclipse-plugins[^]
(ilg.gnumcueclipse.repository-4.2.1-201711101735)
具体安装过程就不累述了,注意事项:
a. IDE使用eclipse,版本需要用neon3以上的,这也是plug in要求的 版本。而Eclipse的基础是必须有先安装过JREb. CDT和plug in配合gnu-mcu-eclipse,形成我们的eclipse+gnu编译环境,对CDT的版本有要求也是因为plug in的 需求c. build tool好像并没有版本要求,有装过就ok,主要用于提供Make和rm..等命令 d. gnuarmeclipse.github.io已经更名为gnu-mcu-eclipse.github.io,其中原来arm toolchain的下载链接都转到arm.com的官网(因为我之前一直在用ARM)e. eclipse配置和以前用ARM差别不大,仅仅是对于RISC-v tool chain需要设定路径
实际上在linux或MAC上编译都差不多,上面那些链接里都可以找到对应文件压缩包的。个人感觉,改名为gnu-mcu-eclipse也是社区风向的转变,既然有开源CPU 可用而且还好用,当然更对这些人的口味,商用CPU已经不是唯一的选择了。
软件编译的时候要根据picoRV32的配置来搭配,-march=rv32i* 肯定没有问题。不要选-march=rv32e*,编译不过,好像当前gcc(v7.2.0.1)还未支持16位嵌入式ISA
首先从数字ic工程师那边确认一下,picoRV32配置了哪些,默认如下:
ENABLE_COUNTERS = 1,            
ENABLE_COUNTERS64 = 1,            
ENABLE_REGS_16_31 = 1,            
ENABLE_REGS_DUALPORT = 1,         
LATCHED_MEM_RDATA = 0,            
TWO_STAGE_SHIFT = 1,            
BARREL_SHIFTER = 0,               
TWO_CYCLE_COMPARE = 0,            
TWO_CYCLE_ALU = 0,               
COMPRESSED_ISA = 0,               
CATCH_MISALIGN = 1,               
CATCH_ILLINSN = 1,               
ENABLE_PCPI = 0,                  
ENABLE_MUL = 0,                  
ENABLE_FAST_MUL = 0,            
ENABLE_DIV = 0,                  
ENABLE_IRQ = 0,                  
ENABLE_IRQ_QREGS = 1,            
ENABLE_IRQ_TIMER = 1,            
ENABLE_TRACE = 0,               
REGS_INIT_ZERO = 0,               
MASKED_IRQ = 32'h 0000_0000,      
LATCHED_IRQ = 32'h ffff_ffff,   
PROGADDR_RESET = 32'h 0000_0000,
PROGADDR_IRQ = 32'h 0000_0010,   
STACKADDR = 32'h ffff_ffff      

默认不支持RVM,也就是不支持整数乘除法,也没加载interrupt controller(它有32bits 中断源,可以选择按位MASK,增加了4个regiser给irq使用,关于interrupt controller具体介绍留在下一章写吧)。trap地址是0x10,有个timer,不过我没用过,当然这都不影响编译了。

对了,研究代码可以去下载的picoRV32 source code里找,里面的fireware目录都是c code。
(下篇介绍下RISC-V指令打下基础)
本篇完,感谢关注:RISC-V单片机中文网
页: [1]
查看完整版本: picoRV32 (RISC-V) GCC 编译环境