[Cortex-M3]-2-map文件解析

news2024/9/20 20:40:58

目录

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/64706.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

15年磨一剑,亚马逊云科技数据产品掌门人 Swami 揭秘云原生数据战略的三大关键要素

2022亚马逊云科技 re:Invent 全球大会正在拉斯维加斯如火如荼进行中,亚马逊云科技数据与机器学习副总裁 Swami Sivasubramanian 博士发表了“数据与机器学习如何助力企业构建端到端的数据战略”的主题演讲来开启第三天的日程。 Swami 博士重点介绍了亚马逊云科技在…

玉米脱粒机设计全套

目 录 摘要 I Abstract II 1引言 1 1.1 课题的来源与研究的目的和意义 1 1.2 本课题研究的内容 3 2玉米脱粒机总体结构的设计 5 2.1 玉米脱粒机工作方式的选择 7 2.2 玉米脱粒机的结构原理 10 2.3 机械传动部分的设计计算 11 2.3.1电机的选型计算 12 2.3.2 V带传动的设计计算 1…

C语言:文件操作(2)

文件的打开和关闭 文件在读写之前应该先打开文件,在使用结束之后应该关闭文件。 在编写程序的时候,在打开文件的同时,都会返回一个FILE*的指针变量指向该文件,也相当于建立了指针和文件的关系。 ANSIC规定使用fopen函数来打开文…

(十五) 共享模型之工具【线程池】

