map文件解析

news2024/10/7 10:23:25

Map文件内容分为以下五段:

1)Section Cross References:模块、段(入口)交叉引用;(ASR编译生成的map文件没有输出该段信息)

2)Removing Unused input sections from the image:移除未使用的模块;

3)Image Symbol Table:映射符号表;

4)Memory Map of the image:内存(映射)分布;

5)Image component sizes:存储组成大小。

一些相关概念:

段(section) :描述映像文件的代码和数据块。

RO:Read-Only的缩写,包括RO-data(只读数据)和RO-code(代码)。

RW:Read-Write的缩写,主要是RW-data,RW-data由程序初始化初始值。 

ZI:Zero-initialized的缩写,主要是ZI-data,由编译器初始化为0。 

.text:与RO-code同义。

.constdata:与RO-data同义。 

.bss: 与ZI-data同义。

.data:与RW-data同义

2.1Section Cross References

这里以stm32工程生成的map文件为例,如下图:

main模块(main.o) 中的main函数调用了sys.o里的Stm32_Clock_Init函数。从该段可以查阅各.o的关联。

2.2 Removing Unused input sections from the image

这里以3602项目的map文件为例:

从上面的信息可以得知总共有20797段未被调用,未被调用的大小为1104506(1M左右)字节。

2.3 Image Symbol Table

映射符号表,指明各个段所存储对应地址的表,分为两类Symbol,Local Symbols和Global Symbols。

Local Symbols:用static声明的全局变量,C文件中用static声明的函数,汇编文件中的标号地址(作用域限本文件)

Global Symbols:全局变量,C文件中函数,汇编文件中的标号地址(作用域全工程)

字段内容组成如下:

1)Symbol Name:符号名称

2)Value:存储对应的地址;

在stm32上会看到有0x0800xxxx、0x2000xxxx这样的地址。

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

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

在ASR项目上FLASH和RAM的基地址的定义为

QSPI_BASE_ADDR        0x80040000

PSRAM_BASE_ADDR      0x7E000000

3)Ov Type:符号对应的类型

符号类型大概有几种:Number、Section、Thumb Code、Data等;

4)Size:存储大小

5)Object(Section):段目标

这里一般指所在模块(所在源文件)。

以3602项目的map文件为例:

2.4 Memory Map of the image

内存映射分布

以3602项目的map文件为例:

Image Entry point : 0x8001a000:指映射入口地址。程序执行的入口点。

Load Region DDR_RO (Base: 0x8001a000, Size: 0x00ec9bf8, Max: 0x02000000, ABSOLUTE):

指加载区域位于DDR_RO开始地址0x8001a000,大小有0x00ec9bf8,这块区域最大为0x02000000.

这里以STM32单片机为例加载域就是程序在Flash中的实际存储,而运行域是芯片上电后的运行状态,因为MCU没上电时RAM中没有数据,所以此时所有的东西(包括代码、变量、初始值等)都是存放在flash中的,当上电后又要把变量等复制到RAM中才能正常运行。

通过上面的框图可以看出,RW区也是要存储到ROM/Flash里面的。在执行映像之前,必须将已初始化的RW数据从ROM中复制到RAM中的执行地址并创建ZI Section(初始值为0的变量区),这样才算完成了MCU运行的准备。

2.5 Image component sizes

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

以3602项目的map文件为例:

Code (inc. Data) :显示代码占用了多少字节。 在此映像中,有8477372字节的代码, 其中包括1034396字节的内联数据 (inc. data),包含文字常量池和短字符串,一般被忽略。按照理解这一部分应该是属于一些临时生成的碎片内容。

RO Data :只读段 一般常量const、“字符串”等;和代码段一样是存储在flash中;不加载到ram。

RW Data :已初始化的全局变量;这个是我们程序运行是要搬运到ram的段,且在程序开始执行时就进行rw段的搬运工作ZI Data :显示零初始化的数据占用了多少字节。

ZI Data :zi-data段是没有初始化,,不占flash存储,只需要在ram中开辟出空间,包含堆栈内容,局部变量是在栈中。

Debug :显示调试数据占用了多少字节,例如,调试输入节以及符号和字符串。

