介绍

在开发ARM嵌入式设备的时候,例如开发BOOTLOADER功能,有时候需要分析FLASH的占用情况,但是Keil编译仅能生产Map文件,需要人收手动分析,而不能像CCS一样打开“Memory Allocation View”,直观的掌握各个分区的内存占用细节。

CCS的Memory Allocation Window如下:Memory Allocation Window

还好找到国内@MoodDream大神编写的一个Keil插件,Keil Memory Bar
Keil Memory Bar使用效果如下:
在这里插入图片描述

以及侯巽杰 (Dino)大佬的Keil Build Viewer
Keil Build Viewer使用效果如下:
在这里插入图片描述

以上两个插件均可以自动分析Map文件,并以进度条的形式输出占用率,能提供较为直观的内存使用情况,区别在于Keil Memory Bar是轻量化的,只能看整体的存储,而Keil Build Viewer会显示每个文件的占用大小,便于内存管理。

使用方法

插件的使用方法在gitee仓库的readme里写的比较详细,欢迎大家支持原作者

  1. 拷贝MemBar.exe或者keil-build-viewer.exe到Keil安装目录下,例如D:\Keil_v5\ARM\BIN

  2. 点击魔术棒

  3. 点击User选项卡

  4. 设置After Build/Rebuild执行命令,工具路径设置成实际的路径,建议路径最好不要带空格
    D:\Keil_v5\ARM\BIN\keil-build-viewer.exe
    或者
    D:\Keil_v5\ARM\BIN\MemBar.exe “$L@L.map”
    在这里插入图片描述

关于Keil Memory Bar,这里只提及一点小改动,第5步的神奇妙妙代码需要根据个人的map文件位置进行修改,“$L@L.map”这个命令的意思是:
- $L:生成的Outputs文件夹下
- @L:与工程名一致

即:./ Outputs/ project_name.map文件。
但比如我的工程是在./ Listings/ project_name.map目录下,因此该命令是不生效的。
在这里插入图片描述

需要修改为:

D:\Keil_v5\ARM\BIN\MemBar.exe “$P\Listings@L.map”

原理:$P表示工程目录,即工程目录下的\Listings文件夹中与工程名一致的map文件。
这是由于我没有找到表示Lisitings文件夹的宏,因此只能退而求其次手动定义路径。

完成配置后执行编译,就能输出一个简单的内存占用条,但是不能像CCS一样进一步分析内部具体变量的占用情况,这点还是有待进一步开发。

如果有小伙伴有更好的方式观察内存,欢迎在评论区留言,互相学习

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