硬汉嵌入式论坛

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

[MDK] [MDK][开源]Keil5_disp_size_bar V1.0

  [复制链接]

3

主题

46

回帖

55

积分

初级会员

一个极客ageek

积分
55
发表于 2023-8-2 10:10:51 | 显示全部楼层 |阅读模式
开源地址:https://gitee.com/nikolan/keil5_disp_size_bar
这是keil5_disp_size_bar的一次重构式的更新。
以前是想到什么写什么全放一个.c实现当脚本写,后来写多了越来越乱了,这导致项目不好维护和扩展。
现在把各个变量按结构体封装,函数接口附上注释,且添加了一个静态库libxlsxwriter来扩展导出xlsx表格并且自动画图功能。
大家可以方便的使用mingw来make项目进行二次开发,除了分析工程外也可以分析自己源码整合一些信息方便调试。

后面如果有空可能会看看能不能把工程文件的htm进行解析分析函数调用关系和的栈最大深度,
不过这个是个树形结构比较复杂,可能比较难以终端或表格展示,可能放Qt上开发要比较简单。

Keil5_disp_size_bar V1.0简介
[Keil5_disp_size_bar]
以进度条百分比来显示keil编译后生成的固件对芯片的内存ram和存储flash的占用情况,
并生成各个源码文件对ram和flash的占比整合排序后的map信息的表格和饼图。
kdsb5.png
kdsb6.png
原理是使用C语言遍历当前目录找到keil工程和编译后生成的map文件
然后读取工程文件和map文件来找到对应关键词内的ram和flash的各类信息
最后把信息整合以进度条字符串直观格式输出,同时把map的数据排序后导出csv和xlsx文件,绘制饼图。
注意:再次编译前先关闭已经使用excel打开的表格,或者先把原来的表格移走,不然excel占用表格文件导致没法输出新表格
注意:再次编译前先关闭已经使用excel打开的表格,或者先把原来的表格移走,不然excel占用表格文件导致没法输出新表格
注意:再次编译前先关闭已经使用excel打开的表格,或者先把原来的表格移走,不然excel占用表格文件导致没法输出新表格
该程序容易和keil的after bulid功能集成,以便嵌入式软件工程师方便知道芯片占用情况,进行裁剪和优化。
这个项目也有一个Qt的版本:https://gitee.com/nikolan/keil_development_assistant
表格和进度条等内容直接在图形化的Qt应用查看
不过这个命令行的版本虽然没法交互,但是更容易集成到项目工程内,不太占空间,且纯C库依赖少,执行更快,各有各的好处。
基本能找到编译后生成的map文件,
就能输出生成的代码对ram和flash的占用大小百分比进度条,和表格数据。
只要能找到工程文件和map文件,keil5环境下通用,对于没有使用分散加载的stm32和各种国产32一般都是可以直接适配的。
程序如果没有输出或输出有错误请查看运行日志 _alog.txt,看程序在哪个步骤断开没有往下执行。
项目内附上一个H7B0工程文件和map文件用于测试。
该项目代码可应用于二次开发,任何数据使用C语言整合信息用链表排序后,以表格方式输出。
例如统计自己源码的某些信息,例如RTOS创建的任务信息或者函数关系等。
使用方法:
  • 把程序Keil5_disp_size_bar.exe放到工程目录下,
    要放在在.map文件更上一层的目录,
    例如可以放在和工程文件.uvoptx同一目录下。

  • 在工程打开魔术棒配置,在User的After Build/Rebuild下
    添加编译后执行程序#Run1或#Run2,
    在前面打钩,后面则选择要执行的程序Keil5_disp_size_bar.exe对应路径
    注意要选对是当前工程目录下的Keil5_disp_size_bar.exe
    最好还是使用相对路径,避免工程移动后导致找不到。
    (为避免移动工程后,路径找不到的情况。也可手动输入 相对当前工程文件的相对路径,例如:"./Keil5_disp_size_bar.exe")
如果选错其他工程的,编译出的信息则是其他工程的map文件
最新版本支持传入参数
./Keil5_disp_size_bar.exe 参数1 参数2 参数3 参数4 参数5
参数1:工程文件和map文件的递归查找目录,默认是"./"即exe所在目录
参数2:map文件的递归查找目录,默认是"./"即exe所在目录
参数3:是否输出程序详细运行过程,默认是0不输出,1则输出。
参数4:打印进度条已占用时的字符串,默认是"■"
参数4:打印进度条未占用时的字符串,默认是"_"
kdsb7.png
  • 接着每次对工程按下编译,编译完成后就能看到生成的代码对ram和flash的占用大小百分比进度条。