Grand Totals :显示映像的真实大小。

ELF Image Totals :ELF(Executable and Linking Format)可执行链接格式映像文件大小。

ROM Totals:显示包含映像所需的 ROM的最小大小。这不包括 ZI数据和存储在ROM 中的调试信息。

由上可知Total ROM Size (Code + RO Data + RW Data)也就是ROM flash 的大小。为什么Rom中还要存RW,因为掉电后RAM中所有数据都丢失了,每次上电RAM中的数据是被重新赋值的,每次这些固定的值就是存储在Rom中的,Total RAM Size(RW Data + ZI Data)。

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

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

相关文章

Linux CentOS7 fdisk

Centos7的磁盘管理包括添加磁盘、查看磁盘信息、磁盘分区、格式化、挂载和卸载,逻辑卷管理等。 对分区后的磁盘格式化比较简单,执行mkfs命令即可;而挂载可以使用的分区执行mount命令很方便地完成。本文仅讨论新添加磁盘的分区操作。 一、添…

ArkTS-自定义弹窗

自定义弹窗 通过CustomDialogController类显示自定义弹窗。使用弹窗组件时,可优先考虑自定义弹窗,便于自定义弹窗的样式与内容。 CustomDialogController仅在作为CustomDialog和Component struct的成员变量,且在Component struct内部定义时赋…

【Linux】OpenSSH 命令注入漏洞(CVE-2020-15778)(iptables屏蔽22端口方式)

背景 漏洞名称:OpenSSH 命令注入漏洞(CVE-2020-15778) 详细描述:OpenSSH(OpenBSD Secure Shell)是OpenBSD计划组的一套用于安全访问远程计算机的连接工具。该工具是SSH协议的开源实现,支持对所有的传输进行加密&#…

常见的类 nn.Conv2d,nn.BatchNorm2D,nn.AdaptiveAvgPool2d

nn.Conv2d理论部分代码部分PaddlePaddle 版torch 版分析 nn.BatchNorm2D理论部分代码部分PaddlePaddle 版Torch 版分析PaddlePaddle 版Torch 版 nn.AdaptiveAvgPool2d理论部分代码部分PaddlePaddle 版分析Torch 版 可以到适配的飞桨公开项目更好的理解:练习 PyTorch…

ssh-keygen(centos)

A—免密登陆—>B (1)A 机器,通过命令”ssh-keygen -t rsa“, 生成id_rsa,id_rsa.pub authorized_keys:存放远程免密登录的公钥,主要通过这个文件记录多台机器的公钥 id_rsa : 生成的私钥文件 id_rsa.pub : 生成的公钥文件 know_hosts : 已知的主机公钥…

【UE】剔除环境颜色

效果 步骤 1. 新建一个空白项目,勾选光线追踪选项 2. 新建一个Basic关卡 3. 添加初学者内容包到内容浏览器 4. 新建一个材质“M_Red” 打开“M_Red”,设置基础颜色为红色 在场景中随便布置一些物品,然后给其中的一个球体设置材质为“M_Red”…

关于MongoDB

MongoDB介绍 MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,因此可以存储比较复杂的数据类型。Mongo最大的特点是它支持的查询语言非常强大,其…

滤波器、卷积核与内核的关系

上来先总结举例子解释 上来先总结 内核(kernel)是一个二维矩阵,长*宽;滤波器(filter)也叫卷积核,过滤器。是一个三维立方体,长 宽 深度, 其中深度便是由多少张内核构成…

el-row错位问题解决

<el-row type"flex" style"flex-wrap:wrap">

有时出厂重置BIOS是解决电脑问题和保持其最佳性能的好办法,主要有两种方法

​BIOS是计算机开机时启动的第一个程序&#xff0c;它有助于执行一些基本的计算机操作&#xff0c;并管理计算机和安装在计算机上的操作系统之间的命令。与任何其他程序一样&#xff0c;如果在启动计算机时遇到问题或在计算机中添加了新硬件&#xff0c;则可能需要将BIOS重置为…

热点热搜排行榜网站源码/网址导航源码/影视排行榜HTML源码

