您当前的位置:首页 > 电子 > 电气软件

Keil 编译器编译生成Program Size: Code=XX RO-data=XX RW-data=XX ZI-data=XX 含义

时间:04-16来源:作者:点击数:

在使用Keil编译器编译时,最后都会打印出信息:Program Size: Code=XX RO-data=XX RW-data=XX ZI-data=XX,我这里实际打印信息如下:

Program Size: Code=5688 RO-data=424 RW-data=48 ZI-data=1832  

今天来详细讲解一下这段信息的含义。

一段代码包括代码段、只读常量数据、可读可写变量等。上述信息就代表了编译完后,代码、只读常量、可读写变量(初始化的变量)和未初始化的变量所占空间的大小。在工程中的.map文件最后会看到如下信息:

      Code (inc. data)   RO Data    RW Data    ZI Data      Debug   

      5688        300        424         48       1832     524169   Grand Totals
      5688        300        424         48       1832     524169   ELF Image Totals
      5688        300        424         48          0          0   ROM Totals

==============================================================================

    Total RO  Size (Code + RO Data)                 6112 (   5.97kB)
    Total RW  Size (RW Data + ZI Data)              1880 (   1.84kB)
    Total ROM Size (Code + RO Data + RW Data)       6160 (   6.02kB)

==============================================================================

(1)Code (inc. data): 包含代码和数据两部分。(参考官方文档:Shows how many bytes are occupied by code. In this image, there are 3712 bytes of code.This includes 1580 bytes of inline data (inc. data), for example, literal pools, and short strings.)存储在FLASH中。

-Code:即代码部分;

-inline data:比如literal pools(文字池) 和short strings(短字符串)。此部分一般忽略。

(2)RO-data: 表示程序中的只读常量数据。比如const类型的数据 (除inline data之外的只读数据)。存储在FLASH中。

(3)RW-data: 表示可读写变量的数据大小,即程序中已经初始化的变量大小。存储在FLASH中。初始化时RW-data从flash拷贝到SRAM。

(4)ZI-data: 表示程序中已定义但未初始化或者初始化值为0的变量大小。(编译器会默认把没有赋值的变量自动赋值为0)。存储在SRAM中。ZI-data不会被算做代码里因为不会被初始化。

从上表最后一栏看一看到:

RO Size =Code + RO Data //只读数据大小 = 代码大小 + 只读数据大小

RW Size =RW Data + ZI Data //读写数据大小 = 可读写数据(已初始化)大小 + 未初始化变量大小

ROM Size = Code + RO Data + RW Data //整个代码所占ROM空间(占用FLASH空间)大小

即,烧写到FLASH的被占用的空间为:ROM Size = Code + RO Data + RW Data

程序运行时芯片RAM占用空间为:RW Size =RW Data + ZI Data

之所以将RW Data存在ROM(FLASH)中,是因为芯片掉电后,RAM中数据丢失,再次开机后需要对已经初始化的变量重新初始化,所以,已经初始化的变量(RW Data)需要放在ROM(FLASH)中保存,以确保重新上电时能够进行初始化。而 ZI Data本身就没有初始化,或者初始化为0,重新上电时,芯片会将ZI Data区域清零,所以没有必要将ZI Data放在ROM(FLASH)中,那样会浪费内存空间。

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门