RISC-V单片机集成开发环境(IDE) MounRiver Studio软件介绍(四):工具链及编译参数
在MRS资源管理器窗口选中要编译的工程,点击工具栏上的工程属性配置按钮 ,进入编译选项配置页面:
Target processor主要设置目标处理器属性,详细信息可以在GCC文档3.18.38 RISC-V Options查看。Architecture是指令集架构,RV32I是RISC-V 基础整数指令集,RVM表示支持乘除法扩展,RVA表示支持原子扩展,RVF表示单精度浮点数扩展,RVD为双精度浮点数扩展,RVC为压缩指令扩展。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 都兼容。
Tuning 由微架构优化给定处理器的输出,默认是rocket。
Code model
-mcmodel=medlow:程序及其静态定义的符号必须位于单个2 GiB地址范围内,并且必须位于绝对地址-2 GiB和+2 GiB之间。程序可以静态或动态链接。这是默认的代码模型。
-mcmodel=medany:程序及其静态定义的符号可以任何单个2 GiB地址范围内。程序可以静态或动态地连接。
Small data limit 在某些目标上将小于n字节的全局和静态变量放进一个特殊的段。
Align 中-mstrict-align -mno-strict-align 取决于处理器是否支持内存的非对齐访问。
Optimization
主要是配置GCC的优化选项,想要添加其他优化选项可以写在下方other optimization flags中,下面说几个常用的
-O0:无优化(默认)
-O和-O1:使用能减少目标文件大小以及执行时间并且不会使编译时间明显增加的优化.在编译大型程序的时候会显著增加编译时内存的使用.
-O2: 包含-O1的优化并增加了不需要在目标文件大小和执行速度上进行折衷的优化.编译器不执行循环展开以及函数内联.此选项将增加编译时间和目标文件的执行性能.
-Os:专门优化目标文件大小,执行所有的不增加目标文件大小的-O2优化选项.并且执行专门减小目标文件大小的优化选项.
-O3: 打开所有-O2的优化选项并且增加部分参数。
Warnings
这里可以设置GCC的警告参数选项:
-fsyntax-only
检查代码中的语法错误,但除此之外不要做任何事情。
-fmax-errors= n
将错误消息的最大数量限制为n ,此时GCC会缓存,而不是尝试继续处理源代码。 如果n为0(默认值),则生成的错误消息数量不受限制。 如果还指定了-Wfatal-errors ,则重大错误优先于此选项。
-w
禁止所有警告消息。
-Werror
使所有的警告进入错误
-pedantic
允许发出ANSI/ISO C标准所列出的所有警告
-pedantic-errors
允许发出ANSI/ISO C标准所列出的错误
-Wfatal-errors
遇到第一个错误就停止,减少查找错误时间
Debugging
红框中的-g设置GDB调试信息,注意生成静态库时将红框中调为None,否则生成的库会包含调试信息,导致库文件过大。
添加汇编文件和头文件
红框中的位置分别为添加汇编文件和头文件的接口,点击右侧方框上绿色的加号去添加文件路径。
添加链接脚本文件
同理,选中红框表项,点击右上角绿色加号,添加自定义的LD链接脚本文件。
添加库文件
-L添加库文件的路径,-l添加库名,注意库名要去掉前缀和后缀,例如libtest.a,只需要填写test。
添加自定义链接文件
Other objects栏可以添加想要参与链接的.o或者.lib文件。
设置输出文件类型
右侧红框中可点击下拉框选择编译输出HEX或BIN文件。