map文件是MDK编译代码后,产生的集程序,数据以及IO空间的一种映射列表文件,简单来说就是包括了各种.c文件,函数,符号等,的地址,大小,引用关系等信息。
作用:用于分析个.c文件占用,FLASH和RAM的大小,方便优化代码。
map文件大致可以分为五大部分,每个部分的作用如下:
- 模块、段(入口)交叉引用(Section Cross References):描述了各文件之间函数的调用关系,有助于理解个源文件如何相互关联。
- 移除未使用的模块(Removing Unused input sections from the image):描述了工程中为用到而被删除的冗余程序段,有助于优化代码,降低内存负担。
- 映射符号表(Image Symbol Table):描述了各符号(程序段、数据)在存储器中的地址,类型,大小等信息,对于理解程序的内存布局以及特定代码或者数据段非常有用。
- 内存(映射)分布(Memory Map of the image):描述了各程序段(函数)在存储器中的地址以及占用大小,有助于分析程序的内存占用情况。
- 映射组件大小(Image component sizes):给出了整个映像代码(.c)占用空间的汇总信息,包括代码,只读数据,初始化读写数据,未初始化读写数据等的大小,有助于了解程序的总体内存使用情况。
MAP问价的这五部分提供了对程序内存布局,函数调用关系,以及各模块占用情况的全面分析,是STM32开发中重要的优化和调试工具。、
map文件相关的一些基本概念:
段(section):描述映像文件的代码和数据块
RO:Read-Only的缩写,包括RO-data(只读数据)和RO-code(代码)
RW:Read-Write的缩写,主要是RW-data,RW-data由程序初始化初始值
ZI:Zero-initialized的缩写,主要是ZI-data,由编译器初始化为0
.text:与RO-code同义
.constdata:与RO-data同义
.bss:与ZI-data同义
.data:与RW-data同义