历史上的今天
今天是:2025年08月16日(星期六)
2021年08月16日 | 飞思卡尔S12(X)系列单片机之map文件详解
2021-08-16 来源:eefocus
本文介绍的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字节。
史海拾趣
|
多地出租车计价器集体故障 日期成2012年 http://news.163.com/10/0102/02/5S07U1DH0001124J.html 核心提示:1月1日,沈阳、锦州数千辆出租车的计价器集体故障,屏幕出现“归零”问题,打印出来的发票日期大多为2012年1月1日,而且无论行驶多远价 ...… 查看全部问答> |
|
我自己谢了一个bootloader 已经拷贝NK至sdram 我想是否需要可以直接跳到sdram-NK的地址直接,启动还是需要....比如参数传递等等 thank u so much.… 查看全部问答> |
|
运行优龙bootloader选择boot wince后bootloader加载wince结束后wince开始运行,但是到给flash挂载文件系统得时候就出错,直接崩溃了,原因是flash改成了1G的flash,BSP中flash驱动是支持1G得,挂载文件系统失败原因估计是参数配置出错(实在惭愧我 ...… 查看全部问答> |
|
2005年,在德国,我乘坐一辆德国司机开的大客车,车上装了GPS导航,有导航地图,也有一个领路人。在一段高速上,领路人说不对,不该在这个高速公路口出去,应该是下一个,司机坚持,固执的依靠导航仪,最后还是走错路了,原因是两个地方、同一个地 ...… 查看全部问答> |
|
TI LM3S系列在TFT屏上显示波形或者柱状图的例程哪位大哥有? 求助: TI LM3S系列在TFT屏上显示波形或者柱状图的例程哪位大哥有? 听说TI有的系列中有波形显示的程序,但我用的9B92中没有,哪位有这个例程的共享下,谢谢! 邮箱:zhangyao1213@126.com… 查看全部问答> |
|
一,什么是BabyLinux BabyLinux不是一个完整的发行版,他是利用原有的一套完整的linux系统的内核原代码和编译工具,利用busybox内建的强大功能,在一张软盘上做的一个很小的linux系统.他具备一个linux系统的基本特征,支持linux系统最常用的一百多 ...… 查看全部问答> |




