STM32 中Code、RO-data、RW-data、ZI-data的含义

    使用keil编译工程生成hex的时候,会给出程序的大小和所占的内存。那么到底是怎么看这些信息的呢?

Code:为程序代码部分;

RO-Data:表示程序定义的常量及 const 型数据;

RW-Data:表示已经初始化的静态变量,变量有初值;

ZI-Data:表示未初始化的静态变量,变量无初值。

#define DATA (0x10000000) /* RO-Data */
char const GcChar = 5; /* RO-Data */
char GcStr[] = "string."; /* RW-Data */
char GcZero; /* ZI-Data */

其中,

ROM(Flash) Size = Code+RO-Data+RW-Data;

RAM Size = RW-Data+ZI-Data;

    为什么上述的 RW-Data 既占用 Flash 又占用 RAM 么,变量不是放在 RAM 中的么,为

什么会占用 Flash?因为 RW 数据不能像 ZI 那样“无中生有”的, ZI 段数据只要求其所在

的区域全部初始化为零,所以只需要程序根据编译器给出的 ZI 基址及大小来将相应的 RAM

清零。但 RW 段数据却不这样做,所以编译器为了完成所有 RW 段数据赋值,其先将 RW 段

的所有初值,先保存到 Flash 中,程序执行时,再 Flash 中的数据搬运到 RAM 中,所以 RW

段即占用 Flash 又占用 RAM,且占用的空间大小是相等的。

 

内容参考自《周立功分散加载文件浅释》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值