[Cortex-M3]-2-map文件解析
创始人
2024-03-20 15:36:43
0

目录

1 几个问题

1.1 什么是map文件

1.2 如何查看编译出的程序和数据的信息

1.3 如何生成map文件

1.4 map文件里面有哪些信息

2 map文件信息详解

2.1 Section Cross References                                                           

2.2 Removing Unused input sections from the image                     

2.3 Image Symbol Table                                                                       

2.4 Memory Map of the image                                                             

2.4.1 几个重点部分                                                                                                      

2.4.1 详细内容标题                                                                                                       

2.5 Image component sizes                                                             


1 几个问题

1.1 什么是map文件

        map文件就是通过编译器编译之后,程序、数据及IO空间的一种映射文件。

        一般情况下,遇到内存越界,或者是溢出等情况,可以先进行map文件的分析。因为从map文件,可以了解到一些函数的大小,以及其入口等等重要信息。

1.2 如何查看编译出的程序和数据的信息

        以上的编译log即能表现出编译出的程序和数据的信息,其实这些数据都是一些单模块的汇总,在map文件里面都有详细描述。

1.3 如何生成map文件

        需要对输出信息进行配置,接下来对工程进行百编译,即可生成map文件

主要包含配置:

        Memory Map:内存映射

        Callgraph:图像映射

        Symbols:符号

        Cross Reference:交叉引用

        Size Info:大小信息

        Totals Info:统计信息

        Unused Section Info:未调用模块信息

        Veneers Info:装饰信息

具体操作见下图:Project -> Options for Target -> Listing

1.4 map文件里面有哪些信息

        从以上输出配置能得出来map文件大概包含了哪些信息。map文件将其中的信息分为如下五大类:

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

2 map文件信息详解

2.1 Section Cross References                                                           

模块、段(入口)交叉引用:指的是各个源文件生成的模块、段(定义的入口)之间相互引用的关系。

        bsp.o(.text) refers to led.o(.text) for LED_Config

解析:bsp模块(bsp.o)中引用(或者说调用)了led模块(led.o)中的LED_Config函数。

2.2 Removing Unused input sections from the image                     

移除未调用模块:被调用的模块(或者说函数)会在map文件中生成一个列表。

        a:Removing system_stm32f10x.o(.constdata), (20 bytes).

        b: unused section(s) (total 8927 bytes) removed from the image.

解析:

        a:system_stm32f10x文件未被调用,代码大小为20字节;

        b:总共有8个没有调用的模块,没有被调用的大小为8927字节;

2.3 Image Symbol Table                                                                       

映射符号表:各个段所存储对应地址的表。

其中对于各信息标题的说明如下:

几个要点:

1 大家会发现有0x0800xxxx、0x2000xxxx这样的地址。

        0x0800xxxx指存储在FLASH里面的代码、变量等。

        0x2000xxxx指存储在内存RAM中的变量Data等

2 符号类型

        大概有几种:Number、Section、Thumb Code、Data等;

        全局、静态变量等位于0x2000xxxx的内存RAM中。

2.4 Memory Map of the image                                                             

内存(映射)分布,这块内容较多,将会分为几个部分进行说明。

2.4.1 几个重点部分                                                                                                      

  1. Image Entry point : 0x08000131 ==>> 映射入口地址
  2. Load Region LR_IROM1 (Base: 0x08000000, Size: 0x00000c14, Max: 0x00020000, ABSOLUTE)             ==>>        指加载区域位于LR_IROM1开始地址0x08000000,大小有0x00000c14,这块区域最大为0x00020000;
  3. Execution Region RW_IRAM1 (Base: 0x20000000, Size: 0x00000278, Max: 0x00005000, ABSOLUTE)             ==>>        指执行域位于RW_IRAM1  开始地址0x20000000,大小有0x00000278,这块区域的大小为0x00005000;

2.4.1 详细内容标题                                                                                                       

  1. Base Addr:存储地址 == >> 0x0800xxxxFLASH地址和0x2000xxxx内存RAM地址。
  2. Size:存储大小  
  3. Type:类型 
    1. Data:数据类型;
    2. Code:代码类型;
    3. Zero:未初始化变量类型;
    4. PAD:补充类型;ARM处理器是32位的,如果定义一个8位或者16位变量就会剩余一部分,这里就是指的“补充”的那部分
  4. Attr:属性
    1. RO:存储与ROM中的段
    2. RW:存储与RAM中的段
  5. Section Name:段名 ==>> 入口分类名,RESET、.ARM、 .text、 i、 .data、 .bss、 HEAP、 STACK等;
  6. Object:目标

2.5 Image component sizes                                                             

存储组成大小:主要就是对模块进行汇总存储大小信息。

回到文章开头截图的编译结果:

解析

  1. Code:指代码的大小;
  2. Ro-data:指除了内联数据(inline data)之外的常量数据;
  3. RW-data:指可读写(RW)、已初始化的变量数据;
  4. ZI-data:指未初始化(ZI)的变量数据;
  5. Code、Ro-data:位于FLASH中;
  6. RW-data、ZI-data:位于RAM中;
  7. RW-data已初始化的数据会存储在Flash中,上电会从FLASH搬移至RAM。
  8. 关系如下:

    RO  Size = Code + RO Data
    RW  Size = RW Data + ZI Data
    ROM Size = Code + RO Data + RW Data

相关内容

热门资讯

汽车油箱结构是什么(汽车油箱结... 本篇文章极速百科给大家谈谈汽车油箱结构是什么,以及汽车油箱结构原理图解对应的知识点,希望对各位有所帮...
美国2年期国债收益率上涨15个... 原标题:美国2年期国债收益率上涨15个基点 美国2年期国债收益率上涨15个基...
嵌入式 ADC使用手册完整版 ... 嵌入式 ADC使用手册完整版 (188977万字)💜&#...
重大消息战皇大厅开挂是真的吗... 您好:战皇大厅这款游戏可以开挂,确实是有挂的,需要了解加客服微信【8435338】很多玩家在这款游戏...
盘点十款牵手跑胡子为什么一直... 您好:牵手跑胡子这款游戏可以开挂,确实是有挂的,需要了解加客服微信【8435338】很多玩家在这款游...
senator香烟多少一盒(s... 今天给各位分享senator香烟多少一盒的知识,其中也会对sevebstars香烟进行解释,如果能碰...
终于懂了新荣耀斗牛真的有挂吗... 您好:新荣耀斗牛这款游戏可以开挂,确实是有挂的,需要了解加客服微信8435338】很多玩家在这款游戏...
盘点十款明星麻将到底有没有挂... 您好:明星麻将这款游戏可以开挂,确实是有挂的,需要了解加客服微信【5848499】很多玩家在这款游戏...
总结文章“新道游棋牌有透视挂吗... 您好:新道游棋牌这款游戏可以开挂,确实是有挂的,需要了解加客服微信【7682267】很多玩家在这款游...
终于懂了手机麻将到底有没有挂... 您好:手机麻将这款游戏可以开挂,确实是有挂的,需要了解加客服微信【8435338】很多玩家在这款游戏...