nikola 发表于 2023-7-5 10:59:09

keil显示内存和存储占用百分比进度条工具(Keil5_disp_size_bar)

本帖最后由 nikola 于 2023-7-7 09:48 编辑

Keil5_disp_size_bar v0.3
开源一个实用的工具,收集了网友的各种意见,现更新到0.3版本。




以进度条百分比来显示keil编译后代码对芯片的内存ram和存储flash的占用情况。


原理是使用C语言遍历目录找到keil工程生成出的.map文件,然后找到对应的ram和flash的总大和占用大小,
然后以进度条和百分比的直观格式输出来,以便嵌入式软件工程师方便调试,知道芯片占用情况,进行裁剪和优化。
基本能找到编译后生成的map文件就能输出生成的代码对ram和flash的占用大小百分比进度条,keil5环境下通用。


. 更新到v0.3
- 修改进度条部分字符对齐问题,方块字符选择了正方形等宽
- 根据网友的反馈由于关键词(Exec关键词有部分map文件不存在,关键词改成Execution Region检索执行段
- 加大ram和flash的占用信息存储数组的上限为30,有的map的flash分开的段比较多,或者自定义了.bss的内存池
- 根据网友反馈使用了自定义malloc的内存池的ram被归类为了flash,除了带RAM外添加带ER$$的也视为RAM
- 百分比修改以KB单位的显示占用分子分母
- 最后以B为单位显示剩余可用空间
- %d显示改为%u显示无符号整数



. 更新到V0.2
- 更改进度条样式
- 采用关键词(Exec模糊检索ram和flash的size和max
- 支持多个ram和flash的占用百分比进度条显示




使用方法:
1.把程序Keil5_disp_size_bar.exe放到工程目录下,要放在在.map文件更上一层的目录,例如可以放在和工程文件同一目录下。


2.在工程添加编译后执行程序Keil5_disp_size_bar.exe,打钩,选择则要执行的程序Keil5_disp_size_bar.exe


3.接着每次按下编译就能看到生成的代码对ram和flash的占用大小百分比进度条


4.如果执行了Keil5_disp_size_bar.exe,却没有输出占用百分比进度条,请检测输出的错误消息
最大可能是当前工程或者你放置程序的目录下递归查找也找不到map文件,
请检测工程的Output输出生成配置,然后按下全部重新编译一次再看看能不能输出占用百分比进度条。



上传文件:



gitee开源地址包含C语言源码:https://gitee.com/nikolan/keil5_disp_size_bar.git



JIAYU 发表于 2023-7-5 11:52:34

点了没反应

eric2013 发表于 2023-7-5 12:05:22

谢谢楼主分享,很棒{:8:}

www2205290064 发表于 2023-7-5 12:32:06

给力

wdliming 发表于 2023-7-5 14:31:13

很不错,谢谢分享

wdliming 发表于 2023-7-5 14:48:27

但是有个地方要是可以显示就好了,    Total ROM Size (Code + RO Data + RW Data)   120348 ( 117.53kB)
这个信息没有显示。

大盖伦 发表于 2023-7-5 14:49:22

测试了一下 STM32F103和STM32H743的工程不行,STM32F7工程可以

zm2622 发表于 2023-7-5 15:26:40

真不错呢,给楼主点赞!

nikola 发表于 2023-7-5 16:57:05

wdliming 发表于 2023-7-5 14:48
但是有个地方要是可以显示就好了,    Total ROM Size (Code + RO Data + RW Data)   120348 ( 117.53kB) ...

这个稍微改一下就能实现,在map文件找子串找到后输出就行。

nikola 发表于 2023-7-5 17:04:45

大盖伦 发表于 2023-7-5 14:49
测试了一下 STM32F103和STM32H743的工程不行,STM32F7工程可以

谢谢测试,我没有在很多工程里测试过。不过map文件输出的这个信息不同,应该是和keil里的配置有关,例如有些工程是内部flash做IAP,应用程序放外部flash之类比较复杂的配置下,要查起来确实不能只按这个来查,或许应该用更模糊和通用的方式例如获取到关键字(Exec,就输出进度条。名称往回找判断是不是带RAM,是就是ram其他看做flash,接着Size和Max做进度条显示。这样也许能解决问题,我有空实现一个版本再来更新。

yunqi 发表于 2023-7-5 17:05:02

会了++

emwin 发表于 2023-7-5 17:20:37

挺直观的,可以考虑用这个样式: [|||||||||||_________]

emwin 发表于 2023-7-5 17:22:51

或者,这种是什么字符实现的?
https://cdn.linuxfordevices.com/wp-content/uploads/2022/06/tqdm-1.gif

nikola 发表于 2023-7-5 17:39:37

emwin 发表于 2023-7-5 17:22
或者,这种是什么字符实现的?

如果想实现这个样式的效果也是很简单的,修改源码输出的内容换为完整方块,重新用gcc编译一下就好了。

www2205290064 发表于 2023-7-5 17:40:03

感谢楼主分享,很棒的工具,已用上


hthometown 发表于 2023-7-5 19:17:44

可以可以 :victory:

nikola 发表于 2023-7-6 09:00:39

大盖伦 发表于 2023-7-5 14:49
测试了一下 STM32F103和STM32H743的工程不行,STM32F7工程可以

V0.2版本已按我说的关键词检索法更新,估计适配工程更多了,兄弟有空可以测一下。

TRX 发表于 2023-7-6 10:28:39

本帖最后由 TRX 于 2023-7-6 10:34 编辑

多块内部ram的检测好像没有,stm32f407 192k sram   检测出来只有128k 虽然没--->好的,已经实现了

随风不留痕 发表于 2023-7-6 10:50:21

我这里显示没对齐

nikola 发表于 2023-7-6 11:08:20

TRX 发表于 2023-7-6 10:28
多块内部ram的检测好像没有,stm32f407 192k sram   检测出来只有128k 虽然没--->好的,已经实现了

这个得看map文件有没有,有才能拿到数据,map文件是根据keil的魔法棒配置的Target下的ROM和RAM配置来生成,修改这些,新创建工程已经填了默认的,如果要显示默认没有的配置,得添加ram地址和大小,然后clear target后重新全部编译会有添加的配置部分。

nikola 发表于 2023-7-6 11:10:42

随风不留痕 发表于 2023-7-6 10:50
我这里显示没对齐

这个估计是keil的终端的字体问题,我在vscode的输出的也是能对齐的,在keil上好像字符黑方块要比下划线宽一些导致占用越高,方块多,下划线少,条就越长。

tovinz 发表于 2023-7-6 11:30:14

fromelf.exe -z xxx.axf > info.txt
可以直接把map文件的最后一部份的总结信息导到info.txt文件文件里,可以不用查整个map文件

nikola 发表于 2023-7-6 11:32:39

随风不留痕 发表于 2023-7-6 10:50
我这里显示没对齐

可以修改keil在Build Ouput的字体为这个Cascadia Code 这个能够字符等宽显示,或者自己试试其他字体这里显示的应该都是C盘的Fonts有的字体。

TRX 发表于 2023-7-6 11:50:51

请问这个编译命令是怎样的?

随风不留痕 发表于 2023-7-6 13:11:07

换了下特殊符号,这样好多了:lol

大盖伦 发表于 2023-7-6 13:28:41

nikola 发表于 2023-7-6 09:00
V0.2版本已按我说的关键词检索法更新,估计适配工程更多了,兄弟有空可以测一下。

测试了一下 好像有部分错误

nikola 发表于 2023-7-6 14:32:06

TRX 发表于 2023-7-6 11:50
请问这个编译命令是怎样的?

就是这么编译的,我没有报错,你编译环境可能缺少mingw的库没有定义DIR结构体,可以换个编译器或IDE试试。

emwin 发表于 2023-7-6 15:07:55

IAR可以纳入考虑了。:handshake

TRX 发表于 2023-7-6 15:17:17

nikola 发表于 2023-7-6 14:32
就是这么编译的,我没有报错,你编译环境可能缺少mingw的库没有定义DIR结构体,可以换个编译器或IDE试试 ...

编译器选错了,用这个64的就没问题了,感谢:handshake

nikola 发表于 2023-7-6 15:51:47

大盖伦 发表于 2023-7-6 13:28
测试了一下 好像有部分错误

好像你工程的map文件比较复杂,但是F1这还出现负数了,好像数值不太正常,方便发些map文件我测一下吗,如果map的函数信息不方便透露,就截取map里带关键词(Exec的行就行。

nikola 发表于 2023-7-6 16:11:06

随风不留痕 发表于 2023-7-6 13:11
换了下特殊符号,这样好多了

嗯我发现选方块字符好像可以等宽,然后ram和flash之间换个行,百分比放前面,占大小分子分母放后面,这样前看着比较整齐,我再看看有没有什么可以优化的或者其他bug到时候再更一个v0.3版本。

大盖伦 发表于 2023-7-6 16:32:51

nikola 发表于 2023-7-6 15:51
好像你工程的map文件比较复杂,但是F1这还出现负数了,好像数值不太正常,方便发些map文件我测一下吗,如 ...

这个可以吗

fang316 发表于 2023-7-6 16:46:34

2点建议
1、提示信息 只有错误的时候 才提示,一切安好就不提示了
2、一般的等宽字体没有方块这类特殊字符,所以会不对齐,我改成X了






随风不留痕 发表于 2023-7-6 16:52:21

nikola 发表于 2023-7-6 16:11
嗯我发现选方块字符好像可以等宽,然后ram和flash之间换个行,百分比放前面,占大小分子分母放后面,这样 ...

不错,越来越完善了!{:8:}

nikola 发表于 2023-7-6 17:10:24

有网友在gitee反馈其他芯片下生成的map没输出占用百分比信息,发现有的map(Exec关键词有部分map文件不存在,关键词改成Execution Region检索执行段 以适配更多芯片和工程。再看看有没有其他bug,之后再更新一版0.3。

nikola 发表于 2023-7-6 17:14:12

大盖伦 发表于 2023-7-6 16:32
这个可以吗

方便发F1的map给我吗,我看看为什么会有负数,不带关键词Execution Region的行可以删掉,邮箱2503865771@qq.com。

nikola 发表于 2023-7-6 17:32:40

fang316 发表于 2023-7-6 16:46
2点建议
1、提示信息 只有错误的时候 才提示,一切安好就不提示了
2、一般的等宽字体没有方块这类特殊字 ...

“只有错误的时候 才提示“,应该不是,比如你定义一个全局数组变量并且初始化,按编译后就可以看到ram的占用是在变化的。但是如果你不初始化数组,编译器也没看到其他地方使用这个数组,这个就变成了声明被优化后就省略了看不到内存变化。还有如果是编译发生错误,keil好像不会调用After build的程序了,方块特殊字符确实在不同字体下不一样换其他字符也可以能显示就行。

wdliming 发表于 2023-7-6 18:37:10

没想到这么火爆了。

wdliming 发表于 2023-7-6 18:37:29

emwin 发表于 2023-7-6 15:07
IAR可以纳入考虑了。

我也是这么想的,iar也最好弄一个

大盖伦 发表于 2023-7-6 19:29:57

nikola 发表于 2023-7-6 17:14
方便发F1的map给我吗,我看看为什么会有负数,不带关键词Execution Region的行可以删掉,邮箱。

你好 加你QQ了 方便的话可以通过以下
页: [1] 2 3
查看完整版本: keil显示内存和存储占用百分比进度条工具(Keil5_disp_size_bar)