Keil的.map文件

您所在的位置:网站首页 keil5怎么导出工程文件 Keil的.map文件

Keil的.map文件

#Keil的.map文件| 来源: 网络整理| 查看: 265

keil中的Map文件 1、map文件在哪里2、map文件有什么作用3、map文件分析1、Section Cross References:模块、段(入口)交叉引用2、Removing Unused input sections from the image:移除未调用模块3、Image Symbol Table:映射符号表4、Memory Map of the image:内存(映射)分布5、Image component sizes:存储组成大小

1、map文件在哪里

打开配置页面的Listing选项卡,可以看到map文件在listing文件夹中,或者直接双击工程名就能直接打开map文件

可以看到组框中有很多勾选项,功能如下: 最上面一个“Liinker Listing”是生成Map文件的功能,选中才会生成map文件 by----inurlcn-Map文件分析

选项功能说明Memory Map内存映射各内存使用情况。Callgraph图像映射callgraph 这里没有作用,但是在工程目录下有个 *.htm文件。callgraph 表示的是函数调用的堆栈使用以及子函数调用信息Symbols符号Local Symbols和Global Symbols,各*.o文件里面的符号表Cross Reference交叉引用Section Cross References,包括.text 参考 其他各段。或者各段之间的相互参考。Size Info大小信息Object Name、Library Member Name、Library Name三大分类的各个.o文件(编译输出文件)所占用的Code类型、RO Data、RW Data、ZI Data、Debug类型所占用的空间Totals Info统计信息Object Totals和Library Totals占用的总的统计,以及此二者之和,以及Total RO Size 、Total RW Size 、Total ROM Size 。并且给出了ELF文件的大小和存放在ROM里面占用的大小Unused Section Info未调用模块信息Removing Unused input sections from the image.主要是显示未调用的Section(在ELF文件里面删除)的信息。可以当做是*.c文件编译了,但是没有被调用,所以被EFL文件里面删除了Veneers Info装饰信息这个暂时还没有信息,搜索了下Veneers的功能是:当linker发现有ARM指令和Thumb指令相互调用时(ARM-Thumb Interworking),就会插入一段代码(称之为veneer),从而实现程序状态的切换。

只有勾选了相应的选项Map文件中才会有对应的信息

2、map文件有什么作用

Map文件一种是通过编译得到的一个调试输出信息文件,通过Map文件可以知道函数的大小,入口地址,变量、参数的大小位置等一些重要信息。解决内存越界数据溢出等问题。

3、map文件分析

Map文件分为5大类

Map标号名功能Section Cross References模块、段(入口)交叉引用Removing Unused input sections from the image移除未调用模块Image Symbol Table映射符号表Memory Map of the image内存(映射)分布Image component sizes存储组成大小

文件中以====================================== 作为内容分隔

1、Section Cross References:模块、段(入口)交叉引用 配置中需要勾选:Cross Reference

具体内容如下: 在这里插入图片描述

比如第一条内容: “startup_stm32f10x_hd.o(RESET) refers to startup_stm32f10x_hd.o(STACK) for __initial_sp” 表示startup_stm32f10x_hd.o文件里的RESET段引用了startup_stm32f10x_hd.o文件里的 Stack段里的一个全局符号__initial_sp,可能是全局变量也可能是一个函数。

如下表示在main中引用了myadd中的MyAdd函数,该Map是之前使用自有库的那个程序的,main.o是main.c生成的过程文件。 在这里插入图片描述

2、Removing Unused input sections from the image:移除未调用模块 配置中需要勾选:Unused sections info

显示的是编译时从映像中被移除的未调用模块,以及它们的大小

在这里插入图片描述 在最后是总体统计内容 在这里插入图片描述 该移除模块的功能与优化等级有关,在选项卡c/c++的Language/Code Generation中设置 在这里插入图片描述

3、Image Symbol Table:映射符号表 配置中需要勾选:Symbol

该部分显示符号映射表,包括两个部分:Local Symbol和Global Symbol Local Symbol:局部符号 Global Symbol:全局符号

在这里插入图片描述 在这里插入图片描述 如上图,其中,几列分别为: Symbol Name(符号名称) Value(存储对应的地址) Ov Type(符号对应的类型) Size(存储大小) Object(Section)(段目标)

4、Memory Map of the image:内存(映射)分布 配置中需要勾选:Memory Map

在这里插入图片描述 在这里插入图片描述 1、Image Entry point : 0x08000131:指映射入口地址 2、Load Region LR_IROM1 (Base: 0x08000000, Size: 0x000011b4, Max: 0x00080000, ABSOLUTE):指加载区域位于LR_IROM1开始地址0x08000000,大小有0x000011b4,这块区域最大为0x00080000. 3、Execution Region ER_IROM1 (Base: 0x08000000, Size: 0x00001188, Max: 0x00080000, ABSOLUTE): 4、 Execution Region RW_IRAM1 (Base: 0x20000000, Size: 0x00000430, Max: 0x00010000, ABSOLUTE): 3、4就是配置选项卡中的Target页面的存储器选择中内容,如下: 在这里插入图片描述 这里主要有几个点,首先就是映像的入口地址0x8000131,然后可以知道加载域的起始地址,大小,最后知道执行域ROM和RAM的起始地址和大小,其中0x20000000是RAM起始地址,0x08000000是ROM起始地址,在这里也就是flash。一些被丢弃掉的数据,比如没有使用的变量被优化后是不会在表中显示出来的。

项目说明Base Addr存储地址Size存储大小Type类型Attr属性Section Name段名Object目标 5、Image component sizes:存储组成大小 配置中需要勾选:Size Info 或只勾选Totals只显示总体信息

在这里插入图片描述

Code:代码数据 RO-data:指只读数据,除了内联数据之外的常量数据 RW-data:指可读写、已初始化的变量数据 ZI-data:指未初始化的变量数据

在这里插入图片描述 上面显示的是几个区域的总体占用大小,其中: 1、Code、Ro-data:位于FLASH中; 2、RW-data、ZI-data:位于RAM中; 3、RW-data已初始化的数据会存储在Flash中,上电会从FLASH搬移至RAM; 4、Total ROM Size就是下载到flash中的程序大小

以上map文件是在stm32F103下生成的,但还有很多内容在网络上没有找到答案,先记录这么多。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3