STM32 map文件详解

文章目录

  • 1. 前言
  • 2. 生成 .map 文件
  • 3 .map 文件的组成
    • 3.1 Section Cross References - 各个源文件之间函数的调用关系
    • 3.2 Removing Unused input sections from the image - 移除未使用的模块
    • 3.3 Image Symbol Table - 映射符号表:描述各(程序段 / 数据)在存储器中的地址、类型、大小等
    • 3.4 Memory Map of the image - 内存(映射)分布
    • 3.5 Image component sizes - 存储组成大小:对模块进行汇总存储大小信息
  • 4 .相关文章


1. 前言

  • 想要优化代码就需要知道工程在存储器里(ROM / RAM)的分配情况,通过分析.map文件可以得到相关信息。

2. 生成 .map 文件

  • 可以根据自身需求选择要生成的信息,这里全选了,用作后面的举例说明
    在这里插入图片描述

3 .map 文件的组成

  • .map文件大致可分为5个部分:
    • Section Cross References
      模块、段(入口)交叉引用:各个源文件之间函数的调用关系
    • Removing Unused input sections from the image.
      移除未使用的模块
    • Image Symbol Table
      映射符号表:描述各(程序段 / 数据)在存储器中的地址、类型、大小等
    • Memory Map of the image
      内存(映射)分布
    • Image component sizes
      存储组成大小

3.1 Section Cross References - 各个源文件之间函数的调用关系

在这里插入图片描述

举例说明:main.o(.text) refers to system_stm32f10x.o(.text) for SystemInit

  • .o.c 源文件生成的目标文件模块;
  • main.c的(.text代码段)调用了system_stm32f10x.c中的SystemInit函数。

3.2 Removing Unused input sections from the image - 移除未使用的模块

在这里插入图片描述

3.3 Image Symbol Table - 映射符号表:描述各(程序段 / 数据)在存储器中的地址、类型、大小等

在这里插入图片描述

  • 这一项很重要,可以看到具体到某段代码/某个数据的大小,比如定义的数组大小,在这里可以选择出一些没用到的、可以优化删减的代码段和定义的变量、数组,对代码进行“瘦身”,降低内存的负担,也可以适当增加分配的内存大小,避免内存溢出越界问题。

  • Symbols 分两类;

    • Local Symbols :用Static声明的变量和函数的地址和大小。
    • Global Symbols :非Static声明的全局变量和函数的地址和大小。
  • Value :存储对应的地址
    • 0x0800xxxx 指存储在FLASH里面的代码、变量等。
    • 0x2000xxxx 指存储在内存RAM中的变量Data等。

3.4 Memory Map of the image - 内存(映射)分布

在这里插入图片描述

  • Load Region 加载区域
    • LR_IROM1:指加载区域位于LR_IROM1开始地址0x08000000,大小有0x00002ec0,这块区域最大为0x00003000.
  • Execution Region 执行区域
    • ER_IROM10x0800xxxx 指存储在FLASH里面的代码、变量等。
    • RW_IRAM10x2000xxxx 指存储在内存RAM中的变量Data等。
  • Exec base 执行起始地址
  • Load base 加载起始地址
  • Max 分配内存最大值
  • 起始地址和分配大小最大值与下图一致
    在这里插入图片描述

在这里插入图片描述

  • Exec Addr   执行地址
  • Load Addr   加载地址
  • Size     内存大小
  • Type     类型:Data / Code / Zero / PAD
    • (PAD:这个类型在map文件中放在这个位置,其实它不能算这里的类型。要翻译的话,只能说的“补充类型”。ARM处理器是32位的,如果定义一个8位或者16位变量就会剩余一部分,这里就是指的“补充”的那部分,会发现后面的其他几个选项都没有对应的值。)
  • Attr     属性:RO / RW
  • Section Name模块/段: .text、 i、 .data、 .bss、 HEAP、 STACK等
  • Object    模块(源文件)名称

