STM32 Keil生成的map文件分析

一、map文件生成设置:

STM32 Keil生成的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 模块之间相互引用的关系。

STM32 Keil生成的map文件分析

如图,main 模块调用了 delay 模块的 delay_init 函数。

 

(2)Removing Unused input sections from the image

移除编译了但未使用的模块。

STM32 Keil生成的map文件分析

 

(3)Image Symbol Table

映射符号表。

Symbol Name Value Ov Type Size Object(Section)
符号名称 存储对应的地址 符号对应的类型 存储大小 模块(源文件)名

1> Local Symbols 用static声明的函数和变量地址和大小 

STM32 Keil生成的map文件分析

2> Global Symbols 全局变量和函数的地址和大小

STM32 Keil生成的map文件分析

 

(4)Memory Map of the image

映像的内存分布

STM32 Keil生成的map文件分析

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
运行域地址 加载域地址 存储大小 类型 权限 入口分类名 目标

STM32 Keil生成的map文件分析

 

(5)Image component sizes

映像存储组成大小。详细释义参考:https://blog.csdn.net/p1279030826/article/details/103180034

STM32 Keil生成的map文件分析

STM32 Keil生成的map文件分析

Grand Totals:映像的真实大小。

ELF Image Totals:ELF可执行链接格式映像文件大小。

ROM Totals:包含映像所需的 ROM的最小大小。不包括ZI数据和存储在ROM 中的调试信息。