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

使用方法:

  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.mzph.cn/news/855816.shtml

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

相关文章

若依框架自定义开发使用学习笔记(1)

因为我是跳着学的,原理那些都没咋看。 代码自动生成,依赖sql表 在ruoyi数据库中,创建你想要的表,这里我创建了个购物车表,由于空间有限,只能拍到这么多。 然后就可以在前端自动生成代码 点击导入按钮 …

创新入门 | 病毒循环Viral Loop是什么?为何能实现指数增长

今天,很多高速增长的成功创业公司都在采用”病毒循环“的策略去快速传播、并扩大用户基础。究竟什么是“病毒循环”?初创公司的创始人为何需要重视这个策略?这篇文章中将会一一解答与病毒循环有关的各种问题。 一、什么是病毒循环&#xff08…

【Ruby基础01】windows和termux中搭建Ruby开发环境

windows下环境搭建 railsinstaller官方git地址 按照文档安装git、nodejs、yarn,安装教程百度一下。railsinstall可以从release页面下载最新版本4.1.0。 安装完成如下 安装RubyMine 下载RubyMine RubyMine下载地址 安装激活 下载文件,按照里面的流程…

Java 读取Excel导入数据库,形成树状结构

最近开发过程中遇到一个Excel的导入的功能,因为导入的数据结构具有层次结构,经过一番研究,最终得以实现,所有写下该文章,记录过程,供以后参考。 下图是导入Excel的数据结构: 使用POI解析Excel,数据封装然后进行入库。下面是核心代码。 @Overridepublic KnowledgeBase…

示例:WPF中如何不卡顿页面的情况加载大量数据

一、目的:在开发过程中经常会遇到一个ListBox列表里面需要加载大量数据,但是加载过程中会假死卡顿影响用户体验,或者是你的主页面加载了大量控件,或者切换到一个有大量元素的页面都会有这种体验,因为加载的都是UI元素不…

基于matlab的RRT算法路径规划(附带案例源码)

文章中的所有案例均为博主手动复现,用于记录博主学习路径规划的过程,如有不妥,欢迎在评论区交流 目录 1 标准RRT1.1 算法原理1.2 演示 2 GBRRT2.1 算法原理2.2 算法演示 3 RRT-STAR3.1 算法原理3.2 算法演示 4 RRT-CONNECT4.1 算法原理4.2 算…

了解指标体系1:指标是大数据开发中的关键要素

在大数据开发的过程中,指标体系是一个至关重要的概念。本文将介绍什么是指标,为什么它们如此重要,以及如何在大数据项目中有效地构建和应用指标体系。 目录 什么是指标?指标的类型为什么指标如此重要?如何构建有效的指…

Swift开发——存储属性与计算属性

Swift语言开发者建议程序设计者多用结构体开发应用程序。在Swift语言中,结构体具有了很多类的特性(除类的与继承相关的特性外),具有属性和方法,且为值类型。所谓的属性是指结构体中的变量或常量,所谓的方法是指结构体中的函数。在结构体中使用属性和方法是因为:①匹别于结…

每日一练:攻防世界:miao~

给了一张jpg图片 没发现什么特别,放到winhex中查看也没思路。 放到kali里面foremost分离文件试试,结果分离出个wav音频文件 直接放到 audycity看看频谱图 发现字符串,但是没有其他信息。可能是密钥之类的。到这里我就卡住了,看…

镜像拉取失败:[ERROR] Failed to pull docker image

问题描述 执行 bash docker/scripts/dev_start.sh 命令提示错误: permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post “http://%2Fvar%2Frun%2Fdocker.sock/v1.45/images/create?fromImageregistry.b…

微信小程序-上拉加载和下拉刷新

一.上拉加载 微信小程序的上拉加载使用onReachBottom(),写在.js文件里面的Page方法里面。 onReachBottom(){//上拉自动更新到4,5,6wx.showLoading({title: 数据加载中...,})setTimeout(()>{const lastNumthis.data.numList[this.data.nu…

Ubuntu网络管理命令:nslookup

安装Ubuntu桌面系统(虚拟机)_虚拟机安装ubuntu桌面版-CSDN博客 nslookup命令主要用来查询域名信息,实际上主要是将域名转换为相应的IP地址,或者将IP地址转换成相应的域名。nslookup命令为用户提供了两种工作模式,分别…

matlab线性多部法求常微分方程数值解

用Adamas内差二步方法,内差三步方法,外差二步方法,外差三步方法这四种方法计算。 中k为1和2. k为2和3 代码 function chap1_adams_methodu0 1; T 2; h 0.1; N T/h; t 0:h:T; solu exact1(t);f f1; u_inter_2s adams_inter_2steps(…

项目训练营第二天

项目训练营第二天 用户登录逻辑 1、账户名不少于4位 2、密码不少于8位 3、数据库表中能够查询到账户、密码 4、密码查询时用同样加密脱敏处理手段处理后再和数据库中取出字段进行对比,如果账户名未查询到,直接返回null 5、后端设置相应的脱敏后用户的s…

就因为没在大屏项目加全屏按钮,早上在地铁挨了领导一顿骂

“嗯嗯”,“嗯嗯”,“那产品也没说加呀”,“按F11不行吗?”,“嗯嗯”,“好的”。 早上在4号线上,我正坐在地铁里,边上站着的妹子,我看他背着双肩包,打着电话…

即时到账支付系统源码第四方支付平台源码(支付宝/QQ钱包/微信二维码收款+附配套软件)

即时到账支付系统源码第四方支付平台源码价值10万,支付宝/QQ钱包/微信二维码收款,附配套软件 开发语言:phpmysql 这个是一个可以跟码支付一样用自己的二维码收款的网站 还可以作为即时到账 代收款 或者易支付使用后台配置好就行&#xff…

python 微信群发工具

效果如下 python 微信消息群发工具 1、环境安装依据python手机app自动化测试环境搭建-CSDN博客 2、元素获取 启动uiautomatorviewer.bat工具,如下图 点击获取手机界面,如下图 3、根据获取的界面元素id或class名称编写代码 python简易代码如下 from appium import webdrive…

移动硬盘在苹果电脑上无法识别的诊断与恢复策略

一、问题描述 在数字时代,移动硬盘已成为我们存储和传输数据的重要工具。然而,当我们将移动硬盘插入苹果电脑时,有时会遇到无法识别的情况,这让我们感到十分困扰。本文将详细探讨移动硬盘插苹果电脑后读不出来的现象,…

浸没式液冷服务器的换热效率及节能潜力分析

服务器浸没式液冷的换热效率及节能潜力 摘要:我们针对服务器浸没式液冷实验台进行了深入测试,探究了不同室外温度和服务器发热功率对系统制冷PUE的影响。实验数据显示,该系统的制冷PUE值介于1.05至1.28之间,高效节能特点显著。 在…

坚持刷题|反转链表

文章目录 题目思考实现1. 迭代方式实现链表翻转2. 递归方式实现链表翻转 Hello,大家好,我是阿月。坚持刷题,老年痴呆追不上我,今天继续链表:反转链表 题目 LCR 024. 反转链表 思考 翻转链表是一个常见的算法问题&a…