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区分】
文章图片
推荐阅读
- 一个人的碎碎念
- 野营记-第五章|野营记-第五章 讨伐梦魇兽
- Shell-Bash变量与运算符
- 清明,是追思、是传承、是感恩。
- 牛人进化+|牛人进化+ 按自己的意愿过一生
- 七老修复好敏感、角质层薄、红血丝
- 华为旁!大社区、地铁新盘,佳兆业城市广场五期!
- 标签、语法规范、内联框架、超链接、CSS的编写位置、CSS语法、开发工具、块和内联、常用选择器、后代元素选择器、伪类、伪元素。
- 螃蟹和这些食物同吃,轻则腹泻、重则中毒!要小心哦~
- 八、「料理风云」