当前位置:网站首页>通过Keil如何查看MCU的RAM与ROM使用情况
通过Keil如何查看MCU的RAM与ROM使用情况
2022-07-07 10:43:00 【Ch_champion】
概述
在很多偏门MCU,还是使用keil进行开发,开发过程中能免会出现ram,rom不够问题,怎么查看呢?下面揭晓答案^_^。
一、查看方式
1)、编译后
2)、通过map查看
方法很简单,鼠标对准红色圈,双击即可。
有时,双击不了,只要按照上图配置,此 .map文件一定会在本工程里面,如下所示:
找到.map,拖拽到keil中打开,即可。通过此文件可以分析,对应各个部分使用情况与合理性,从而进行做相应的优化处理。
Keil 生成的 Map 文件里面内容大致分为五大类(按照.map文件分类的顺序)如下所示:
1.Section Cross References
指的是各个源文件生成的模块、段(定义的入口)之间相互引用的关系,配置中需勾选上:Cross Reference,例如:
startup_stm32f401xe.o(RESET) refers to stm32f4xx_it.o(i.NMI_Handler) for NMI_Handler
上面表示 startup_stm32f401xe.o 文件中的 main 函数调用了 stm32f4xx_it文件中的 NMI_Handler函数
2.Removing Unused input sections from the image
移除未使用的模块,配置中需勾选上:Unused Sections Info,就是删除工程代码中,没有被调用的模块。最后面还有个统计信息,例如
表明有294段没用使用,总的占17904字节
3.Image Symbol Table
映射符号表,配置中需勾选上:Symbols,从中可以看出符号名称,存储地址,存储大小,所在的目标文件
4.Memory Map of the image
内存映射分布,配置中需勾选上:Memory Map
Image Entry point : 0x08000195:指程序入口地址。
Load Region LR_IROM1 (Base: 0x08000000, Size: 0x000021f8, Max: 0x00080000, ABSOLUTE):
指加载区域 LR_IROM1 起始地址为 0x08000000,大小有0x000021f8,这块区域最大为0x00080000.
Execution Region ER_IROM1 (Exec base: 0x08000000, Load base: 0x08000000, Size: 0x000021d0, Max: 0x00080000, ABSOLUTE):
指可执行区域 ROM_VECTOR 起始地址为 0x08000000,大小有0x000021d0,这块区域最大为0x00080000.
5.Image component sizes
存储组成大小,配置中需勾选上:Size Info,其实主要就是对模块进行汇总存储大小信息
Code:指代码的大小;
RO-data:指除了内联数据(inline data)之外的常量数据;
RW-data:指可读写(RW)、已初始化的变量数据;
ZI-data:指未初始化(ZI)的变量数据;
Code、RO-data:位于FLASH中;
RW-data、ZI-data:位于RAM中;
提醒:RW-data已初始化的数据会存储在Flash中,上电会从FLASH搬移至RAM中。
关系如下:
RO Size = Code + RO Data
RW Size = RW Data + ZI Data
ROM Size = Code + RO Data + RW Data
现在已经弄明白Map文件的内容,可以做以下分析。
(1)函数和变量所在的地址,这在推导函数调用栈时非常有用
(2)根据Code RO data RW data 的组成部分,可针对性的优化ROM空间和RAM空间
二、总结
详细了解,也可以阅读我之前写的文章,链接,时间久了都忘差不多了,好在做了笔录,方便以后翻阅。
边栏推荐
- HZOJ #240. 图形打印四
- xshell评估期已过怎么办
- MySQL导入SQL文件及常用命令
- [deep learning] image multi label classification task, Baidu paddleclas
- BGP third experiment report
- Pule frog small 5D movie equipment | 5D movie dynamic movie experience hall | VR scenic area cinema equipment
- layer弹出层的关闭问题
- 处理链中断后如何继续/子链出错removed from scheduling
- [爬虫]使用selenium时,躲避脚本检测
- GCC compilation error
猜你喜欢
2022广东省安全员A证第三批(主要负责人)考试练习题及模拟考试
数据库安全的重要性
visual stdio 2017关于opencv4.1的环境配置
【PyTorch实战】图像描述——让神经网络看图讲故事
[deep learning] image multi label classification task, Baidu paddleclas
2022危险化学品生产单位安全生产管理人员考题及在线模拟考试
认养一头牛冲刺A股:拟募资18.5亿 徐晓波持股近40%
2022 practice questions and mock examination of the third batch of Guangdong Provincial Safety Officer a certificate (main person in charge)
2022 polymerization process test question simulation test question bank and online simulation test
2022聚合工艺考试题模拟考试题库及在线模拟考试
随机推荐
Master公式。(用于计算递归的时间复杂度。)
Steps of building SSM framework
Preorder, inorder and postorder traversal of binary tree
Leetcode skimming: binary tree 23 (mode in binary search tree)
mysql怎么创建,删除,查看索引?
The IDM server response shows that you do not have permission to download the solution tutorial
通讯协议设计与实现
[difficult and miscellaneous]pip running suddenly appears modulenotfounderror: no module named 'pip‘
On valuation model (II): PE index II - PE band
opencv的四个函数
leetcode刷题:二叉树24(二叉树的最近公共祖先)
基于NeRF的三维内容生成
Day-18 hash table, generic
Design and implementation of communication protocol
[statistical learning method] learning notes - support vector machine (I)
[learn microservices from 0] [03] explore the microservice architecture
Simple implementation of call, bind and apply
[Q&A]AttributeError: module ‘signal‘ has no attribute ‘SIGALRM‘
Common knowledge of one-dimensional array and two-dimensional array
[learn wechat from 0] [00] Course Overview