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

CODE、RO、ZIDATA区分_第1张图片

 

 

你可能感兴趣的:(CODE、RO、ZIDATA区分)