keil5显示内存和存储占用百分比进度条工具

news2024/11/13 15:36:15

简介

[Keil5_disp_size_bar]
以进度条百分比来显示keil编译后生成的固件对芯片的内存ram和存储flash的占用情况,
并生成各个源码文件对ram和flash的占比整合排序后的map信息的表格和饼图。

原理是使用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创建的任务信息或者函数关系等。

使用方法:

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

  1. 在工程打开魔术棒配置,在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:打印进度条未占用时的字符串,默认是”_”

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

同时生成了4个文件

  • xxx_alog.txt 是程序运行日志文件,当输出不对或没有输出时可以查看

  • xxx_sort_by_flash.csv是把文件按flash占用排序的表格

  • xxx_sort_by_ram.csv是把文件按ram占用排序的表格

  • xxx_analysis.xlsx是文件ram和flash的占用和绘制的百分比饼图

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

二次开发环境搭建

  1. 系统:windos10

  2. 编译器mingw-64

  3. 编辑器:例如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语言源码:Keil5_disp_size_bar: [Keil5_disp_size_bar]:以进度条百分比来显示keil编译后代码对芯片的内存ram和存储flash的占用情况。原理是使用C语言遍历目录找到keil工程生成出的.map文件,然后找到对应的ram和flash的总大和占用大小,然后以进度条和百分比的直观格式输出来,以便嵌入式软件工程师方便调试,知道芯片占用情况,进行裁剪和优化。

百度链接:百度网盘 请输入提取码 

提取码:rca0

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1840062.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[16] 使用Opencv_CUDA 实现访问图像像素、直方图均衡化、几何变换

使用Opencv_CUDA 实现访问图像像素、直方图均衡化、几何变换 访问图像的各个像素强度直方图的计算与均衡几何变换&#xff1a;缩放、平移与旋转 1. 访问图像的各个像素强度 #include <iostream> #include "opencv2/opencv.hpp"int main() {cv::Mat h_img1 …

调取Windows系统虚拟键盘

