Code、RO、RW、ZI分别表示什么?

来源:本站
导读:目前正在解读《Code、RO、RW、ZI分别表示什么?》的相关信息,《Code、RO、RW、ZI分别表示什么?》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《Code、RO、RW、ZI分别表示什么?》的详细说明。
简介:本文介绍了Keil编译后的Code,RO,RW,ZI分别表示什么以及和芯片Flash、SRAM的对应关系。

在使用keil开发STM32应用程序时,点击Build后在Build Output窗口中经常会有如下信息:

Code、RO、RW、ZI分别表示什么?

以前一直好奇这几个参数和实际使用的STM32芯片中Flash和SRAM的对应关系,于是上网搜了一圈,做如下总结:

这些参数的单位是Byte

图中几个参数分别代表

Code:代码的大小

RO:常量所占空间

RW:程序中已经初始化的变量所占空间

ZI:未初始化的static变量和全局变量以及堆栈所占的空间

上述参数和芯片Flash以及SRAM的对应关系是

Flash占用大小=Code+RO+RW

SRAM占用大小=RW+ZI

不知道有没有人会像我一样好奇为什么RW参数同时参与了Flash和SRAM占用量的计算。这是因为Flash部分的属性是Read-Only的,而SRAM虽然是Read-Write但里面数据不能掉电保存,所以只能把已经初始化的值保存到ROM里,上电后再拷贝到SRAM中进行读写操作,即两部分都需要留出RW变量所占用的空间。在此我参照着用STM32F407ZGT6图解一下。

STM32F407ZGT6的Flash大小为1MB,SRAM大小为(128KB+64KB)。这里SRAM之所以分开表示是因为在芯片内部前面的128KB和后面的64KB地址不是连续的,后面的64KB在ST官方叫做CCM (core coupled memory) ,据说是由内核直接访问的,不能由外设访问。下面给出的示意图中只标出了前面的128KB的SRAM空间。红色部分表示STM32F407ZGT6提供的Flash和SRAM大小。

Code、RO、RW、ZI分别表示什么?

结合上图说下STM32F407ZGT6的启动过程(采用Cortex-M4、Cortex-M3内核的芯片基本都是这个过程):上电后首先从 0x00000000(映射到0x08000000,这里只考虑从内部Flash启动)处获得中断向量表,然后在运行用户代码之前会在标号2处有一段引导代码负责把存在Flash中的初始化变量的值Copy到SRAM中对应的变量位置(标号3),之后把ZI区全部清零(标号4),之后才正式开始运行用户代码(标号5)。

提醒:《Code、RO、RW、ZI分别表示什么?》最后刷新时间 2024-03-14 00:57:34,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《Code、RO、RW、ZI分别表示什么?》该内容的真实性请自行鉴别。