网站首页 > 文章精选 正文
想要知道一个文件的作用,先得了解文件的内容,Keil 的 Map 文件必须通过以下的配置才能生成,从图中也大致可以看出 Map 文件有哪些内容。
这里总结下,Keil 生成的 Map 文件里面内容大致分为五大类(按照map文件分类的顺序):
1.Section Cross References
指的是各个源文件生成的模块、段(定义的入口)之间相互引用的关系,配置中需勾选上:Cross Reference,例如:
ble_freertos_ancs.o(i.main) refers to am_hal_clkgen.o(i.am_hal_clkgen_control) for am_hal_clkgen_control
上面表示 ble_freertos_ancs.o 文件中的 main 函数调用了 am_hal_clkgen.o 文件中的 am_hal_clkgen_control 函数
2.Removing Unused input sections from the image
移除未使用的模块,配置中需勾选上:Unused Sections Info,就是删除工程代码中,没有被调用的模块。最后面还有个统计信息,例如
表明有5787段没用使用,总的占1964746字节
3.Image Symbol Table
映射符号表,配置中需勾选上:Symbols,从中可以看出符号名称,存储地址,存储大小,所在的目标文件
4.Memory Map of the image
内存映射分布,配置中需勾选上:Memory Map
Image Entry point : 0x0001c135:指程序入口地址。
Load Region LR_IROM1 (Base: 0x0001c000, Size: 0x001eb8e0, Max: 0x001e0000, ABSOLUTE, COMPRESSED[0x00189d14]):指加载区域 LR_IROM1 起始地址为 0x0001c000,大小有0x001eb8e0,这块区域最大为0x001e0000.
Execution Region ROM_VECTOR (Exec base: 0x0001c000, Load base: 0x0001c000, Size: 0x00000100, Max: 0x00000100, ABSOLUTE):指可执行区域 ROM_VECTOR 起始地址为 0x0001c000,大小有0x00000100,这块区域最大为0x00000100.
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空间
- 上一篇: 一种内存泄露排查方法
- 下一篇: 《三角洲行动》Vector冲锋枪改装代码分析与策略指南
猜你喜欢
- 2025-01-08 使用 Vector 将 PostgreSQL 日志输出为 Prometheus 指标
- 2025-01-08 java的list和map区别,list和map的区别是什么
- 2025-01-08 界面组件DevExtreme v22.2亮点——UI模板库升级换代!
- 2025-01-08 Unity Shaders学习笔记--SurfaceShader(九)Cubemap
- 2025-01-08 谷歌地图API的三大开源替代品
- 2025-01-08 linux下GDB使用方法
- 2025-01-08 一文读懂map和hash_map的差异原理
- 2025-01-08 C/C++从0到1系统精讲 项目开发综合基础课
- 2025-01-08 《叛乱:沙漠风暴》PC版更新上线!追加新地图/模式
- 2025-01-08 C++游戏客户端/服务器端开发需要掌握什么?
- 最近发表
- 标签列表
-
- newcoder (56)
- 字符串的长度是指 (45)
- drawcontours()参数说明 (60)
- unsignedshortint (59)
- postman并发请求 (47)
- python列表删除 (50)
- 左程云什么水平 (56)
- 计算机网络的拓扑结构是指() (45)
- 稳压管的稳压区是工作在什么区 (45)
- 编程题 (64)
- postgresql默认端口 (66)
- 数据库的概念模型独立于 (48)
- 产生系统死锁的原因可能是由于 (51)
- 数据库中只存放视图的 (62)
- 在vi中退出不保存的命令是 (53)
- 哪个命令可以将普通用户转换成超级用户 (49)
- noscript标签的作用 (48)
- 联合利华网申 (49)
- swagger和postman (46)
- 结构化程序设计主要强调 (53)
- 172.1 (57)
- apipostwebsocket (47)
- 唯品会后台 (61)
- 简历助手 (56)
- offshow (61)