keil5显示内存和存储占用百分比进度条工具
简介
[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创建的任务信息或者函数关系等。
使用方法:
-
把程序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语言源码:Keil5_disp_size_bar: [Keil5_disp_size_bar]:以进度条百分比来显示keil编译后代码对芯片的内存ram和存储flash的占用情况。原理是使用C语言遍历目录找到keil工程生成出的.map文件,然后找到对应的ram和flash的总大和占用大小,然后以进度条和百分比的直观格式输出来,以便嵌入式软件工程师方便调试,知道芯片占用情况,进行裁剪和优化。
百度链接:百度网盘 请输入提取码
提取码:rca0
相关文章:

keil5显示内存和存储占用百分比进度条工具
简介 [Keil5_disp_size_bar] 以进度条百分比来显示keil编译后生成的固件对芯片的内存ram和存储flash的占用情况, 并生成各个源码文件对ram和flash的占比整合排序后的map信息的表格和饼图。 原理是使用C语言遍历当前目录找到keil工程和编译后生成的map文件 然后读取工程文件和m…...

示例:推荐一个应用Adorner做的消息对话框
一、目的:开发过程中,经常用到对话框,下面演示一个应用Adorner做的带遮盖层蒙版的控件,使用MainWindow的Adorner实现不需要额外定义遮盖层,使用Object作为参数,可自定义DataTemplate定制消息显示样式 二、效…...

Building wheels for collected packages: mmcv, mmcv-full 卡住
安装 anime-face-detector 的时候遇到一个问题:Installation takes forever #1386:在构建mmcv-full时卡住,这里分享下解决方法(安装 mmcv 同理,将下面命令中的 mmcv-full 替换成 mmcv) 具体表现如下&#x…...

可视化表单拖拽生成器优势多 助力流程化办公!
当前,很多企业需要实现流程化办公,进入数字化转型时期。要想实现这一目标,就需要借助更优质的平台产品。低代码技术平台是得到企业喜爱的发展平台,拥有可视化操作、灵活、高效、更可靠等优势特点,在推动企业实现流程化…...

数据集制作——语义分割前png、jpg格式标签图转yolo格式.txt文件(附代码)
💪 专业从事且热爱图像处理,图像处理专栏更新如下👇: 📝《图像去噪》 📝《超分辨率重建》 📝《语义分割》 📝《风格迁移》 📝《目标检测》 📝《暗光增强》 &a…...

机器学习课程复习——ANN
Q:ANN? 基本架构 由输入层、隐藏层、输出层等构建前馈/反馈传播 工作原理 先加权求和:每个神经元的输出是输入加权和的激活再送入激活函数:激活函数的存在使得其能够拟合各类非线性任务 联想:像adaboosting的加权求…...

C++回溯算法(2)
棋盘问题 #include<bits/stdc.h> using namespace std; void func(int,int); bool tf(int,int); void c(); int n,k; char a[110][110]; int cnt20; int main() {cin>>n>>k;for(int i0;i<n;i){for(int j0;j<n;j){cin>>a[i][j];}}func(0,0);cout…...
流量有限、日活低的APP适合对接广告变现吗?
APP广告变现,总用户数和日活用户(DUA)是衡量APP价值和影响力的重要指标之一。 APP DUA过万,尤其是大几万时,通常具备了商业化价值,适合接入广告变现。日活1W意味着每天有1万名用户在使用这款应用ÿ…...
Shell 学习笔记 - 变量的类型 + 变量的赋值
1.6 Shell 变量的类型 Shell 变量分为四类,分别是 自定义变量环境变量位置变量预定义变量 根据工作要求临时定义的变量称为自定义变量; 环境变量一般是指用 export 内置命令导出的变量,用于定义 Shell 的运行环境,保证 Shell …...
vue播放flv格式的直播流
在ios无法播放,安卓可以 安装 npm install flv.js --save页面 <template><div><videoref"videoElement"style"width: 100%; height: 100%"autoplayplaysinlinemuted></video></div> </template><scr…...

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

qt仿制qq登录界面
#include "mainwindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent) {// 设置窗口大小this->resize(window_width, window_heigth);// 固定窗口大小this->setFixedSize(window_width, window_heigth);// 设置窗口图标this->se…...

HashMap详解(含动画演示)
目录 HashMap1、HashMap的继承体系2、HashMap底层数据结构3、HashMap的构造函数①、无参构造②、有参构造1 和 有参构造2 (可以自定义初始容量和负载因子)③、有参构造3(接受一个Map参数)JDK 8之前版本的哈希方法:JDK 8版本的哈希方法 4、拉链法解决哈希冲突什么是拉…...

TVS的原理及选型
目录 案例描述 TVS管的功能与作用: TVS选型注意事项: 高速TVS管选型 最近项目中遇到TVS管选型错误的问题。在此对TVS的功能及选型做一个分享。 案例描述 项目中保护指标应为4-14V,而选型的TVS管位SMJ40CA,其保护电压为40V未…...
【机器学习】无监督学习:探索数据背后的隐藏模式
在机器学习的广阔领域中,监督学习因其直观的训练方式和广泛的应用场景,往往受到更多的关注。然而,随着数据量和数据类型的不断增长,无监督学习的重要性日益凸显。本文将详细介绍无监督学习的理论基础、常用算法及其在实际中的应用…...
使用Elasticsearch在同一索引中区分不同类型的文档
在使用Elasticsearch时,有时我们需要在同一个索引中存放不同类型的文档,并且这些文档的字段可能不一致。在早期版本中,我们可以使用types来实现,但在Elasticsearch 7.x及更高版本中,types概念已被弃用。本文将介绍如何…...

驾校在线考试系统源码 手机+PC+平板自适应
Thinkphp在线考题源码 驾校在线考试系统 手机PC平板 自适应,机动车驾驶培训学校驾校类网站源码带手机端 运行环境:phpmysql 内附安装说明 驾校在线考试系统源码 手机PC平板自适应...
c++的多态,继承,抽象类,虚函数表,虚函数等题目+分析
目录 题目 代码题 分析 主观题 题目 代码题 class A { public:virtual void func(int val 1) {std::cout << "A->" << val << std::endl;}virtual void test() { func(); } };class B : public A { public:void func(int val 0) { std…...

利用 Qwen-VL 进行私有化部署第一个 AI 多模态大模型
Hi~!这里是奋斗的小羊,很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~~ 💥💥个人主页:奋斗的小羊 💥💥所属专栏:C语言 🚀本系列文章为个人学习…...

王思聪隐形女儿曝光
王思聪"隐形"女儿曝光!黄一鸣独自面对怀孕风波,坚持生下爱情结晶近日,娱乐圈掀起了一场惊天波澜!前王思聪绯闻女友黄一鸣在接受专访时,大胆揭露了她与王思聪之间的爱恨纠葛,并首度公开承认&#…...

.Net框架,除了EF还有很多很多......
文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

【第二十一章 SDIO接口(SDIO)】
第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...
Nginx server_name 配置说明
Nginx 是一个高性能的反向代理和负载均衡服务器,其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机(Virtual Host)。 1. 简介 Nginx 使用 server_name 指令来确定…...

[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...

云原生玩法三问:构建自定义开发环境
云原生玩法三问:构建自定义开发环境 引言 临时运维一个古董项目,无文档,无环境,无交接人,俗称三无。 运行设备的环境老,本地环境版本高,ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...

HarmonyOS运动开发:如何用mpchart绘制运动配速图表
##鸿蒙核心技术##运动开发##Sensor Service Kit(传感器服务)# 前言 在运动类应用中,运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据,如配速、距离、卡路里消耗等,用户可以更清晰…...

基于Java+MySQL实现(GUI)客户管理系统
客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息,对客户进行统一管理,可以把所有客户信息录入系统,进行维护和统计功能。可通过文件的方式保存相关录入数据,对…...
NPOI操作EXCEL文件 ——CAD C# 二次开发
缺点:dll.版本容易加载错误。CAD加载插件时,没有加载所有类库。插件运行过程中用到某个类库,会从CAD的安装目录找,找不到就报错了。 【方案2】让CAD在加载过程中把类库加载到内存 【方案3】是发现缺少了哪个库,就用插件程序加载进…...
深度学习之模型压缩三驾马车:模型剪枝、模型量化、知识蒸馏
一、引言 在深度学习中,我们训练出的神经网络往往非常庞大(比如像 ResNet、YOLOv8、Vision Transformer),虽然精度很高,但“太重”了,运行起来很慢,占用内存大,不适合部署到手机、摄…...

ubuntu22.04有线网络无法连接,图标也没了
今天突然无法有线网络无法连接任何设备,并且图标都没了 错误案例 往上一顿搜索,试了很多博客都不行,比如 Ubuntu22.04右上角网络图标消失 最后解决的办法 下载网卡驱动,重新安装 操作步骤 查看自己网卡的型号 lspci | gre…...