完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
在资源管理器窗口选中要编译的工程,点击快捷工具栏上的
按钮,进入编译选项配置页面如下图: 【Target processor】:主要设置目标处理器属性,详细信息可以在GCC文档3.18.38 RISC-V Options查看。 1.Architecture是指令集架构,rv32i是RISC-V 基础整数指令集 2.RVM表示支持乘除法扩展 3.RVA表示支持原子扩展 4.RVF表示单精度浮点数扩展,RVD为双精度浮点数扩展,RVC为压缩指令扩展 5.Integer ABI 为RISC-V应用程序整数二进制接口,Floating point ABI为RISC-V应用程序浮点数二进制接口,RISC-V 编译器支持多个 ABI,具体取决于 F 和 D 扩展是否存在 6.RV32 的 ABI 分别名为 ilp32,ilp32f 和 ilp32d。ilp32 表示 C 语言的整型(int),长整型(long)和指针(pointer) 都是 32 位,可选后缀表示如何传递浮点参数 7.在 ilp32 中,浮点参数在整数寄存器中传递; 在 ilp32f 中,单精度浮点参数在浮点寄存器中传递;在 ilp32d 中,双精度浮点参数也在浮点寄存器中传递。 自然,如果想在浮点寄存中传递浮点参数,需要相应的浮点 ISA 添加 F 或 D 扩展。因此要编译 RV32I 的代码(GCC 选项-march=rv32i),必须使用 ilp32 ABI(GCC选项-mabi=ilp32)。反过来,调用约定并不要求浮点指令一定要使用浮点寄存器,因此 RV32IFD 与 ilp32,ilp32f 和 ilp32d 都兼容。 8.Tuning 由微架构优化给定处理器的输出,默认是rocket。 9.Code model : -mcmodel=medlow:程序及其静态定义的符号必须位于单个2 GiB地址范围内,并且必须位于绝对地址-2 GiB和+2 GiB之间。程序可以静态或动态链接。这是默认的代码模型。 -mcmodel=medany:程序及其静态定义的符号可以任何单个2 GiB地址范围内。程序可以静态或动态地连接。
【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文件。 右侧红框中可点击下拉框选择生成BIN文件或者HEX文件。 图示位置可选择生成可执行文件或者库文件。 以上就是常用的编译选项,编译之后生成的文件会存在工程目录中obj文件中,其中.list和.map文件可用于对程序分析。 |
|
|
|
只有小组成员才能发言,加入小组>>
3130 浏览 9 评论
2827 浏览 16 评论
3337 浏览 1 评论
8708 浏览 16 评论
3930 浏览 18 评论
9549浏览 3评论
886浏览 3评论
457浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
457浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2176浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-8-19 21:37 , Processed in 1.074456 second(s), Total 78, Slave 59 queries .
Powered by 电子发烧友网
© 2015 www.ws-dc.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号