3.5 Image component sizes - 存储组成大小:对模块进行汇总存储大小信息

在这里插入图片描述

  • Code :代码占用的空间大小
  • RO Data :Read Only,是只读常量的大小,如const型
  • RW Data :Read / Write,是已初始化(但初始化值不为零)的可读写变量。
  • ZI Data :Zero Initialize,是未初始化 / 初始化值为0 的可读写变量。
  • Object Name模块(源文件)名称

在这里插入图片描述

  • RAM 和 ROM 的使用情况
    • RAM = RW-data + ZI-data
    • ROM(Flash) = Code + RO-data + RW-data    

4 .相关文章

  • 《Keil编译后生成bin文件占用内部Flash的大小,RAM,ROM,Code,RO-data,RW-data,ZI-data》
  • 欢迎纠正,(づ ̄3 ̄)づ╭❤~
    如果有帮助到你,能点个赞吗?ღ( ´・ᴗ・` ) 比心

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Fastadmin】一个完整的轮播图功能示例

目录 1.效果展示: 列表 添加及标记页面同 2.建表: 3.时候crud一键生成并创建控制器 4.html页面 add.html edit.html index.php 5.js页面 6.小知识点 1.效果展示: 列表 添加及标记页面同 2.建表: 表名:fa_x…

Cocos Creator:必知必会

Cocos Creator:必知必会 事件事件属性坐标系的区别 持续更新中。。。 事件 开发版本:v3.8.1 事件属性 坐标系的区别 在Cocos游戏开发框架中,getLocation和getUILocation是两个用于获取节点位置的方法,但是它们之间存在一些重要…

21、命令执行

文章目录 一、命令执行概述1.1 基本定义1.2 原理1.3 两个条件1.4 命令执行漏洞产生的原因1.5 管道符号和通用命令符 二、远程命令执行2.1 远程命令执行相关函数2.2 远程命令执行漏洞的利用 三、系统命令执行3.1 相关函数3.2 系统命令执行漏洞利用 四、命令执行漏洞防御 一、命令…

【web安全】文件读取与下载漏洞

前言 菜某整理仅供学习,有误请赐教。 概念 个人理解:就是我们下载一个文件会传入一个参数,但是我们可以修改参数,让他下载其他的文件。因为是下载文件,所以我们可以看到文件里面的源码,内容。 文件读取…

docker学习(四、修改容器创建新的镜像推送到云上)

镜像是只读的,容器是可编辑的。Docker镜像是分层的,支持通过扩展镜像,创建新的镜像。 学到这里感觉docker跟git很想~~ 通过docker commit将修改的容器做成新的镜像 # 将容器做成新的镜像 docker commit -m"提交备注" -a"作…

Linux,Web网站服务(一)

1.准备工作 为了避免发生端口冲突,程序冲突等现象,建议卸载使用RPM方式安装的httpd [rootnode01 ~]# rpm -e http --nodeps 挂载光盘到/mnt目录 [rootnode01 ~]# mount /dev/cdrom /mnt Apache的配置及运行需要apr.pcre等软件包的支持,因此…

MYSQL提权

一、环境准备: 靶场机:windows7:192.168.200.34 攻击机:kali:192.168.200.14 二、原理: UDF(User-Defined Function)提权指的是通过在MySQL数据库中编写自定义函数(UD…

ALTERNET STUDIO 9.1 Crack

ALTERNET STUDIO 9.1 发布 宣布 AlterNET Studio 9.1 版本今天上线。AlterNET Studio 9.0 是一个中期更新,重点是改进我们所有的组件库。 以下是 AlterNET Studio 9.1 的发布亮点: Roslyn C# 和 Visual Basic 解析器现在支持代码修复/代码重构。 代码修复…

PSP - 计算蛋白质复合物链间接触的残基与面积

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/134884889 在蛋白质复合物中,通过链间距离,可以计算出在接触面的残基与接触面的面积,使用 BioPython 库 与 SA…

整数以及浮点数在内存中的存储

一.整数在内存当中的存储 数据在内存中是以十六进制补码的形式进行存储的。 原码表示法简单易懂,适用于乘法,但用原码表示的数进行加减运算比较复杂,当两数相加时,如果同号则数值相加,但是进行减法时要先比较绝对值的…

【面试专题】MySQL篇①

1.MySQL中,如何定位慢查询? ①介绍一下当时产生问题的场景(我们当时的一个接口测试的时候非常的慢,压测的结果大概5秒钟) ②我们系统中当时采用了运维工具( Skywalking ),可以监测出哪个接口…

学习pytorch18 pytorch完整的模型训练流程

pytorch完整的模型训练流程 1. 流程1. 整理训练数据 使用CIFAR10数据集2. 搭建网络结构3. 构建损失函数4. 使用优化器5. 训练模型6. 测试数据 计算模型预测正确率7. 保存模型 2. 代码1. model.py2. train.py 3. 结果tensorboard结果以下图片 颜色较浅的线是真实计算的值&#x…

idea使用maven的package打包时提示“找不到符号”或“找不到包”

介绍:由于我们的项目是多模块开发项目,在打包时有些模块内容更新导致其他模块在引用该模块时不能正确引入。 情况一:找不到符号 情况一:找不到包 错误代码部分展示: Failure to find com.xxx.xxxx:xxx:pom:0.5 in …

3D渲染和动画制作软件KeyShot Pro mac附加功能

KeyShot 11 mac是一款专业化实时3D渲染工具,使用它可以简化3d渲染和动画制作流程,并且提供最准确的材质及光线,渲染效果更加真实,KeyShot为您提供了使用 CPU 或 NVIDIA GPU 进行渲染的能力和选择,并能够线性扩展以获得…

HarmonyOS4.0从零开始的开发教程10管理组件状态

HarmonyOS(八)管理组件状态 概述 在应用中,界面通常都是动态的。如图1所示,在子目标列表中,当用户点击目标一,目标一会呈现展开状态,再次点击目标一,目标一呈现收起状态。界面会根…

Django的logging-日志模块的简单使用方法

扩展阅读: Python-Django的“日志功能-日志模块(logging模块)-日志输出”的功能详解 现在有下面的Python代码: # -*- coding: utf-8 -*-def log_out_test(content_out):print(content_out)content1 "i love you01" log_out_test(content1)现…

<Linux>(极简关键、省时省力)《Linux操作系统原理分析之Linux 设备管理》(29)

《Linux操作系统原理分析之Linux 设备管理》(29) 10 Linux 设备管理10.1 Linux 设备分类与识别10.1.1 Linux 设备的分类10.1.2 设备文件 10.2 设备驱动程序与设备注册10.2.1 设备驱动程序10.2.2 设备注册 10.3Linux 的 I/O 控制方式10.3.1 查…

Docker, Docker-compose部署Sonarqube

参考文档 镜像地址: https://hub.docker.com/_/sonarqube/tags Docker部署文档地址 Installing from Docker | SonarQube Docs Docker-compose文档部署地址: Installing from Docker | SonarQube Docs 部署镜像 2.1 docker部署 # 宿主机执行 $. vi /etc/sysctl.conf…

探索CSS:从入门到精通Web开发(二)

前言 当我们谈论网页设计和开发时,CSS(层叠样式表)无疑是其中的重要一环。作为HTML的伴侣,CSS赋予网页以丰富的样式和布局,使得网站看起来更加吸引人并且具备更好的可读性。本书将通过一系列深入浅出的方式&#xff0…

kafka学习笔记--安装部署、简单操作

本文内容来自尚硅谷B站公开教学视频,仅做个人总结、学习、复习使用,任何对此文章的引用,应当说明源出处为尚硅谷,不得用于商业用途。 如有侵权、联系速删 视频教程链接:【尚硅谷】Kafka3.x教程(从入门到调优…