当前位置:首页 > 公众号精选 > 技术让梦想更伟大
[导读]    关注、星标公众号,直达精彩内容来源:安富莱电子本章为大家介绍编译器生成的map和htm文件进行解析,通过这两个文件可以让大家对工程代码的认识程度提升一个档次。本章节以MDK为例进行说明,使用IAR同理。MAP文件分析通过map文件,可以方便的查看工程ROM/FLASH和R...



来源:安富莱电子



本章为大家介绍编译器生成的map和htm文件进行解析,通过这两个文件可以让大家对工程代码的认识程度提升一个档次。


本章节以MDK为例进行说明,使用IAR同理。


MAP文件分析

通过map文件,可以方便的查看工程ROM/FLASH和RAM的占用情况,包括单个源文件,甚至具体到每个函数的rom大小都给出了,通过这些信息可以很好的进行代码优化。MAP文件的内容可分为如下几部分:


  • Section Cross References


  • Removing Unused input sections from the image


  • Image Symbol Table (Local Symbols Global Symbols)


  • Memory Map of the image


  • Image component sizes


下面将这个几个部分的含义逐一为大家做个说明。



1 MDK配置

要生成MAP文件,MDK中如下选项要选上:



将工程全编译,且没有错误后,双击这里就可以看到生成的map文件了:




2 MAP文件相关概念

