一、map文件生成设置:
选项说明表:
选项 | 释义 | 简要说明 |
Memory Map | 内存映射 | 内存映射分布信息 |
Callgraph | 图像映射 | 函数调用的堆栈使用以及子函数调用信息 |
Symbols | 映射符号表 | 模块.o文件对应映射地址 |
Cross Reference | 交叉引用关系 | 模块之间相互引用的关系 |
Size Info | 组成大小信息 | Object Name、Library Member Name、Library Name生成的.o文件占用的 Code、RO Data、RW Data、ZI Data、Debug详细空间信息 |
Totals Info | 统计信息 | 1、Object Totals、Library Totals 以及两者之和 2、Total RO Size 、Total RW Size 、Total ROM Size 3、ELF文件的大小和存放在ROM里面占用的大小 |
Unuaed Sections Info | 未调用模块信息 | 编译了源文件但未使用的模块 |
Veneers Info | 装饰信息 |
二、map文件中的基础概念
section | 描述映像文件的代码和数据块 |
Thumb Code | 指令集代码 |
RO | Read-Only的缩写,包括RO-data(只读数据域)和Code(代码域) |
RW | Read-Write的缩写,主要是RW-data,Rw-data由程序初始化初始值。 |
ZI | Zero-initialized的缩写,主要是ZI-data,由编程器初始化为0。 |
.constdata | 常量数据段。RO Data,例如const关键字定义的变量 |
.text | 即Code |
.data | 即ZI-data,初始化为“0 值”的可读写数据域或者未初始化的变量 |
.bss | 即RW-data,初始化为“非 0 值”的可读写数据 |
三、map文件组成分析
1、map文件组成表:
组成模块名称 | 释义 | 简要说明 | 对应勾选 | |
1 | Section Cross References | 模块、段的交叉引用关系 | 各个源文件生成的模块之间相互引用的关系 | Cross Reference |
2 | Removing Unused input sections from the image | 移除未使用的模块 | 移除编译了但未使用的模块 | Unuaed Sections Info |
3 | Image Symbol Table | 映射符号表 | 各个模块所存储的对应地址 | Symbols |
4 | Memory Map of the image | 映像的内存分布 | 映像文件可以分为加载域(Load Region)和 运行域(Execution Region) | Memory Map |
5 | Image component sizes | 映像存储组成大小 | Code、RO Data、RW Data、ZI Data、Debug等数据组成 | Size Info |
2、组成详细分析
(1)Section Cross References
各个源文件 .c 生成的 .o 模块之间相互引用的关系。
如图,main 模块调用了 delay 模块的 delay_init 函数。
(2)Removing Unused input sections from the image
移除编译了但未使用的模块。
(3)Image Symbol Table
映射符号表。
Symbol Name | Value | Ov Type | Size | Object(Section) |
符号名称 | 存储对应的地址 | 符号对应的类型 | 存储大小 | 模块(源文件)名 |
1> Local Symbols 用static声明的函数和变量地址和大小
2> Global Symbols 全局变量和函数的地址和大小
(4)Memory Map of the image
映像的内存分布
1> 程序ROM加载空间:
Load Region LR_IROM1 (Base: 0x08000000, Size: 0x0000135c, Max: 0x00040000, ABSOLUTE)
2> 程序ROM执行空间:
Execution Region ER_IROM1 (Exec base: 0x08000000, Load base: 0x08000000, Size: 0x00001328, Max: 0x00040000, ABSOLUTE)
执行空间的 ROM 比较小的原因就是因为部分 RW-data 类型的变量被拷贝到 RAM 空间了。
3> 后面的为地址分布列表
Exec Addr Load Addr Size Type Attr Section Name Objecj 运行域地址 加载域地址 存储大小 类型 权限 入口分类名 目标
(5)Image component sizes
映像存储组成大小。详细释义参考:https://blog.csdn.net/p1279030826/article/details/103180034
Grand Totals:映像的真实大小。
ELF Image Totals:ELF可执行链接格式映像文件大小。
ROM Totals:包含映像所需的 ROM的最小大小。不包括ZI数据和存储在ROM 中的调试信息。