IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> Keil STM32中map使用文件说明 -> 正文阅读

[嵌入式]Keil STM32中map使用文件说明

map 文件说明

map 文件是由链接器生成的,它主要包含交叉链接信息,查看该文件可以了解工程中各种符号之间的引用以及整个工程的 Code、 RO-data、 RW-data 以及 ZI-data 的详细及汇总信息。在这里插入图片描述编译成功之后,双击工程名可以打开map文件。

如果是使用STM32cubemax生成的代码,默认情况下是无法双击打开的,需要更改Option设置下的listing目录设置,改到工程目录下编译生成的map文件处,一般在工程文件所在目录下,有一个和工程名字一样的文件夹,里边有很多.o .crf文件。
在这里插入图片描述

它的内容中主要包含了“节区的跨文件引用”、“删除无用节区”、“符号映像表”、“存储器映像索引”以及“映像组件大小”,各部分介绍如下:

1、节区的跨文件引用

在这里插入图片描述在option中的c/c++设置中选择 one ELF section per function 可以按节区查看。

在这里插入图片描述
节区的跨文件引用 (Section Cross References)在这部分中,详细列出了各个 *.o 文件之间的符号引用。由于 *.o 文件是由 asm 或 c/c++ 源文件编译后生成的,各个文件及文件内的节区间互相独立,链接器根据它们之间的互相引用链接起来

例如,开头部分说明的是 startup_stm32f40xx.o 文件中的“RESET”节区分为它使用的“__use_two_region_memory”符号引用了文件“(Special) to heapauxi.o(.text)”节区。

这些跨文件引用的符号其实就是源文件中的函数名、变量名。有时在构建工程的时候,编译器会输出“Undefined symbol xxx (referred from xxx.o)”这样的提示,该提示的
原因就是在链接过程中,某个文件无法在外部找到它引用的标号,因而产生链接错误。
在这里插入图片描述这个就表示在main函数中无法在外部找到CAN_Transmit0函数,也是无法引用。

2、删除无用节区

map 文件的第二部分是删除无用节区的说明 (Removing Unused input sections from the image.)
在这里插入图片描述
这部分列出了在链接过程它发现工程中未被引用的节区,这些未被引用的节区将会被删除 (指不加入到 *.axf 文件,不是指在 *.o 文件删除),这样可以防止这些无用数据占用程序空间。

3、符号映像表

在这里插入图片描述在这里插入图片描述列出了被引用的各个符号在存储器中的具体地址、占据的空间大小等信息。

可以看到堆空间的地址是0x20000898 、类型是节区、大小是512kb。栈空间是的地址是0x20000a98 、类型是节区、大小事1024kb。再者还可以看到flash中的数据或者是SRAM中的数据的位置。

4、存储器映像索引

本工程的存储器映像索引分为 ER_IROM1 及 RW_IRAM1 部分,它们分别对应 STM32 内部 FLASH及 SRAM 的空间。

在这里插入图片描述map 文件的第四部分是存储器映像索引 (Memory Map of the image)。

开头的时候可以看到存储的时候的ROM空间: Load Region LR_IROM1 (Base: 0x08000000, Size: 0x000049d8, Max: 0x00080000, ABSOLUTE)

程序运行的时候的ROM空间:Execution Region ER_IROM1 ( Load base: 0x08000000, Size: 0x0000499c, Max: 0x00080000, ABSOLUTE)

可以分析出来这个他们唯一不同的就是size尺寸大小。而我们知道程序在初始化的时候会将RW-data的数据先复制到SRAM中。所以这个两个的差值就是RW-data = 0x000049d8 - 0x0000499c = 0x3c = 60(字节)

在这里插入图片描述加载视图中式一些函数所占节区的位置和大小在这里插入图片描述其中PAD的补位对其指令,stm32是32位mcu,当程序不对齐的时候就需要PAD指令。

在这里插入图片描述

5、映像组件大小

map 文件的最后一部分是包含映像组件大小的信息 (Image component sizes)
在这里插入图片描述

这部分包含**各个使用到的 *.o 文件的空间汇总信息**、整个工程的空间汇总信息以及占用不同类型存储器的空间汇总信息,它们分类描述了具体占据的 Code、 RO-data、 RW-data 及 ZI-data 的大小,并根据这些大小统计出占据的 ROM 总空间。

在这里插入图片描述

一、所有节区信息汇总

① Grand Totals ,它表示整个代码占据的所有空间信息,其中Code 类型的数据大小为 10666字节,这部分包含了 532 字节的指令数据 (include .data) ,RO-data 占 8178 字节, RW-data 占 60 字节, ZI-data 占 3676 字节。

② ELF Image Totals,编译器压缩之后各个空间信息,主要是在RW-data有的程序可能有所不同,其他都是一样的

③ROM Totals,它列出了各个段所占据的 ROM 空间,除了 ZI-data 不占 ROM 空间外,其余项都与 GrandTotals 中相等

综合 map 文件的信息

① Total RO Size (Code + RO Data) 18844 ( 18.40kB)
当程序在 STM32 的内部 FLASH 运行时,需要使用的内部 FLASH 是从 0x0800 0000 地址开始的大小为 18844字节的空间;

② Total RW Size (RW Data + ZI Data) 3736 ( 3.65kB)
当程序运行时,需要使用的内部 SRAM 是从 0x20000000 地址开始的大小为 3736 字节的空间;

③ Total ROM Size (Code + RO Data + RW Data) 18904 ( 18.46kB)
当程序下载到 STM32 的内部 FLASH 时,需要使用的内部 FLASH 是从 0x0800 0000 地址开始的大小为 18904字节的空间。
在这里插入图片描述

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-05-05 11:35:52  更:2022-05-05 11:37:17 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 2:52:11-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码