硬汉嵌入式论坛

 找回密码
 立即注册
查看: 6931|回复: 90
收起左侧

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

  [复制链接]

3

主题

46

回帖

55

积分

初级会员

一个极客ageek

积分
55
发表于 2023-7-5 10:59:09 | 显示全部楼层 |阅读模式
本帖最后由 nikola 于 2023-7-7 09:48 编辑

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

v3.png

[Keil5_disp_size_bar v0.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的占用百分比进度条显示



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

2.在工程添加编译后执行程序Keil5_disp_size_bar.exe,打钩,选择则要执行的程序Keil5_disp_size_bar.exe
下载 (8).png

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


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


上传文件:

Keil5_disp_size_bar_v0.3.exe (50.76 KB, 下载次数: 439)

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



下载 (6).png
after_build.png

Keil5_disp_size_bar_v0.2.exe

50.09 KB, 下载次数: 86

评分

参与人数 13金币 +316 收起 理由
HOD + 20 赞一个!
二极管的命令 + 10 赞一个!
冬日可爱 + 20 赞一个!
凤亦 + 20 很给力!
8238782209 + 20 很给力!
DarkPoint + 20
小车快跑 + 20 赞一个!
spincat + 20 赞一个!
青芒亭 + 6 赞一个!
江南月 + 20 赞一个!
wfagly + 20 很给力!
TRX + 20 很给力!
eric2013 + 100 很给力!

查看全部评分

回复

使用道具 举报

1

主题

66

回帖

69

积分

初级会员

积分
69
发表于 2023-7-5 11:52:34 | 显示全部楼层
点了没反应
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106913
QQ
发表于 2023-7-5 12:05:22 | 显示全部楼层
谢谢楼主分享,很棒
回复

使用道具 举报

1

主题

132

回帖

135

积分

初级会员

积分
135
发表于 2023-7-5 12:32:06 | 显示全部楼层
给力
回复

使用道具 举报

73

主题

1196

回帖

1415

积分

至尊会员

积分
1415
发表于 2023-7-5 14:31:13 | 显示全部楼层
很不错,谢谢分享
回复

使用道具 举报

73

主题

1196

回帖

1415

积分

至尊会员

积分
1415
发表于 2023-7-5 14:48:27 | 显示全部楼层
但是有个地方要是可以显示就好了,    Total ROM Size (Code + RO Data + RW Data)     120348 ( 117.53kB)
这个信息没有显示。
回复

使用道具 举报

1

主题

17

回帖

20

积分

新手上路

积分
20
发表于 2023-7-5 14:49:22 | 显示全部楼层
测试了一下 STM32F103和STM32H743的工程不行,STM32F7工程可以
F1.jpg
h7.jpg
F7.jpg
C.png
回复

使用道具 举报

0

主题

25

回帖

25

积分

新手上路

积分
25
发表于 2023-7-5 15:26:40 | 显示全部楼层
真不错呢,给楼主点赞!
回复

使用道具 举报

3

主题

46

回帖

55

积分

初级会员

一个极客ageek

积分
55
 楼主| 发表于 2023-7-5 16:57:05 | 显示全部楼层
wdliming 发表于 2023-7-5 14:48
但是有个地方要是可以显示就好了,    Total ROM Size (Code + RO Data + RW Data)     120348 ( 117.53kB) ...

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

使用道具 举报

3

主题

46

回帖

55

积分

初级会员

一个极客ageek

积分
55
 楼主| 发表于 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做进度条显示。这样也许能解决问题,我有空实现一个版本再来更新。 find_Exec.jpg
回复

使用道具 举报

8

主题

157

回帖

181

积分

初级会员

积分
181
发表于 2023-7-5 17:05:02 | 显示全部楼层
会了++
回复

使用道具 举报

210

主题

1044

回帖

1684

积分

至尊会员

More we do, more we can do.

积分
1684
发表于 2023-7-5 17:20:37 | 显示全部楼层
挺直观的,可以考虑用这个样式: [|||||||||||_________]
回复

使用道具 举报

210

主题

1044

回帖

1684

积分

至尊会员

More we do, more we can do.

积分
1684
发表于 2023-7-5 17:22:51 | 显示全部楼层
或者,这种是什么字符实现的?

回复

使用道具 举报

3

主题

46

回帖

55

积分

初级会员

一个极客ageek

积分
55
 楼主| 发表于 2023-7-5 17:39:37 | 显示全部楼层
emwin 发表于 2023-7-5 17:22
或者,这种是什么字符实现的?

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

使用道具 举报

1

主题

132

回帖

135

积分

初级会员

积分
135
发表于 2023-7-5 17:40:03 | 显示全部楼层
感谢楼主分享,很棒的工具,已用上


Snipaste_2023-07-05_17-36-05.png
回复

使用道具 举报

0

主题

5

回帖

5

积分

新手上路

积分
5
发表于 2023-7-5 19:17:44 | 显示全部楼层
可以可以
回复

使用道具 举报

3

主题

46

回帖

55

积分

初级会员

一个极客ageek

积分
55
 楼主| 发表于 2023-7-6 09:00:39 | 显示全部楼层
大盖伦 发表于 2023-7-5 14:49
测试了一下 STM32F103和STM32H743的工程不行,STM32F7工程可以

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

使用道具 举报

8

主题

43

回帖

67

积分

初级会员

积分
67
发表于 2023-7-6 10:28:39 | 显示全部楼层
本帖最后由 TRX 于 2023-7-6 10:34 编辑

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

使用道具 举报

1

主题

12

回帖

15

积分

新手上路

积分
15
发表于 2023-7-6 10:50:21 | 显示全部楼层
我这里显示没对齐
QQ截图20230706104934.png
回复

使用道具 举报

3

主题

46

回帖

55

积分

初级会员

一个极客ageek

积分
55
 楼主| 发表于 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后重新全部编译会有添加的配置部分。
回复

使用道具 举报

3

主题

46

回帖

55

积分

初级会员

一个极客ageek

积分
55
 楼主| 发表于 2023-7-6 11:10:42 | 显示全部楼层

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

使用道具 举报

19

主题

234

回帖

291

积分

高级会员

积分
291
发表于 2023-7-6 11:30:14 | 显示全部楼层
fromelf.exe -z xxx.axf > info.txt
可以直接把map文件的最后一部份的总结信息导到info.txt文件文件里,可以不用查整个map文件
回复

使用道具 举报

3

主题

46

回帖

55

积分

初级会员

一个极客ageek

积分
55
 楼主| 发表于 2023-7-6 11:32:39 | 显示全部楼层

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

使用道具 举报

8

主题

43

回帖

67

积分

初级会员

积分
67
发表于 2023-7-6 11:50:51 | 显示全部楼层
请问这个编译命令是怎样的?
Snipaste_2023-07-06_11-49-41.bmp
回复

使用道具 举报

1

主题

12

回帖

15

积分

新手上路

积分
15
发表于 2023-7-6 13:11:07 | 显示全部楼层
换了下特殊符号,这样好多了
QQ截图20230706130945.png

Keil5_disp_size_bar.exe

118.4 KB, 下载次数: 12

回复

使用道具 举报

1

主题

17

回帖

20

积分

新手上路

积分
20
发表于 2023-7-6 13:28:41 | 显示全部楼层
nikola 发表于 2023-7-6 09:00
V0.2版本已按我说的关键词检索法更新,估计适配工程更多了,兄弟有空可以测一下。

测试了一下 好像有部分错误
F1.jpg
F7.jpg
F746.jpg
H7.jpg
H743.jpg
回复

使用道具 举报

3

主题

46

回帖

55

积分

初级会员

一个极客ageek

积分
55
 楼主| 发表于 2023-7-6 14:32:06 | 显示全部楼层
TRX 发表于 2023-7-6 11:50
请问这个编译命令是怎样的?

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

使用道具 举报

210

主题

1044

回帖

1684

积分

至尊会员

More we do, more we can do.

积分
1684
发表于 2023-7-6 15:07:55 | 显示全部楼层
IAR可以纳入考虑了。
回复

使用道具 举报

8

主题

43

回帖

67

积分

初级会员

积分
67
发表于 2023-7-6 15:17:17 | 显示全部楼层
nikola 发表于 2023-7-6 14:32
就是这么编译的,我没有报错,你编译环境可能缺少mingw的库没有定义DIR结构体,可以换个编译器或IDE试试 ...

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

使用道具 举报

3

主题

46

回帖

55

积分

初级会员

一个极客ageek

积分
55
 楼主| 发表于 2023-7-6 15:51:47 | 显示全部楼层
大盖伦 发表于 2023-7-6 13:28
测试了一下 好像有部分错误

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

使用道具 举报

3

主题

46

回帖

55

积分

初级会员

一个极客ageek

积分
55
 楼主| 发表于 2023-7-6 16:11:06 | 显示全部楼层
随风不留痕 发表于 2023-7-6 13:11
换了下特殊符号,这样好多了

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

使用道具 举报

1

主题

17

回帖

20

积分

新手上路

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

这个可以吗
1.png
回复

使用道具 举报

0

主题

18

回帖

18

积分

新手上路

积分
18
发表于 2023-7-6 16:46:34 | 显示全部楼层
2点建议
1、提示信息 只有错误的时候 才提示,一切安好就不提示了
2、一般的等宽字体没有方块这类特殊字符,所以会不对齐,我改成X了

微信截图_20230706164415.png




回复

使用道具 举报

1

主题

12

回帖

15

积分

新手上路

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

不错,越来越完善了!
回复

使用道具 举报

3

主题

46

回帖

55

积分

初级会员

一个极客ageek

积分
55
 楼主| 发表于 2023-7-6 17:10:24 | 显示全部楼层
有网友在gitee反馈其他芯片下生成的map没输出占用百分比信息,发现有的map(Exec关键词有部分map文件不存在,关键词改成Execution Region检索执行段 以适配更多芯片和工程。再看看有没有其他bug,之后再更新一版0.3。 A5_MAP.png
回复

使用道具 举报

3

主题

46

回帖

55

积分

初级会员

一个极客ageek

积分
55
 楼主| 发表于 2023-7-6 17:14:12 | 显示全部楼层

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

使用道具 举报

3

主题

46

回帖

55

积分

初级会员

一个极客ageek

积分
55
 楼主| 发表于 2023-7-6 17:32:40 | 显示全部楼层
fang316 发表于 2023-7-6 16:46
2点建议
1、提示信息 只有错误的时候 才提示,一切安好就不提示了
2、一般的等宽字体没有方块这类特殊字 ...

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

使用道具 举报

73

主题

1196

回帖

1415

积分

至尊会员

积分
1415
发表于 2023-7-6 18:37:10 | 显示全部楼层
没想到这么火爆了。
回复

使用道具 举报

73

主题

1196

回帖

1415

积分

至尊会员

积分
1415
发表于 2023-7-6 18:37:29 | 显示全部楼层
emwin 发表于 2023-7-6 15:07
IAR可以纳入考虑了。

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

使用道具 举报

1

主题

17

回帖

20

积分

新手上路

积分
20
发表于 2023-7-6 19:29:57 | 显示全部楼层
nikola 发表于 2023-7-6 17:14
方便发F1的map给我吗,我看看为什么会有负数,不带关键词Execution Region的行可以删掉,邮箱。

你好 加你QQ了 方便的话可以通过以下
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-9 20:05 , Processed in 0.348281 second(s), 34 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表