一、自定义线程池 1. 简易线程池 Slf4j(topic "c.TestPool") public class TestPool {public static void main(String[] args) {ThreadPool threadPool new ThreadPool(2,1000, TimeUnit.MILLISECONDS, 10);for (int i 0; i < 5; i) {int j i;threadPool.exe…

博球一看,记录疯狂!我与世界杯的那些二三事

文章目录 &#x1f525;关于世界杯 &#x1f525;关于2022卡塔尔世界杯 &#x1f525;我与足球 &#x1f525;我与世界杯 ⚽分享一颗足球 ⚽实现效果 &#x1f525;关于世界杯 大力神杯 国际足联世界杯&#xff08;FIFA World Cup&#xff09;&#xff0c;简称“世界杯”…

Vue中的数据代理与数据劫持

数据代理 数据代理字面上是通过一个对象代理对另一个对象属性的操作在vue中的数据代理&#xff0c;实际上是通过vm上的属性代理对_data中属性的操作 数据劫持 数据劫持也可称作数据代理&#xff0c;字面上是劫持到某个属性的变化&#xff0c;去做其他的操作在vue中的数据劫…

练习:查询学生新学期选课(python之str、dict、list试炼)

查询学生新学期选课(python之str、dict、list试炼)&#xff0c;数据用字典、列表存储。考验字符串的各种转换&#xff0c;字典、列表的读写。 (本文获得CSDN质量评分【88】)【学习的细节是欢悦的历程】Python 官网&#xff1a;https://www.python.org/ Free&#xff1a;大咖免…

【Git 教程系列第 26 篇】Mac 升级系统到 Ventura 后,Git 公钥报 Permission denied 错误问题的解决方案

这是【Git 教程系列第 26 篇】&#xff0c;如果觉得有用的话&#xff0c;欢迎关注专栏。 注&#xff1a; 如果你是因为升级系统到 Ventura 后遇到的这个问题&#xff0c;可以直接看第三步的解决方案&#xff0c;前两步是我自己的写作习惯&#xff0c;只是记录一下这个过程&…

Qt OpenGL 图形字体的纹理映射

这次教程中&#xff0c;我们将在第14课的基础上创建带有纹理的字体&#xff0c;它真的很简单。也许你想知道如何才能给字体赋予纹理贴图&#xff1f;我们可以使用自动纹理坐标生成器&#xff0c;它会自动为字体上的每一个多边形生成纹理坐标。 这次课中我们还将使用Wingdings字…

BNext

又搬来了大神器啊 来自德国HassoPlattner计算机系统工程研究院的NianhuiGuo和HaojinYang等研究者提出了BNext模型&#xff0c;成为第一个在ImageNet数据集上top1分类准确率突破80%的BNN。 两年前&#xff0c;依靠早期 BNN 工作 XNOR-Net 起家的 XNOR.AI 被苹果公司收购&#…

redis基础5——redis的频道订阅和模式频道、redis主从复制、哨兵集群

文章目录一、发布订阅1.1 发布订阅过程1.2 发布订阅类型1.2.1 频道的发布订阅1.2.1.1 订阅频道* 实现原理1.2.1.2 发送消息* 实现原理1.2.1.3 退订频道* 实现原理1.2.2 模式的发布订阅1.2.2.1 订阅模式频道* 实现原理1.2.2.2 查询订阅与发布系统状态1.2.2.3 发送消息* 实现原理…

【c++基础】第三章 宏观部分:面向对象之类的层次结构与相互关系

第三章 宏观部分&#xff1a;面向对象之类的层次结构与相互关系关系has_a关系use_a关系&#xff08;友元关系&#xff09;is_a关系&#xff08;继承关系&#xff09;单继承多继承菱形继承多态&#xff08;polymorphic&#xff09;虚函数多态底层机制&#xff1a;虚函数、虚函数…

spring导入第三方资源

一、第三方资源配置管理 说明&#xff1a;以管理DataSource连接池对象为例讲解第三方资源配置管理 1 管理DataSource连接池对象 问题导入 配置数据库连接参数时&#xff0c;注入驱动类名是用driverClassName还是driver&#xff1f; 1.1 管理Druid连接池【重点】 数据库准备…

Android挂载系统分区执行mount和remount

第一种&#xff0c;通过adb挂载&#xff0c;需要root权限&#xff1b; adb root //adb 获取root权限&#xff1b; adb remount /system //从新挂载system目录或者说分区 第二种&#xff1a;通过Android下的Linux命令挂载&#xff0c;需要root权限&#xff1b; adb shell //…

【第八章 索引,索引结构,B-Tree,B+Tree,Hash,索引分类,聚集索引二级索引,索引语法】

第八章 索引&#xff0c;索引结构&#xff0c;B-Tree&#xff0c;BTree&#xff0c;Hash&#xff0c;索引分类&#xff0c;聚集索引&二级索引&#xff0c;索引语法 1.索引&#xff1a; ①索引&#xff08;index&#xff09;是帮助MySQL高效获取数据的数据结构(有序)。 ②特…

[附源码]Python计算机毕业设计Django社区人员信息管理系统设计与实现

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

Java学习笔记——StringBuilder

目录StringBuilder概述StringBuilder的构造方法StringBuilder常用的成员方法StringBuilder提高效率的原因String和StringBuilder之间的转换StringBuilder概述 StringBuilder是一个可变字符串类&#xff0c;我们可以把它看成一个容器。 作用&#xff1a;提高字符串的操作效率 …

HTML5期末作业:明星网站设计与实现——明星薛之谦介绍网页设计7个页面HTML+CSS+JavaScript

&#x1f389;精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…

一文叫你使用trace查看函数调用关系|分析Linux性能

抓取函数调用流程关系 抓取函数耗时 抓取代码片耗时 抓取函数里每个子函数时间戳 抓取事件信息 trace是内核自带的工具&#xff0c;相比于perf工具&#xff0c;trace只管抓trace数据并没有分析&#xff0c;perf在trace数据分析方面做出了很多成果。 但是我们现在就想看一下…

java生产者 消费者模式概念讲解

首先我们要了解生成者和消费者的基本概念 我们举个小例子 图里是一个奶箱 但里面并没有牛奶 我们想喝也没用 然后 送奶的工人送来了几瓶牛奶 然后工人会把牛奶放进奶箱 然后 把箱子给你锁上 然后你就可以去奶箱里拿奶来喝 这里 我们就可以比喻成 奶箱是一个存储数据的容器…