在嵌入式开发中,当我们完成了工程创建、代码编辑等操作之后,就可以开始进行工程编译。 对于使用内置工程模板创建或外部导入的项目,MounRiver® Studio(MRS)会根据对应芯片内核自动配置好目标工具链(riscv-none-embed-gcc或arm-none-eabi-gcc),同时,目标平台、优化等级、调试等级以及文件引用等编译配置也会自动设置完毕。
MRS最新V1.51版本安装包获取方式:www.mounriver.com 。
【工程属性页】在资源管理器窗口选中要编译的工程,点击工具栏上的工程属性配置按钮,或者点击右键菜单中的”Properties”进入编译选项属性页面。
【目标处理器】用于指定目标指令架构、扩展函数等参数。
- Architecture是指令集架构,rv32i是RISC-V 基础整数指令集
- RVM表示支持乘除法扩展,RVA表示支持原子扩展,RVF表示单精度浮点数扩展,RVD为双精度浮点数扩展,RVC为压缩指令扩展。
- IntegerABI 为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),必须使用 ilp32ABI(GCC选项-mabi=ilp32)。反过来,调用约定并不要求浮点指令一定要使用浮点寄存器,因此RV32IFD与 ilp32,ilp32f和 ilp32d都兼容。
- Tuning 由微架构优化给定处理器的输出,默认是rocket。
- Code model主要有两种模式:-mcmodel=medlow:程序及其静态定义的符号必须位于单个2 GiB地址范围内,并且必须位于绝对地址-2 GiB和+2 GiB之间。程序可以静态或动态链接。这是默认的代码模型。-mcmodel=medany:程序及其静态定义的符号可以任何单个2 GiB地址范围内。程序可以静态或动态地连接。
- Align 中-mstrict-align-mno-strict-align 取决于处理器是否支持内存的非对齐访问。
- Small data limit 在某些目标上将小于n字节的全局和静态变量放进一个特殊的段。
【优化等级】主要是配置GCC的优化选项,想要添加其他优化选项可以写在下方other optimizationflags中。
- -O、-O1:使用能减少目标文件大小以及执行时间并且不会使编译时间明显增加的优化.在编译大型程序的时候会显著增加编译时内存的使用.
- -O2: 包含-O1的优化并增加了不需要在目标文件大小和执行速度上进行折衷的优化.编译器不执行循环展开以及函数内联.此选项将增加编译时间和目标文件的执行性能.
- -Os:专门优化目标文件大小,执行所有的不增加目标文件大小的-O2优化选项.并且执行专门减小目标文件大小的优化选项.
- -O3: 打开所有-O2的优化选项并且增加部分参数。
|