stm32堆栈、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 同义
    在这里插入图片描述
    Image Symbol Table主要分为两类,分别是Local Symbols和Global Symbols。
  • Local Symbols 记录了用 static 声明的全局变量地址和大小, C 文件中函数的地址和用 static 声明的
    函数代码大小,汇编文件中的标号地址(作用域限本文件)。
  • Global Symbols 记录了全局变量的地址和大小, C 文件中函数的地址及其代码大小,汇编文件中的 标号地址(作用域全工程)。

Memory Map of the image:
映像文件可以分为加载域(Load Region)和运行域(Execution Region) : 加载域反映了 ARM 可
执行映像文件的各个段存放在存储器中的位置关系。

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) :链接器根据需要插入填充,以强制字节对齐。

在这里插入图片描述

◆Grand Totals:显示映像的真实大小。
◆ ELF Image Totals: ELF(Executable and Linking Format)可执行链接格式映像文件大小。
◆ ROM Totals:显示包含映像所需的 ROM 的最小大小。这不包括 ZI 数据和存储在 ROM 中的调试
信息。

Keil编译后的Code,RO,RW,ZI分别表示什么以及和芯片Flash、SRAM的对应关系:
在这里插入图片描述
以前一直好奇这几个参数和实际使用的STM32芯片中Flash和SRAM的对应关系,于是上网搜了一圈,做如下总结:

这些参数的单位是Byte
图中几个参数分别代表
Code:代码的大小
RO:常量所占空间
RW:程序中已经初始化的变量所占空间
ZI:未初始化的static变量和全局变量以及堆栈所占的空间

上述参数和芯片Flash以及SRAM的对应关系是:

Flash占用大小=Code+RO+RW
SRAM占用大小=RW+ZI

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值