认识MAP文件前先熟悉如下概念:


  • 段(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同义。



3 Section Cross References

这部分主要是不同文件中函数的调用关系(部分截图)



比如这句:main.o(i.main) refers to main.o(i.PrintfLogo) for PrintfLogo表示main.c文件中的main函数调用了PrintfLogo。



4 Removing Unused input sections from the image

这部分主要是被删除的冗余函数,也就是添加到工程里面,但是没有调用到的,下面是部分被删除冗余函数的截图效果:



对于这个部分功能,用户最好将MDK中这个选项勾上,然后全编译工程,效果会比较好:




5 Image Symbol Table

Image Symbol Table主要分为两类,分别是Local Symbols和Global Symbols。


  • Local Symbols


Local Symbols记录了用static声明的全局变量地址和大小,C文件中函数的地址和用static声明的函数代码大小,汇编文件中的标号地址(作用域限本文件),下面是部分截图:



  • Global Symbols


Global Symbols记录了全局变量的地址和大小,C文件中函数的地址及其代码大小,汇编文件中的标号地址(作用域全工程),下面是部分截图:




6 Memory Map of the image

映像文件可以分为加载域(Load Region)和运行域(Execution Region):加载域反映了ARM可执行映像文件的各个段存放在存储器中的位置关系。下面是部分截图,另外映像中的入口点就是程序开始执行的位置。



运行域反映了ARM可执行映像文件各个段真正执行时在存储器中的位置关系:



简单的说,加载域就是程序在Flash中的实际存储,而运行域是芯片上电后的运行状态,通过下面的框图可以有一个感性的认识:



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



7 Image component sizes

Image component sizes映像组件大小比较重要,比如下面内容代表的含义:



  • Code (inc. Data) :显示代码占用了多少字节。在此映像中,有19442字节的代码, 其中包括1832字节的内联数据 (inc. data),例如文字池和短字符串。


  • RO Data  :显示只读数据占用了多少字节(比如const char buf[] = "123456")。这是除 Code (inc. data) 列中包括的内联数据之外的数据。


  • RW Data :显示读写数据占用了多少字节。


  • ZI Data  :显示零初始化的数据占用了多少字节。


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


  • Object Totals  :显示链接到一起以生成映像的对象占用了多少字节。


  • (incl. Generated):链接器会生成的映像内容,例如,交互操作中间代码。如果 Object Totals 行包含此类型的数据,则会显示在该行中。本例中共有 1016 字节的 RO 数据,其中32字节是链接器生成的 RO 数据。


  • (incl. Padding) :链接器根据需要插入填充,以强制字节对齐。



下面的Library Totals显示已提取并作为单个对象添加到映像中的库成员占用了多少字节。



下面是我们经常要查看的内容:



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


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


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


HTM文件分析

MDK将工程全编译,且没有错误后,就会生成此文件。以开发板配套例子为例,htm文件位于路径:\Project\MDK-ARM(uV5)\Objects。


此文件的最大作用就是基本统计了所有被调用函数的栈stack使用情况(不考虑中断嵌套)。下面是整个工程的最大栈需求:



具体到每个函数也给出最大的栈深度Max Depth,同时也给出函数本身的代码量大小和使用的栈大小,比如函数bsp_InitExtIO,最大栈深度是152字节。函数本身占用代码大小(Thumb指令集)28字节,使用栈8字节。



通过这个文件,我们可以合理的配置启动文件里面的stack大小:



总结

本章节的知识点比较重要,务必要熟练掌握。平时开发工程项目时,可以多关注map文件和htm文件。


版权归原作者所有,如有侵权,请联系删除。‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧  END  ‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧



本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

存储器是计算机系统中的关键组件,负责存储程序指令和数据,是实现计算和信息处理的基础。根据其工作原理、存储容量、访问速度、稳定性以及持久性等诸多特性,存储器可以被细分为多个类别。本篇文章将详细介绍存储器的主要分类,并探讨各...

关键字: 存储器 RAM

提供业界最高容量的闪存、RAM和GPIO组合,支持Matter over Thread

关键字: 闪存 RAM 物联网

日本横滨2023年8月7日 /美通社/ -- Fujitsu Semiconductor Memory Solution Limited宣布推出汽车级I2C接口512Kbit FeRAM——MB85RC512LY。目前可...

关键字: FUJITSU RAM 汽车 温度

纽约2023年8月4日 /美通社/ -- Resuticks因不懈追求创新性受众参与解决方案而受到认可,现在正在重新定义这一领域,专注于通过其旗舰产品RESUL为品牌及其受众...

关键字: TI IC CK RAM

AVR单片机硬件结构采取8位机与16位机的折中策略,即采用局部寄存器存堆(32个寄存器文件)和单体高速输入/输出的方案(即输入捕获寄存器、输出比较匹配寄存器及相应控制逻辑)。提高了指令执行速度(1Mips/MHz),克服...

关键字: AVR单片机 RAM 寄存器

AVR单片机是1997年由ATMEL公司研发出的增强型内置Flash的RISC(Reduced Instruction Set CPU)精简指令集高速8位单片机。可以广泛应用于计算机外部设备、工业实时控制、仪器仪表、通讯...

关键字: AVR单片机 计算机 RAM

51单片机的 RAM 分为两个部分,一块是片内 RAM,一块是片外 RAM。标准 51 的片内 RAM 地址 从 0x00H~0x7F 共 128 个字节,而现在我们用的 51 系列的单片机都是带扩展片内 RAM 的,即...

关键字: 单片机 RAM 存储器

上海2023年2月14日 /美通社/ -- 步入2023年第一个季度,市场依然在震荡中前行。作为一家全球领先的金融科技经纪商,ATFX为了给全球客户提供具有前瞻性的分析报告,分析师团队早已密切关注金融市场动态,结合各国经...

关键字: ANTI RAM 基础知识 SIC

美国智能设备公司NUU宣布推出其首款5G智能手机NUU B20 5G。B20 5G可接入美国各地铺开的5G网络,并具有下一代Dimensity处理器的强大性能。B20 5G具有6.5英寸高分辨率FHD+显示器,90Hz刷...

关键字: 处理器 5G智能手机 GB RAM

全球最大石油公司沙特阿美(Saudi Aramco)的首席执行官阿明·纳赛尔表示,目前的全球能源转型计划存在缺陷,不会成为现实。纳赛尔称,现有的可再生能源和化石燃料替代品不可能充分满足全球不断增长的能源需求,所以在新能源...

关键字: CE 新能源 RAM 可再生能源
关闭