首页 » 智能 » 【分享】keil显示内存和存储占用百分比进度条对象_文件_工程

【分享】keil显示内存和存储占用百分比进度条对象_文件_工程

雨夜梧桐 2025-01-02 04:32:29 0

扫一扫用手机浏览

文章目录 [+]

事理是利用C措辞遍历当前目录找到keil工程和编译后天生的map文件然后读取工程文件和map文件来找到对应关键词内的ram和flash的各种信息末了把信息整合以进度条字符串直不雅观格式输出,同时把map的数据排序后导出csv和xlsx文件,绘制饼图。

把稳:再次编译前先关闭已经利用excel打开的表格,或者先把原来的表格移走,不然excel占用表格文件导致没法输出新表格把稳:再次编译前先关闭已经利用excel打开的表格,或者先把原来的表格移走,不然excel占用表格文件导致没法输出新表格把稳:再次编译前先关闭已经利用excel打开的表格,或者先把原来的表格移走,不然excel占用表格文件导致没法输出新表格

【分享】keil显示内存和存储占用百分比进度条对象_文件_工程 【分享】keil显示内存和存储占用百分比进度条对象_文件_工程 智能

该程序随意马虎和keil的after bulid功能集成,以便嵌入式软件工程师方便知道芯片占用情形,进行裁剪和优化。

【分享】keil显示内存和存储占用百分比进度条对象_文件_工程 【分享】keil显示内存和存储占用百分比进度条对象_文件_工程 智能
(图片来自网络侵删)

这个项目也有一个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:打印进度条未占用时的字符串,默认是"_"

接着每次对工程按下编译,编译完成后就能看到天生的代码对ram和flash的占用大小百分比进度条。

同时天生了4个文件

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

如果实行了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 开源

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

百度链接:https://pan.baidu.com/s/1U3vqGXYQ7Gd9NLKXPvYirw?pwd=rca0

提取码:rca0

标签:

相关文章

C语言互斥量,守护并发编程的守护者

随着计算机技术的不断发展,多线程编程在各个领域得到了广泛应用。多线程编程也带来了诸多挑战,其中最为突出的问题就是线程安全问题。为了...

智能 2025-01-05 阅读0 评论0

C语言入门指南,探索编程世界的钥匙

随着科技的飞速发展,编程已经成为现代社会必备的技能之一。C语言作为一门历史悠久、功能强大的编程语言,一直以来都是初学者入门的首选。...

智能 2025-01-05 阅读0 评论0

C语言公用体,灵活的数据结构与应用

C语言作为一种功能强大的编程语言,在各个领域得到了广泛的应用。其中,公用体(Union)作为一种特殊的数据类型,在处理复杂数据结构...

智能 2025-01-05 阅读0 评论0