同时生成了4个文件
  • xxx_alog.txt 是程序运行日志文件,当输出不对或没有输出时可以查看
  • xxx_sort_by_flash.csv是把文件按flash占用排序的表格
  • xxx_sort_by_ram.csv是把文件按ram占用排序的表格
  • xxx_analysis.xlsx是文件ram和flash的占用和绘制的百分比饼图

kdsb1.png
kdsb3.png kdsb2.png kdsb4.png
  • 如果执行了Keil5_disp_size_bar.exe,却没有输出占用百分比进度条,或者输出的信息有误
    请检测输出的错误消息或alog日志文件,最大可能是当前工程或者你放置程序的目录下递归查找也找不到map文件,
    请检测工程的Output输出生成配置,然后按下全部重新编译一次再看看能不能输出占用百分比进度条。
二次开发环境搭建
  • 系统:windos10
  • 编译器mingw-64
  • 编辑器:例如vscode(使用其他IDE环境也可)
工程结构如下:
├─.vscode
├─inc(头文件)
│ └─xlsxwriter(头文件)
│ └─third_party(头文件)
├─lib(静态库)
└─src(源码)
开发方式和linux下编译开发C语言差不多,通过make或者gcc指令编译。
源码是使用GB2312格式编码的字符,使用其他编码打开的话中文注释和特殊字符会乱码。 因为keil如果使用utf-8输出到cmd的会带乱码,这是因为window的cmd中文默认GB2312。
代码通过预编译实现了库的可裁剪
Makefile的USED_XLSXWRITER_LIB=1 默认是1,编译xlsxwriter库
如果USED_XLSXWRITER_LIB=0
则代码生成xlsx文件部分代码则被裁剪掉,只会生成csv文件。
版本更新日志
. 更新到v1.0 版本1.0进行了大更新
  • 代码规范化,大部分变量以结构体形式封装,且函数接口有较详细注释
  • 支持main函数传参 参数1:工程和map的递归查找地址 参数2:map递归查找地址 参数3是否输出运行过程到终端,参数4进度条占用字符串 参数5进度条不占用字符串
  • 支持显示ram和flash段的基地址,且按基地址纠正是ram还是flash
  • 程序运行后直接输出结果,程序的运行过程默认不输出到终端而是保存在 工程名_alog.txt内,要输出则传参数4为 1
  • 解析文件在已使用的ram和flash的占比,导出csv和xlsx表格结果,xlsx表格会画出百分比的饼图,csv则需要自己使用excel画
. 更新到v0.4
  • 把uint64_t改为uint32_t,因为发现sscanf函数的%x给赋值时,64位好像会因为对齐问题错误。
  • 修复递归查找不彻底导致子目录下的map找不到
  • 添加C51支持8051 测试STC89C52和WCH552均测试可以,但是部分工程没有写xram的大小的默认只能以iram大小替代。 还有部分工程是没有在工程定义真正大小的,也就是芯片本身没有keil开发包,用其他芯片或通用开发包定义的工程。 在keil上是没有定义对应芯片型号或用了其他芯片的定义的8051这就会导致显示占用的最大值错误。 要确保工程文件里面的IRAM,XRAM,IROM都是正确的才行。
  • 同时发现部分例如stm32F0系列的工程map文件格式不同,可能早期map不怎么统一规范,给的max都是0xFFFFFFFF,无法输出进度条,只能读工程的里芯片定义的max,来替代map文件的max,所以部分自定义的显示不出来,工程文件有些格式也是会不一样有的以逗号分隔有的以-分隔。

. 更新到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的占用百分比进度条显示
  • 一个极客 ageek nikola 开源




keil5_disp_size_bar.zip (343.83 KB, 下载次数: 86)


评分

参与人数 1金币 +50 收起 理由
caicaptain2 + 50 很给力!

查看全部评分

回复

使用道具 举报

5

主题

201

回帖

216

积分

高级会员

积分
216
发表于 2023-8-2 11:29:54 | 显示全部楼层
不错不错,兄弟是做的越来越好了,点赞
回复

