map文件解析

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.mzph.cn/news/184948.shtml

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

相关文章

私域流量路径:打造个性化用户转化与互动体验。

以当前业务状态为出发点,以期望的运营状态为目标,私域团队需要精心规划路径以弥补起点与终点间的差距。在此过程中,我们所拥有的资源和支持有限,因此路径规划的合理性至关重要。 以下是私域流量的运营路径规划,以裂变…

App测试中iOS和Android的差异

1、系统版本: iOS和Android系统版本的更新速度、使用人数比例以及功能的不同都可能导致应用程序在不同操作系统版本上的表现和兼容性存在区别。 例如,在iOS平台上,很多用户会更快地升级到最新版本的iOS系统,而在Android平台上&a…

智慧灯杆网关:引领城市智慧照明的未来

智慧灯杆网关,作为城市智慧照明系统的核心组件,正逐渐成为各大城市发展的关键所在。它的出现使得城市照明管理更加智能、高效,为未来城市的可持续发展奠定了坚实的基础。 智慧灯杆网关是一种集网络通信、数据处理、远程控制等功能于一体的设备…

python多线程并行

参考: https://blog.csdn.net/shinuone/article/details/132047079 https://www.python100.com/html/AN8P36F24K1W.html import concurrent.futures# 定义任务1 def task1():for i in range(5):print("Task 1 - Step", i 1)# 定义任务2 def task2():for…

TypeError: Cannot read properties of null (reading ‘shapeFlag‘)

vue3 开发过程遇到这样一个报错 TypeError: Cannot read properties of null (reading shapeFlag)最后发现是ref定义的变量,在访问时没有使用.valuereactive 变量初始化是数组,如果使用字符串赋值时也会报这个错。

一款适用于船载、化工园区、工厂的防水LoRa网关推荐

工业网关的实践应用场景非常广泛,比如:工业现场PLC、变频器、机器人等设备的远程维护;工程机械的远程维护和管理;车间设备与工艺系统的远程维护和管理;小区二次供水水泵的远程监测及控制;油气田和油井等现场…

Wifi adb 操作步骤

1.连接usb 到主机 手机开起热点,电脑和车机连接手机,或者电脑开热点,车机连接电脑,车机和电脑连接同一个网络 因为需要先使用usb,后面切换到wifi usb 2.查看车机ip地址,和电脑ip地址 电脑win键r 输入cmd…

Elk+Filebeat+Kafka实现日志收集

ElkFilebeatKafka实现日志收集(本机nginx) 部署Zookeeper 1.实验组件 #准备3台服务器做Zookeeper集群 20.0.0.10 20.0.0.20 20.0.0.30 2.安装前准备 #关闭防火墙 systemctl stop firewalld systemctl disable firewalld setenforce 0#安装JDK yum install -y java-1.8.0-o…

springboot启动开启热部署

springboot启动开启热部署 手动方式 或者点idea上面的build->build project 自动方式 勾上Build project automatically 然后ctrl alt shift / 选择Registr 勾上就好了 新版idea可以在这里选 热部署范围设置 这是spring-boot-devtools起的作用,所以还…

VMware虚拟机安装和使用教程(附最新安装包+以ubuntu为例子讲解)

目录 一、VMware Workstation 17 Pro 简介 二、新功能与改进 三、安装教程 3.1、下载安装包 3.2、运行安装包 四、创建虚拟机 五、启动虚拟机 六、总结与展望 一、VMware Workstation 17 Pro 简介 VMware Workstation 17 Pro是VMware公司为专业用户打造的一款虚拟化软件…

在linux中进行文件的打包(打压缩)和解压

1.".tar " 格式(打包不会压缩) ".tar" 格式的打包和解打包都使用 tar 命令,区别只是选项不同。 ".tar" 格式打包命令: tar [选项] [-f 压缩包名] 源文件或目录 选项: ​ -c&#xff…

TCP_NODELAY与TCP通信效率

最近做tcp通信速度测试:主要流程如下所示: //client: while() { send data... recv data... //阻塞 }//server: while() { recv data... send data... } 当每次send数据量较小时,速度极慢!而send数据量较大时速度尚可。两者速度…

echarts x轴y轴添加单位

function evaluationDistributionBar(data,id) { //data.series[0].data [1,31,1,1]//data.series[1].data [1,1,1,1]if(!data || data.series.length 0) returnfor(let i in data.series){//给柱状图动态修改颜色if(data.series[i].name 男){data.series[i].itemStyle {c…

分享5款靠谱好用,无广告不流氓的好软件

​ 话不多说,直入正题,全都是靠谱好用,无广告不流氓的好软件,可以先点赞收藏,以后慢慢用。 1.动态壁纸软件——Lively Wallpaper ​ Lively Wallpaper是一款可以将视频、GIF、网页、游戏等内容作为桌面壁纸的软件&am…

Android Audio实战——音频焦点监听(十)

前面音频焦点申请时,在 MediaFocusControl 中有一个重要的函数 notifyExtFocusPolicyFocusRequest_syncAf(),其中的注释信息是 对外的焦点策略,其实就是对外通知焦点变化情况,由 APP 来处理焦点变化所带来的业务需求。 一、焦点变化监听 MediaFocusControl 源码位置:/f…

uniapp popup弹出窗详解以及相关属性

在Uni-app开发移动应用时,弹出窗是一种常见的交互组件,可以用于展示额外的信息、提示消息或用户操作。Uni-app中提供了popup组件来实现弹出窗功能,本文将详细介绍popup组件的相关属性和用法。 基本用法 在开始使用popup组件之前,…

local socket和socketpair

socketpair和local socket都是用于进程间通信的工具,但他们的使用场景和特性有所不同。 socketpair: socketpair主要用于同一进程的线程间进行双向通信,或者具有亲缘关系的进程间进行通信。例如,在主线程创建出新的线程,此时主线…

mysql 全文索引中的Stopwords

Full-Text Stopwords 是指在全文搜索时被索引系统默认忽略的一组单词。这些通常是最常见的单词,比如 "the"、"is"、"at" 等英语中的助词、介词、连接词等。它们通常不含有具体的搜索意义,因此在创建全文索引的时候会被排除…

XC1136 功率传输(PD) Sink控制器IC PD诱骗器芯片 输出可调 可支持多个

XC1136是一款功率传输(PD) Sink控制器IC。XC1136可以从符合Type-CPD协议的电源中请求最大或指定电压。输入电压范围:3V~28V支持USBType-C规范版本1.3支持USB PD2.0和PD3.0通讯协议,最多支持七个电源对象 该XC1136内置拉低电阻CC1和CC2引脚。当XC1136连接到T…

Java —— ArrayList与顺序表

目录 1. 线性表 2. 顺序表 接口的实现 3. ArrayList简介 3.1 ArrayList介绍 3.2 ArrayList的构造方法 4. ArrayList的扩容机制 5. ArrayList的常见操作 6. ArrayList的遍历 7. 例题 8. ArrayList的具体使用 8.1 简单的洗牌算法 8.2 杨辉三角 9. ArrayList的问题及思考 1. 线性表…