[单片机芯片] MounRiver怎样查看占用多少ROM和RAM

[复制链接]
2223|6
 楼主| wgtwgtwgt 发表于 2022-3-17 18:40 | 显示全部楼层 |阅读模式
例如用MounRiver编译CH32V103C8T6工程后,出现如下信息:
3901362330f8e62fd3.png
请问有办法查看或计算编译后的工程能占用单片机多少ROM和RAM吗?
CH32V103C8T6是64K FLASH,20K RAM的。
WCHTech37 发表于 2022-3-17 19:27 | 显示全部楼层
您好,MRS开启ROM、RAM占比功能方法如下图所示:
打开工程属性配置页,在C/C++ Build->Settings->Tool Settings选项列表中单击GNU RISC-V Cross C Linker->Miscellaneous,然后在右侧Linker flags窗口添加命令行:“—print-memory-usage”,最后点击Apply and Close保存修改。

更多MRS功能、开发技巧及开发实例详见: https://blog.csdn.net/qq_36353650?spm=1000.2123.3001.5343

20220317192340.png
 楼主| wgtwgtwgt 发表于 2022-3-17 21:37 | 显示全部楼层
本帖最后由 wgtwgtwgt 于 2022-3-17 21:43 编辑
WCHTech37 发表于 2022-3-17 19:27
您好,MRS开启ROM、RAM占比功能方法如下图所示:
打开工程属性配置页,在C/C++ Build->Settings->Tool Sett ...

谢谢,能打印出ROM和RAM的使用率,只是RAM直接显示使用100%了,翻看您所给的链接,看到专门有一个帖子用于解决RAM占用100%的问题。只是该帖子所给的方法:
20526233385b09ef8.png
对于MRS v1.70版本会导致错误:
73636233388aee770.png

我来回改了几次,发现替换成下图所示时,错误就消失了:
117356233390689778.png
988856233395a91ad1.png
还有这个:
633662333a2929e19.png
也能解决之前的错误。

似乎只要". = . + __stack_size;"存在就有问题,去掉这句话后就没问题了,也不知道能不能解决帖子最后所提到的”该写法在RAM区使用量超出实际堆栈大小时不会有提示,大家在使用时需要自行检查,以防出现未知错误“。


ufbycd 发表于 2022-3-19 19:56 | 显示全部楼层
本帖最后由 ufbycd 于 2022-3-19 19:59 编辑

为什么要搞得这么复杂?编译后不是已经用GCC工具链的size命令(arm-none-eabi-size)打印出来了吗?!
ROM = text + data
RAM = bss + data

看一眼那个输出就一眼了然了吧。

 楼主| wgtwgtwgt 发表于 2022-3-19 21:05 | 显示全部楼层
本帖最后由 wgtwgtwgt 于 2022-3-19 21:52 编辑
ufbycd 发表于 2022-3-19 19:56
为什么要搞得这么复杂?编译后不是已经用GCC工具链的size命令(arm-none-eabi-size)打印出来了吗?!
ROM  ...

谢谢回复
MRS有个问题,对于用它创建的CH32V103工程,编译后bss数值大了2048:
592916235d3d164e81.png
上图实际的RAM应是24+(2056-2048)=24+8=32B
bss数值多出的2048,与Link.ld文件这里有关:
896556235d4df5980a.png
若将Link.ld最后的一句话注释掉,bss就不会多2048了:
92516235db8a9951e.png
也可能是我理解错误,请问编译后工程的RAM占用量需要加上_stack_size的数值吗?@ufbycd
也不知道MRS的开发团队注意到这个问题没有 @WCHTech37  



ufbycd 发表于 2022-3-21 11:01 | 显示全部楼层
本帖最后由 ufbycd 于 2022-3-21 11:08 编辑
wgtwgtwgt 发表于 2022-3-19 21:05
谢谢回复
MRS有个问题,对于用它创建的CH32V103工程,编译后bss数值大了2048:

那个__stack_size 并不是一个问题,那是预留给动态申请内存(malloc)用的堆空间,当然如果你不用malloc自然可以把它去掉。也不建议在裸机系统用malloc
 楼主| wgtwgtwgt 发表于 2022-3-21 12:44 | 显示全部楼层
ufbycd 发表于 2022-3-21 11:01
那个__stack_size 并不是一个问题,那是预留给动态申请内存(malloc)用的堆空间,当然如果你不用malloc自 ...

谢谢。
如果是裸机的话,MRS自动生成的工程,什么也不想改,编译后,RAM占比是否应该加上__stack_size的数值?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

45

主题

191

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部