编译后的MCU程序大小都表示什么

1.单片机存储分为Flash容量和RAM总容量

RAM 相当于内存,Flash 相当于硬盘。编译器会将一个程序分类为好几个部分,分别存储在 MCU 不同的存储区。

以STM32F407VGT6为例:

CPU内核:ARM Cortex-M4

CPU最大主频:168MHz

工作电压范围:1.8V~3.6V

程序存储容量:1MB

RAM总容量:192KB

EEPROM/数据 FLASH容量:1MB

2.程序编译后会显示各部分编译后的大小

Program Size 包含以下几个部分:

1.Code:代码段,存放程序的代码部分

2.RO-data:只读数据段,存放程序中定义的常量;

3.RW-data:读写数据段,存放初始化为非 0 值的全局变量;

4.ZI-data:0 数据段,存放未初始化的全局变量及初始化为 0 的变量;

编译完工程会生成一个. map 的文件,该文件说明了各个函数占用的尺寸和地址,在文件的最后几行也说明了上面几个字段的关系:

map 的文件各部分说明:

1.RO Size 包含了 Code 及 RO-data,表示程序占用 Flash 空间的大小;

2.RW Size 包含了 RW-data 及 ZI-data,表示运行时占用的 RAM 的大小;

3.ROM Size 包含了 Code、RO-data 以及 RW-data,表示烧写程序所占用的 Flash 空间的大小;

3.程序下载和执行说明

程序运行前,一般是将bin 或者 hex 文件烧录到MCU的Flash 中,该被烧录文件称为可执行映像文件。如下图左边部分所示,是可执行映像文件烧录到MCU后的内存分布,它包含 RO 段和 RW 段两个部分:其中 RO 段中保存了 Code、RO-data 的数据,RW 段保存了 RW-data 的数据,由于 ZI-data 都是 0,所以未包含在映像文件中。

MCU上电启动之后默认从 Flash 启动,启动之后会将 RW 段中的 RW-data(初始化的全局变量)搬运到 RAM 中,但不会搬运 RO 段,即 CPU 的执行代码从 Flash 中读取,另外根据编译器给出的 ZI 地址和大小分配出 ZI 段,并将这块 RAM 区域清零。

本文参照:https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/programming-manual/basic/basic

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值