RISC-V MCU开发 (四):编译配置

简介: 在嵌入式开发中,当我们完成了工程创建、代码编辑等操作之后,就可以开始进行工程编译。 对于使用内置工程模板创建或外部导入的项目,MounRiver® Studio(MRS)会根据对应芯片内核自动配置好目标工具链(riscv-none-embed-gcc或arm-none-eabi-gcc),同时,目标平台、优化等级、调试等级以及文件引用等编译配置也会自动设置完毕。

在嵌入式开发中,当我们完成了工程创建、代码编辑等操作之后,就可以开始进行工程编译。 对于使用内置工程模板创建或外部导入的项目,MounRiver® Studio(MRS)会根据对应芯片内核自动配置好目标工具链(riscv-none-embed-gcc或arm-none-eabi-gcc),同时,目标平台、优化等级、调试等级以及文件引用等编译配置也会自动设置完毕。

MRS最新V1.51版本安装包获取方式:www.mounriver.com 。

【工程属性页】在资源管理器窗口选中要编译的工程,点击工具栏上的工程属性配置按钮,或者点击右键菜单中的”Properties”进入编译选项属性页面。
1.png

【目标处理器】用于指定目标指令架构、扩展函数等参数。

1.Architecture是指令集架构,rv32i是RISC-V 基础整数指令集
2.RVM表示支持乘除法扩展,RVA表示支持原子扩展,RVF表示单精度浮点数扩展,RVD为双精度浮点数扩展,RVC为压缩指令扩展。
3.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 都兼容。
4.Tuning 由微架构优化给定处理器的输出,默认是rocket。
5.Code model主要有两种模式:
-mcmodel=medlow:程序及其静态定义的符号必须位于单个2 GiB地址范围内,并且必须位于绝对地址-2 GiB和+2 GiB之间。程序可以静态或动态链接。这是默认的代码模型。
-mcmodel=medany:程序及其静态定义的符号可以任何单个2 GiB地址范围内。程序可以静态或动态地连接。
6.Align 中-mstrict-align -mno-strict-align 取决于处理器是否支持内存的非对齐访问。
7.Small data limit 在某些目标上将小于n字节的全局和静态变量放进一个特殊的段。

【优化等级】主要是配置GCC的优化选项,想要添加其他优化选项可以写在下方other optimization flags中。
2.png

1.-O0:无优化(默认)
2.-O、-O1:使用能减少目标文件大小以及执行时间并且不会使编译时间明显增加的优化.在编译大型程序的时候会显著增加编译时内存的使用.
3.-O2: 包含-O1的优化并增加了不需要在目标文件大小和执行速度上进行折衷的优化.编译器不执行循环展开以及函数内联.此选项将增加编译时间和目标文件的执行性能.
4.-Os:专门优化目标文件大小,执行所有的不增加目标文件大小的-O2优化选项.并且执行专门减小目标文件大小的优化选项.
5.-O3: 打开所有-O2的优化选项并且增加部分参数。

【警告等级】用于设置GCC的警告参数选项。
3.png

1.-fsyntax-only:检查代码中的语法错误,但除此之外不要做任何事情。
2.-fmax-errors= n:将错误消息的最大数量限制为n ,此时GCC会缓存,而不是尝试继续处理源代码。 如果n为0(默认值),则生成的错误消息数量不受限制。 如果还指定了-Wfatal-errors ,则重大错误优先于此选项。
3.-w:禁止所有警告消息。
4.-Werror:使所有的警告进入错误
5.-pedantic:允许发出ANSI/ISO C标准所列出的所有警告
6.-pedantic-errors:允许发出ANSI/ISO C标准所列出的错误
7.-Wfatal-errors:遇到第一个错误就停止,减少查找错误时间

【调试等级】红框中的-g设置GDB调试信息,注意生成静态库时将红框中调为None,否则生成的库会包含调试信息,导致库文件过大。
4.png

