CODE、RO、ZIDATA区分

 

  • Code:即代码域,它指的是编译器生成的机器指令,存储在FLASH中。

 

  • RO-data:Read Only data,即只读数据域,它指程序中用到的只读数据,存储在FLASH中,因而程序不能修改其内容。例如C语言中const关键字定义的变量就是典型的RO-data。

 

  • RW-data:Read Write data,即可读写数据域,已经被初始化的全局变量或静态变量(类似于Linux C程序中的DATA段);存储在FLASH中。初始化时RW-data从flash拷贝到SRAM,

 

  • ZI-data:Zero Initialie data,未初始化的可读写全局或静态变量(类似于Linux C程序中的BBS段,程序加载时该区域数据会被初始化为0);存储在SRAM中。ZI-data不会被算做代码里因为不会被初始化。栈空间(Stack)和堆空间(Heap)均属于ZI-data空间

 

 

RW-data和ZI-data它们仅仅是初始值不一样而已,为什么编译器非要把它们区分开?这就涉及到程序的存储状态了,应用程序具有静止状态和运行状态。静止态的程序被存储在非易失存储器中,如STM32的内部FLASH,因而系统掉电后也能正常保存。但是当程序在运行状态的时候,程序常常需要修改一些暂存数据,由于运行速度的要求,这些数据往往存放在内存中(RAM),掉电后这些数据会丢失。因此,程序在静止与运行的时候它在存储器中的表现是不一样的。

 

简单的说就是在烧写的时候是FLASH中的被占用的空间为:Code+RO Data+RW Data 

程序运行的时候,芯片内部RAM使用的空间为: RW Data + ZI Data

程序运行的时候,只读区域(RO):Code+RO Data

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值