发新帖我要提问
12
返回列表
打印
[单片机芯片]

请问CH32V103打开-flto选项后如何避免_write函数被优化掉?

[复制链接]
楼主: imdx
手机看帖
扫描二维码
随时随地手机跟帖
21
本帖最后由 发呆二极管 于 2021-12-22 10:38 编辑
imdx 发表于 2021-12-22 10:33
目前的risc-v,至少要多准备50%的FLASH,2倍最佳。当然只要价格合适,一切都不是问题。比如同规格ARM卖10 ...

哈哈,没错。我现在也是和你一样,选型的时候risc-v的flash自先阉割掉一半,我就当v103是个32k的f103去用

使用特权

评论回复
22
xdqfc| | 2021-12-22 11:48 | 只看该作者
imdx 发表于 2021-12-22 10:33
目前的risc-v,至少要多准备50%的FLASH,2倍最佳。当然只要价格合适,一切都不是问题。比如同规格ARM卖10 ...

2遍就夸张了点,50%差不多吧,正常情况下多不了50%的,另外就是价格,这个才是硬伤,基本比M3的贵,没有看到便宜的。

使用特权

评论回复
23
xdqfc| | 2021-12-22 16:25 | 只看该作者
淘宝上CH573  CH571价格比较喜人。

使用特权

评论回复
24
imdx|  楼主 | 2021-12-22 17:20 | 只看该作者
xdqfc 发表于 2021-12-22 16:25
淘宝上CH573  CH571价格比较喜人。

原厂比tb价格便宜

使用特权

评论回复
25
xdqfc| | 2021-12-23 10:27 | 只看该作者
发呆二极管 发表于 2021-12-22 10:21
感谢楼主分享心得,学习了~周末我也再试试~

我就是因为risc-v现在的gcc编译器编译效果太拉胯了所以才没继 ...

代码相差3倍,有这么夸张吗,咱之前测试过增量代码,比MDK多15%左右,3倍是不是夸张了点。

使用特权

评论回复
26
发呆二极管| | 2021-12-23 19:38 | 只看该作者
xdqfc 发表于 2021-12-23 10:27
代码相差3倍,有这么夸张吗,咱之前测试过增量代码,比MDK多15%左右,3倍是不是夸张了点。
...

反正我自己测是这样的,代码就是coremark,选-o3优化是34580 bytes,选-os优化是30644 bytes。
同样的coremark代码在gd32f103上,用ac5选-o3是10752 bytes,用ac6选-o3是18568 bytes,ac6选-os和LTO优化是10560 bytes。
当时还没看到这个帖子,也不懂其他优化,反正结果就是这样。
所以我才说都选-o3时risc-v gcc编译出来的大小是ac5的3倍(34580和10752)。ac6的-o3的体积优化并不是很明显,riscv gcc大概只有ac6编译结果的2倍(34580和18568)。
但是如果选-os和lto,那risc-v gcc和ac6比又是3倍了(30644和10560)
等过两天放假了我也回去按照帖子里说的优化选项再试试。

使用特权

评论回复
27
发呆二极管| | 2021-12-24 19:30 | 只看该作者
重新编译了一下,按照-os -flto,打开rvc等,coremark现在大小减小到29388 bytes了……优化力度有限。
搜了搜packed关键字,除了usb库有用到外,其他地方均无用到,也优化不了……gg

使用特权

评论回复
28
zyw123456789| | 2021-12-25 09:50 | 只看该作者
本帖最后由 zyw123456789 于 2021-12-25 09:56 编辑

变大的主要原因是newlib的浮点打印函数大概要增加16k左右,可以做个这样的实验:创建一个空的工程,看一下编译后大小,启用 use float  with nano printf 选项后,看一下编译后大小。在MRS中启用 use wchprintffloat 选项后,代码会减小不少。

使用特权

评论回复
29
littlelida| | 2022-1-5 13:18 | 只看该作者
为什么需要这么多的flash

使用特权

评论回复
30
pattywu| | 2022-2-13 19:00 | 只看该作者
应该没那么夸张。
我有个OS,简单测试,总共3个线程,有用的线程是1秒开关一次LED,CH32V103上,打开-Os,不打开:
-msave-restore
-flto
编译结果:3688字节
如果打开上述选项,
编译结果:2744字节

在CH32F103上,跟上述设置差不多,编译的结果分别为:3376字节和2436字节。差别不算明显。
要说明的是,CH32V103的系统定时器设计的不好,影响效果,改用TIM4当系统定时,初始化TIM4的代码比Cortex-M3的系统定时要多不少,
还有,CH32V103的中断向量也比CH32F103的大,总体算下来,差的不多。

使用特权

评论回复
31
foxsbig| | 2022-2-15 14:31 | 只看该作者
__attribute__((used))
是什么意思

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则