源码简介&#xff1a; 热点热搜排行榜网站源码/网址导航网站源码/影视排行榜HTML源码/ 精美网址导航及热点热搜影视排行榜源码&#xff0c;可以让人全方位的浏览体验&#xff0c; 非常好看的网址导航&#xff0c;以及热点热搜影视等排行榜源码。它是仿某汁导航网&#xff0c;…

医院手术麻醉信息系统全套商业源码,自主版权,支持二次开发

医院手术麻醉信息系统全套商业源码&#xff0c;自主版权&#xff0c;支持二次开发 手术麻醉信息系统是HIS产品的中的一个组成部分&#xff0c;主要应用于医院的麻醉科&#xff0c;属于电子病历类产品。医院麻醉监护的功能覆盖整个手术与麻醉的全过程&#xff0c;包括手术申请与…

Spring第三课,Lombok工具包下载,对应图书管理系统列表和登录界面的后端代码,分层思想

目录 一、Lombok工具包下载 二、前后端互联的图书管理系统 规范 三、分层思想 三层架构&#xff1a; 1.表现层 2.业务逻辑层 3.数据层 一、Lombok工具包下载 这个工具包是为了做什么呢&#xff1f; 他是为了不去反复的设置setting and getting 而去产生的工具包 ⚠️工具…

我若拿出这个,阁下该如何应对,整理常用的Python库!

Requests Requests是一个常用的Python第三方库&#xff0c;用于发送HTTP请求。它提供了简洁而直观的API&#xff0c;使得发送HTTP请求变得非常方便。 使用Requests库可以实现以下功能&#xff1a; 发送GET请求&#xff1a;使用requests.get(url, paramsNone, **kwargs)方法发…

vue2全局混入正确使用场景和错误场景示例

全局混入在 Vue.js 中的使用场景需要谨慎考虑&#xff0c;因为它会影响所有组件。以下是一些正确和错误的使用场景的例子&#xff1a; 正确的使用场景&#xff1a; 全局工具方法&#xff1a; // 正确的使用场景 Vue.mixin({methods: {$formatDate: function (date) {// 格式化…

K8s 多租户方案的挑战与价值

在当今企业环境中&#xff0c;随着业务的快速增长和多样化&#xff0c;服务器和云资源的管理会越来越让人头疼。K8s 虽然很强大&#xff0c;但在处理多个部门或团队的业务部署需求时&#xff0c;如果缺乏有效的多租户支持&#xff0c;在效率和资源管理方面都会不尽如人意。 本…

<Linux>(极简关键、省时省力)《Linux操作系统原理分析之存储管理(1)》(14)

[TOC](《Linux操作系统原理分析之存储管理》&#xff08;14&#xff09; 5 存储管理5.1 存储管理的目的和功能5.1.1 存储管理目的&#xff1a;5.1.2 存储管理的主要功能5.1.3 存储管理主要是对用户区进行管理 5.2 地址重定位5.2.1 作业的地址空间5.2.2&#xff0e;地址映射&…

企业微信小程序通知消息

使用企业微信发送应用消息中的小程序通知消息&#xff08;只允许绑定了小程序的应用发送&#xff09;。 目录 请求方式 请求地址 发送通知 参数说明 请求实例 返回 返回示例 返回参数说明 实现效果 总结 请求方式 POST 请求地址 https://qyapi.weixin.qq.com/cgi-b…

【EasyExcel实践】万能导出,一个接口导出多张表以及任意字段(可指定字段顺序)

文章目录 前言正文一、POM依赖二、核心Java文件2.1 自定义表头注解 ExcelColumnTitle2.2 自定义标题头的映射接口2.3 自定义有序map存储表内数据2.4 表头工厂2.5 表flag和表头映射枚举2.6 测试用的实体2.6.1 NameAndFactoryDemo2.6.2 StudentDemo 2.7 启动类2.8 测试控制器 三、…

关于UART、RS232、RS485的区别与理解

1、UART规定了数据的格式&#xff0c;但没有规定电气的特性&#xff0c;多少伏为高电平&#xff0c;多少伏为低电平。通常我们使用单片机与电脑通信时需要一个USB转TTL模块。 2、UART存在抗干扰能力差、通信距离短&#xff08;一般不超过2~3m&#xff09;,由此产生基于串口的R…