MounRiver Studio 没有调用的代码也编译,生成到HEX文件里了吗?

如题。我把没调用的函数屏蔽了,生成的HEX文件就小了,难道没用的函数也编译到HEX文件里了???

如果是这样的话,能不能设置,只有调用的才编译?

编译设置里把针对尺寸优化开起来。(-Os)。image.png


刚试了,一样的


您好,正常的设置中链接时会删除未调用的段。每个函数都会有自己的section名字,你屏蔽掉的函数是否修改过,具体详细的使用方法请发送邮件到yangy@wch.cn


看代码大小,是看最后生成的HEX文件 还是看编译信息

1700123634988.png


减小代码体积的一些提示:

1)优化里面使用-Os体积优化

2)使能-flto,启用链接时优化,注意GCC8的这个功能有bug,需要使用GCC12

3)GNU?RISC-V?Cross?C?Linker里面选上Remove?unused?sections --Xlinker --gc-sections和Use?newlib-nano --specs=nano.specs和Do not use syscalls --specs=nosys.specs


楼上是大神, CH32V003大约8000行的代码编译后由原来13k 设置后压缩到12k! 

提示: 改变设置后需要Clean才会使用改变后的参数.


使能-flto ... 这个还是不要随便开, 体积是减小了, 但是程序运行异常, 改回来就可以了. 


题外话, 最新版的MRV对GCC12应该是做了优化的, 编译后的体积比GCC8还要小一些, 但是上一个版本正好相反:用GCC12编译后的体积比GCC8大10%. 


只有登录才能回复,可以选择微信账号登录