使用道具 举报

1

主题

131

回帖

134

积分

初级会员

积分
134
发表于 2023-8-2 11:54:33 | 显示全部楼层
v0.5 能正常使用,用了 v1.0 版本,编译器无法输出信息,请问是什么原因呢?

谢谢分享的神兵利器。


1.png
2.png
回复

使用道具 举报

3

主题

46

回帖

55

积分

初级会员

一个极客ageek

积分
55
 楼主| 发表于 2023-8-2 15:17:32 | 显示全部楼层
www2205290064 发表于 2023-8-2 11:54
v0.5 能正常使用,用了 v1.0 版本,编译器无法输出信息,请问是什么原因呢?

谢谢分享的神兵利器。

看看有没有alog_txt生成,里面用运行的详细步骤。或者传参数,第3个参数是1时会输出详细信息,例如./keil5_disp_size_bar.exe  ./ ./ 1。
回复

使用道具 举报

3

主题

46

回帖

55

积分

初级会员

一个极客ageek

积分
55
 楼主| 发表于 2023-8-2 15:23:42 | 显示全部楼层
www2205290064 发表于 2023-8-2 11:54
v0.5 能正常使用,用了 v1.0 版本,编译器无法输出信息,请问是什么原因呢?

谢谢分享的神兵利器。

看看alog.txt文件里面有详细步骤看看有没有报错信息或者停留在哪一步或者在调用时插入第3参数为1,例如./keil5_disp_size_bar.exe  ./ ./ 1 这样就会输出每一步的一些关键信息。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
发表于 2023-8-2 17:26:27 | 显示全部楼层
谢谢楼主分享。
回复

使用道具 举报

1

主题

131

回帖

134

积分

初级会员

积分
134
发表于 2023-8-2 17:29:36 | 显示全部楼层
nikola 发表于 2023-8-2 15:17
看看有没有alog_txt生成,里面用运行的详细步骤。或者传参数,第3个参数是1时会输出详细信息,例如./keil ...

没有生成 alog_txt 文件
回复

使用道具 举报

1

主题

131

回帖

134

积分

初级会员

积分
134
发表于 2023-8-2 17:35:56 | 显示全部楼层
nikola 发表于 2023-8-2 15:23
看看alog.txt文件里面有详细步骤看看有没有报错信息或者停留在哪一步或者在调用时插入第3参数为1,例如./ ...

map 文件是正常的,同一个 map 文件,用 v0.4 版本能输出,用 v1.0 文件则不行。 没有任何信息输出,也没有产生txt。 附件是 map 文件,大侠有时间帮忙看下。谢谢!

Combo_SINO.7z

101.14 KB, 下载次数: 2

回复

使用道具 举报

5

主题

519

回帖

534

积分

金牌会员

积分
534
发表于 2023-8-2 17:50:44 | 显示全部楼层
谢谢分享,越来越强。
回复

使用道具 举报

3

主题

46

回帖

55

积分

初级会员

一个极客ageek

积分
55
 楼主| 发表于 2023-8-2 20:27:58 | 显示全部楼层
www2205290064 发表于 2023-8-2 17:35
map 文件是正常的,同一个 map 文件,用 v0.4 版本能输出,用 v1.0 文件则不行。 没有任何信息输出,也没 ...

我用你的map试了V1.0没有问题,能正常输出和生成。如果是没找到工程或者map也会报错的,会不会你下载的程序有问题,你重新下一个,或者在终端单独执行一下试试。
回复

使用道具 举报

1

主题

131

回帖

134

积分

初级会员

积分
134
发表于 2023-8-3 08:04:00 | 显示全部楼层
nikola 发表于 2023-8-2 20:27
我用你的map试了V1.0没有问题,能正常输出和生成。如果是没找到工程或者map也会报错的,会不会你下载的程 ...

太奇怪了,我有两台电脑;
1、dell 一体机,v1.0 是没有问题的,能正常输出和生成。
2、华为笔记本,v0.4 没有问题,v1.0 编译器能显示调用了插件,但是没有输出和生成。

两个电脑操作系统是一样的,编译工程也是同一份。


微信图片_20230803075320.png
回复

使用道具 举报

1

主题

131

回帖

134

积分

初级会员

