STM32开发之map文件学习
map文件及相关概念
map文件是通过编译器编译之后,集程序、数据及IO空间的一种映射文件。
段(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同义
map文件包含
map文件的内容可分为如下几部分:
1、节区的跨文件引用(Section Cross References)
这部分主要是不同文件中函数的调用关系,详细列出了各个.o 文件之间的符号引用。由于.o 文件是由 asm 或 c/c++源文件编译后生成的,各个文件及文件内的节区间互相独立,链接器根据它们之间的互相引用链接起来,链接的详细信息在这个分区中详细列出。例如:
***main.o(.text) refers to delay.o(.text) for delay_ms***
值得注意的是,在构建工程的时候,有时会出现 “Undefined symbol xxx (referred from xxx.o)” 这样的错误提示,就是因为链接过程中,某个文件无法从工程所包含的外部找到它引用的标号,因而产生链接错误。
2、删除无用节区(Removing Unused input ps from the image)
map 文件的第二部分是删除无用节区的说明,这部分列出了在链接过程它发现工程中未被引用的节区,这些未被引用的节区将会被删除(指不加入到*.axf 文件,不是指在*.o 文件删除),这样可以防止这些无用数据占用程序空间。