目录 一 设计原型 二 后台源码 一 设计原型 二 后台源码 using System.Diagnostics;namespace 调取Windows虚拟键盘 {public partial class Form1 : Form{public Form1(){InitializeComponent();}private void richTextBox1_DoubleClick(object sender, EventArgs e){Proces…

对于补码的个人理解

1. 十进制的取模计算 现在我想要使另一个数加上2后用8取模后也等于1&#xff0c;这个数可以是哪些&#xff1f; 这个问题比较简单&#xff0c;只需要-1加上8的倍数即可 例如&#xff1a; 如果我们想要得到距离-1这个负数最近的一个正数7&#xff0c;直接使用-18即可。反过来想…

JavaSE 面向对象程序设计高级 方法引用 2024详解

在编程中&#xff0c;方法引用&#xff08;Method Reference&#xff09;是一种技术&#xff0c;它让你能够直接引用一个现有的函数或方法&#xff0c;而无需通过对象实例来调用。这种方法在函数式编程和高阶函数中非常有用&#xff0c;因为它提供了简洁的方式来传递函数行为&a…

晋升受阻或遭受不公:你想到这条路了吗?

晋升受阻或遭受不公&#xff1a;你想到这条路了吗&#xff1f; 当你在职场上遇到晋升受阻或者感觉受到不公平对待的时候&#xff0c;你一般选择怎么处理&#xff1f;是逆来顺受、忍气吞声、还是听命安排与据理力争&#xff1f; 其实并非无路可走&#xff0c;这时候&#xff0c;…

在二维空间中用椭圆表示不确定性

在二维空间中用椭圆表示不确定性 flyfish import numpy as np import matplotlib.pyplot as plt from matplotlib.patches import Ellipse# 生成示例数据 np.random.seed(0) data np.random.multivariate_normal([0, 0], [[4, 2], [2, 3]], size500)# 计算均值和协方差矩阵 …

使用node把任意网站封装为可执行文件

直接上步骤&#xff1a; 1. node.js 环境准备 下载地址 那个版本都行&#xff0c;下一步->下一步 安装即可 2. windows 系统下&#xff0c; 快捷键 winr ->输入 cmd -> 回车 3. 执行第一个命令&#xff0c;安装 nativefier 等一段时间 npm install nativefier -g 4…

GitHub爆赞!最适合新手入门的教程——笨方法学Python 3

“Python 是一门既容易上手又强大的编程语言。”这句话本身并无大碍&#xff0c;但需要注意的是&#xff0c;正因为它既好学又好用&#xff0c;所以很多 Python 程序员只用到了其强大功能的一小部分。 今天给小伙伴们分享的这份手册以习题的方式引导读者一步一步学习编程&…

VMware 虚拟机共享宿主机文件夹

一、背景 在虚拟机中&#xff0c;需要写文件到宿主机的文件系统中 宿主机的文件共享给虚拟机使用 这些场景就涉及到VM的虚拟机怎么访问宿主机的磁盘文件夹 二、软件背景 宿主机&#xff1a;window机器&#xff0c;本文是win7 虚拟软件&#xff1a;VMware12.5.6&#xff0…

js文件导出功能

效果图&#xff1a; 代码示例&#xff1a; <!DOCTYPE html> <html> <head lang"en"><meta charset"UTF-8"><title>html 表格导出道</title><script src"js/jquery-3.6.3.js"></script><st…

Office--加载宏-CS上线

免责声明:本文仅做技术交流与学习... 目录 关于宏上线的格式: 操作流程: 其他office文本的上线格式一样: 关于宏上线的格式: doc宏病毒: 1-生成格式为dotm 只要点启用宏就上线 2-生成格式为()word 97-2003 .doc) 被杀 操作流…

Qt入门小项目 | 实现一个图片查看器

文章目录 一、实现一个图片查看软件 一、实现一个图片查看软件 需要实现的功能&#xff1a; 打开目录选择图片显示图片的名字显示图片 在以上功能的基础上进行优化&#xff0c;需要解决如下问题&#xff1a; 如何记住上次打开的路径&#xff1f; 将路径保存到配置文件中&#x…

LabVIEW在SpaceX的应用

结合真实的资料介绍LabVIEW在SpaceX的应用&#xff0c;涵盖自动化测试系统、数据采集与监控、可视化与分析、模块化设计与扩展&#xff0c;以及效率与可靠性的提高。 ​ 自动化测试系统 LabVIEW在SpaceX的自动化测试系统中发挥了关键作用。自动化测试是确保SpaceX火箭及其子系…

Android焦点机制结合WMS

文章前提&#xff1a; 了解WMS基本作用了解window的概念&#xff0c;phoneWindow&#xff0c;rootViewImpl了解view的事件分发 开始&#xff1a; 讲三件事情&#xff1a; window的创建&#xff0c;更新焦点的更新事件的分发 Window的创建&#xff0c;更新&#xff1a; wi…

IT入门知识第二部分《编程语言》(2/10)

目录 IT入门知识博客文章大纲第二部分《编程语言》 1.引言 2.编程语言概述 2.1 编程语言的发展历程 2.2 编程范式 3.常见的编程语言 3.1 Python 3.2 Java 3.3 C 3.4 JavaScript 3.5 Ruby 4.编程语言的选择 4.1 技术需求 4.2 团队技能 4.3 社区和生态系统 4.4 可…

经验分享,CRC(循环冗余校验)在线计算

这里分享一个好用的在线计算CRC的网站。 网址&#xff1a;http://www.ip33.com/crc.html 截图&#xff1a;

Linux - 进程

一、什么是进程 首先&#xff0c;Linux是一个多用户多进程的操作系统&#xff0c;系统上可以同时运行多个进程。 进程的产生&#xff1a;①是在执行程序或者命令时产生的&#xff1b;②定时任务进程 进程的类型&#xff1a;前台进程/后台进程 前台进程&#xff1a;一个终端…

之所以选择天津工业大学,因为它是双一流、报考难度适宜,性价比高!天津工业大学计算机考研考情分析!

天津工业大学&#xff08;Tiangong University&#xff09;&#xff0c;简称“天工大”&#xff0c;位于天津市&#xff0c;是教育部与天津市共建高校、国家国防科技工业局和天津市共建的天津市重点建设高校、国家“双一流”建设高校、天津市高水平特色大学建设高校、中国研究生…

[Linux] 其他命令

cat cat是用法极多的一个命令&#xff1a; 1.输入输出 如果不加任何修饰&#xff0c;只一个cat&#xff0c;它是&#xff1a; 标准输入设备&#xff08;键盘&#xff09;——》标准输出设备&#xff08;显示器&#xff09; 显示文件内容&#xff1a; cat filename 输入重定向&a…

从0开始C++(二):类、对象、封装

目录 类&对象的概念 类的内容 对象的创建 ● 栈内存对象 ● 堆内存对象 封装 类&对象的概念 类和对象是一个比较抽象的概念&#xff0c;这里直接用一个实例方便理解。 类&#xff1a;类是一个抽象的概念&#xff0c;用来描述同一类对象的特点&#xff08;比如&am…