积分
134
发表于 2023-8-3 08:06:07 | 显示全部楼层
nikola 发表于 2023-8-2 20:27
我用你的map试了V1.0没有问题,能正常输出和生成。如果是没找到工程或者map也会报错的,会不会你下载的程 ...

单独运行 Keil5_disp_size_bar.exe, 提示这个错误,请问是这个原因吗?应该如何修复? 但是两台电脑我下载的都是同一个 Keil5_disp_size_bar.exe文件


111.png
回复

使用道具 举报

1

主题

131

回帖

134

积分

初级会员

积分
134
发表于 2023-8-3 08:42:26 | 显示全部楼层
www2205290064 发表于 2023-8-3 08:06
单独运行 Keil5_disp_size_bar.exe, 提示这个错误,请问是这个原因吗?应该如何修复? 但是两台电脑我下 ...

已修复,下载 zlib1.dll 文件放在 windows/system32 文件夹,解决问题
回复

使用道具 举报

3

主题

46

回帖

55

积分

初级会员

一个极客ageek

积分
55
 楼主| 发表于 2023-8-3 08:50:36 | 显示全部楼层
www2205290064 发表于 2023-8-3 08:42
已修复,下载 zlib1.dll 文件放在 windows/system32 文件夹,解决问题

是那个导出xlsx的库libxlsxwriter依赖zlib,可能是我装了mingw64后,mingw自带了zlib,按我这样编译这个zlib需要动态库dll,来加载,有些电脑没有zlib库,谢谢测试,我后面再看看有没有其他办法。
回复

使用道具 举报

2

主题

25

回帖

31

积分

新手上路

积分
31
QQ
发表于 2023-8-11 17:29:03 | 显示全部楼层
如图,在我笔记本和台式机上出现同样的问题。请问是什么原因?我笔记本用的keil 5.38  台式机用的5.33版本,谢谢
1.png

回复

使用道具 举报

0

主题

2

回帖

2

积分

新手上路

积分
2
发表于 2023-8-15 10:08:06 | 显示全部楼层
要是能给生成bin合并hex这些工具加一起怎么样
回复

使用道具 举报

0

主题

2

回帖

2

积分

新手上路

积分
2
发表于 2023-8-15 10:08:36 | 显示全部楼层
要是能给生成bin合并hex这些工具加一起怎么样
回复

使用道具 举报

5

主题

97

回帖

112

积分

初级会员

积分
112
发表于 2023-8-23 16:54:19 | 显示全部楼层
zlib1.dll 缺失 确保32位程序使用32位DLL文件,64位程序使用64位DLL文件。否则可能会导致0xc000007b错误。

下载网址。https://www.dll-files.com/zlib1.dll.html   
https://www.youtube.com/watch?v=OGMWw0L1TWg
回复

使用道具 举报

5

主题

97

回帖

112

积分

初级会员

积分
112
发表于 2023-8-23 16:54:37 | 显示全部楼层
augustedward 发表于 2023-8-11 17:29
如图,在我笔记本和台式机上出现同样的问题。请问是什么原因?我笔记本用的keil 5.38  台式机用的5.33版本 ...

zlib1.dll 缺失 确保32位程序使用32位DLL文件,64位程序使用64位DLL文件。否则可能会导致0xc000007b错误。

下载网址。https://www.dll-files.com/zlib1.dll.html   
https://www.youtube.com/watch?v=OGMWw0L1TWg
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
发表于 2023-8-24 01:06:21 | 显示全部楼层
负号 发表于 2023-8-15 10:08
要是能给生成bin合并hex这些工具加一起怎么样

这种的,加载个bat批处理文件比较方便。
回复

使用道具 举报

0

主题

1

回帖

1

积分

新手上路

积分
1
发表于 2023-8-28 11:16:14 | 显示全部楼层
不错,然而我用的是迪文的8051,没法用这个工具。只能看源码学习学习了
回复

使用道具 举报

1

主题

8

回帖

11

积分

新手上路

积分
11
发表于 2023-9-13 09:08:16 | 显示全部楼层
很666666哇
回复

使用道具 举报

4

主题

159

回帖

171

积分

初级会员

积分
171
发表于 2023-9-15 09:37:39 | 显示全部楼层
0.4版本的确可以,1.0貌似不行。。。。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-28 03:47 , Processed in 0.264445 second(s), 30 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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