本文介绍的map文件内容解析适用于Freescale S12(X)系列MCU(CodeWarrior 5.9.0) 的CodeWarrior 应用工程编译结果的map文件,结合的具体例子是基于S12XS256的工程编译链接的MAP文件。
map文件是嵌入式MCU应用工程编译链接结果的内存映射结果文件,其中输出了工程编译器、链接器配置信息、用户代码和数据编译结果,函数调用关系,存储器资源分配和使用结果统计等非常详尽的信息,可以说是对编译结果所做分门别类的最详细描述。(上面这段是百度里面搜的)。
详细介绍如下:
TARGET SECTION(编译目标属性设置)
列举工程所使用的处理器类型(processor):Freescale HC12
内存模型:SMALL/BANKED/LARGE
输出文件格式:ELF/DWARF 2.0
链接器版本信息:SmartLinker V-5.0.52 Build 15249
Tips:内存模型(memory model)的差别如下:
SMALL:小内存,适合于Flash小于64KB的MCU part,其使用局部地址访问,编译的代码运行效率最高;
BANKED:分页内存,适用于大于64KB的MCU part,使用分页访问的机制访问存储器,编译的代码中函数调用和数据访问使用16位地址(页内访问)和24位宽度的逻辑地址(跨页访问,使用关键词__far
修饰),实现相同功能的C代码,编译结果较SMALL要大;
LARGE:大内存,适用于S12XE系列的Flash较大的MCU part,但因为其编译结果中函数调用和数据访问默认使用24位的逻辑地址(无需关键词__far修饰),所以其编译结果较大,运行速度也是最慢的。
−FILE SECTION(工程文件列表)
列出所有工程链接使用的.c和.s文件,包括标准库文件编译之后的.o目标文件;
−STARTUP SECTION(启动结构体信息)
启动结构体,用于startup过程完成对RAM的初始化;
−SECTION-ALLOCATION SECTION(区分配)
系统默认段和用户自定义段分配和存储器分区映射统计结果,详细列出了每个段的段名(Section Name),所占的存储器大小(Size),属性(Type, R--只读,R/W--可读可写),在存储器中存储起始(From)和结束地址(To)和分区(Segment);
从.stack段的分配信息,我们可以获得正常stack的地址空间,以此在调试时可以通过查看SP寄存器判断是否堆栈溢出或越界
在SECTION-ALLOCATION SECTION的最后是所有段所占RAM和Flash大小的统计结果:其中READ_ONLY(R) 为Flash的大小,而 READ_WRITE(R/W)为RAM大小:
如果用户为了实现自定义RAM初始化,在工程的prm链接文件中,将某段RAM定义为NO_INIT属性(不计入.bss段和.common段,在工程的启动结构体_startupData中也不包含该段的信息,startup过程中不会自动对该属性存储器进行初始化),则计算占用RAM大小时还需要加上相应的大小;
−VECTOR-ALLOCATION SECTION(中断向量分配)
复位向量地址以及具体的ISR函数名以及ISR函数地址信息
−OBJECT-ALLOCATION SECTION(目标文件段分配)
详细列举工程中每一个.s和.c文件编译后的.o目标文件里的函数(PROCEDURES)和变量(VARIABLES)的大小(hSize/dSize)和调用次数(Ref)以及所在段(Section)。
−MODULE STATISTIC(目标文件编译结果统计)
详细列出了工程中每一个被选择编译的.s和.c文件编译后的.o目标文件名字(Name),所占RAM(数据Data)和Flash(代码Code和常数Const)的大小。
−SECTION USE IN OBJECT-ALLOCATION SECTION(目标使用区列表)
详细列出每个段中的变量和函数名。
−OBJECT LIST SORTED BY ADDRESS(寄存器/全局变量/函数储存地址清单)
列举具体每一个寄存器、函数和全局变量的名字,存储地址(Addr),大小(hSize--十六进制大小/dSize--十进制大小,单位为字节),被调用次数(Ref),以及所在的段(Section);
−UNUSED-OBJECTS SECTION(未使用函数清单)
列出每一个目标函数中未使用的函数和全局变量;
−COPYDOWN SECTION(内存初始化copy down地址及大小)
RAM初始化是全局变量有初始化值的拷贝信息;
−OBJECT-DEPENDENCIES SECTION (函数调用描述)
以文本方式描述的应用工程中函数间的相互调用层级和关系;
−DEPENDENCY TREE(函数调用和依赖关系树)
以树状图方式直观描述的应用工程中函数间的相互调用层级和关系;
−STATISTIC SECTION(统计段)
统计最后工程编译链接结果需要下载到Flash中的数据+代码大小和所占Flash扇区(sector)的数量(下载该结果需要擦除的Flash扇区数量)统计结果。该工程编译结果下载时总共需要擦除14个Flash扇区,下载37960字节。