【汇编、头文件添加】红框中的位置分别为添加汇编、头文件接口,点击右侧方框上绿色的加号去添加文件路径。
5.png

【链接脚本文件添加】红框中的位置分别为添加链接脚本文件接口,点击右侧方框上绿色的加号去添加文件路径。
6.png

【库文件添加】
-L添加库文件的路径,-l添加库名,注意库名要去掉前缀和后缀,例如libtest.a,只需要填写test。
7.png

【链接其他文件】Other objects 可以添加想要参与链接的.o或者.lib文件。
8.png

【输出文件格式】右侧红框中可点击下拉框选择编译后输出BIN文件或者HEX文件。
9.png

【输出类型】图示位置可选择生成可执行文件或者静态库文件。
10.png

以上就是MRS常用的编译配置,编译之后生成的文件会存在工程目录中obj文件中,其中.list和.map文件可用于对程序分析。

相关文章
|
3月前
|
编解码 监控 API
|
1月前
|
物联网 编译器 测试技术
【嵌入式 交叉编译器】如何在 ARM 架构下选择和使用高版本交叉编译器
【嵌入式 交叉编译器】如何在 ARM 架构下选择和使用高版本交叉编译器
174 7
STM32CubeIDE移植ARM DSP库
STM32CubeIDE移植ARM DSP库
|
数据处理 数据安全/隐私保护 SoC
DSP+ZYNQ硬件说明手册-XQTyer【开源】
XQ6657Z35/45-EVM 高速数据处理评估板(XQTyer 评估板)由广州星嵌电子科技有限公司自主研发,包含一片TI DSP TMS320C6657和一片Xilinx ZYNQ-7000 SoC 处理器XC7Z035-2FFG676I。适用于无人机蜂群、软件无线电系统,基带信号处理,无线仿真平台,高速图像采集、处理等领域。
DSP+ZYNQ硬件说明手册-XQTyer【开源】
|
机器人 Linux C语言
openwrt开发使用-选择芯片编译烧录
openwrt开发使用-选择芯片编译烧录
462 1
openwrt开发使用-选择芯片编译烧录
|
NoSQL Ubuntu 编译器
嵌入式linux/鸿蒙开发板(IMX6ULL)开发(十)gcc编译器的使用(下)
嵌入式linux/鸿蒙开发板(IMX6ULL)开发(十)gcc编译器的使用
150 0
|
编译器 Linux 开发工具
嵌入式linux/鸿蒙开发板(IMX6ULL)开发(十)gcc编译器的使用(上)
嵌入式linux/鸿蒙开发板(IMX6ULL)开发(十)gcc编译器的使用
364 0
嵌入式linux/鸿蒙开发板(IMX6ULL)开发(十)gcc编译器的使用(上)
|
芯片 开发者 异构计算
Wujian SoC 平台_FPGA 编译|学习笔记
快速学习 Wujian SoC 平台_FPGA 编译
313 0
Wujian SoC 平台_FPGA 编译|学习笔记
|
数据可视化 IDE 开发工具
RISC-V MCU开发 (十):文件版本管理
版本控制系统(Version Control System)是多数IDE不可缺少的一部分,其主要作用是记录一个或若干文件内容的变化,例如文件的修改、删除等,使得开发者能够追踪历史版本,可以“还原”至某个历史状态。MounRiver® Studio(MRS)提供便捷的版本控制功能,采用可视化UI设计,简单高效。
RISC-V MCU开发 (十):文件版本管理
RISC-V MCU开发 (七):代码调试
MounRiver® Studio(MRS)配合GD-Link、WCH-Link、JLink等在线调试下载器,可支持GDVFx系列、CH56x、CH57x、CH58x、CH32Fx、CH32Vx等RISC-V/ARM内核MCU工程的代码调试功能。本文主要介绍MRS针对RISC-V内核MCU的代码调试操作。
RISC-V MCU开发 (七):代码调试