Keil 中的Code,RO-data,RW-data,ZI-data
我们开发项目中,编译、链接完成后,都要看一下RAM和Flash的利用情况,尤其在有bootloader的情况下,确保自己的单片机选型能符合项目的要求。其中ARM程序的组成,是很容易混淆的。
此处所说的“ARM程序”是指在ARM系统中正在执行的程序,而非保存在Flash中的bin映像(image)文件,这一点清注意区别。
一、Code,RO-data,RW-data,ZI-data所代表的意思
下图是车检器项目的APP利用情况:
图1
Code = 10956 Code 表示 程序代码部分,即指令
RO-data = 2196 Read Only 表示 程序定义的常量,如const关键字定义的常量数组或者长量(一般作为掉电后的标记),函数中的常量
RW-data = 76 Read Write 表示 已初始化的变量(全局和局部变量)
ZI-data = 9908 Zero Initialize 表示 未初始化的变量(全局和局部变量)
二、查找..\Lists文件夹中Project.map文件,查看使用的MCU资源:
图2
1、Flash占用
图3
由上图2和图3可知,Size:0x33ac.....13228,因此flash占用如下:
Code, RO-data, RW-data ............flash
2、RAM占用
图4
由上图2和图4可知,Size:0x2700.....9984,因此RAM占用如下:
RW-data, ZI-data...................RAM
二、单片机启动过程中Code,RO-data,RW-data,ZI-data的操作流程
1、ARM映像文件的组成
所谓ARM映像文件就是指烧录到Flash中的bin文件,也称为image文件
image文件包含了Code, RO-data, RW-data数据。
之所以image文件不包含ZI-data,是因为ZI-data都是0,没必要包含,只要程序运行之前将ZI数据所在的区域一律清零即可,包含进去浪费存储空间。
Q:为什么image中必须包含Code, RO-data, RW-data?
A:因为Code+RO-data中的指令和常量以及RW-data中初始化过的变量是不能像ZI-data那样“无中生有”的。
2、ARM运行程序的组成
所谓ARM运行程序,是指在ARM系统中正在执行的程序
3、单片机启动过程 Code,RO-data,RW-data,ZI-data的工作过程
烧录到ROM中的image文件与实际运行时的ARM程序之间并不是完全相同的,因此就有必要了解ARM运行程序是如何从Flash中的image状态达到实际运行状态
1、上电初始化时,将RW-data从flash拷贝到RAM中,因为RW-data是变量,变量不能存在Flash中,存储的数据要随计算结果随时改变。
2、上电初始化时,将ZI-data所在的RAM区域全部清零,因为ZI-data区域并不在image中,所以需要程序根据编译器给出的ZI-data地址及大小来将相应的RAM区域清零。ZI-data中也是变量,同理,变量不能存在Flash中,在程序运行的最初阶段,Flash中的指令完成了这两项工作后C程序才能正常访问变量,否则只能运行不含变量的代码。
Keil 中的Code,RO-data,RW-data,ZI-data的更多相关文章
- stm32 ARM中的RO、RW和ZI DATA
一直以来对于ARM体系中所描述的RO,RW和ZI数据存在似是而非的理解,这段时间对其仔细了解了一番,发现了一些规律,理解了一些以前书本上有的但是不理解的东西,我想应该有不少人也有和我同样的困惑,因此将 ...
- ARM MDK 编译产生:RO、RW和ZI DATA说明
1.比如编译一个工程文件,产生如下提示信息: Program Size: Code=18938 RO-data=622 RW-data=124 ZI-data=7724 RO段.RW段和ZI段 要了解 ...
- Keil编译后的Code,RO,RW,ZI分别表示什么以及和芯片Flash、SRAM的对应关系
在使用keil开发STM32应用程序时,点击Build后在Build Output窗口中经常会有如下信息:<ignore_js_op> 以前一直好奇这几个参数和实际使用的STM32芯片中F ...
- Keil中的code关键字
一般说来,我们在C语言中定义的每一个变量初始化后都会占用一定的内存(RAM)空间.但是在keil中提供了一个特殊的关键字“code”,这个关键字在标准C中是没有的.其语法举例如下: unsigned ...
- Keil中 Program Size: Code RO-data RW-data ZI-data
一般 MCU 包含的存储空间有:片内 Flash 与片内 RAM,RAM 相当于内存,Flash 相当于硬盘. 现在我们就一个STM32的工程为例子 linking... Program Size: ...
- KEIL的ARM编译器对RW和ZI段的一个处理
按照C编译器编译的结果,一般会产生RO段,RW段,ZI段.RO是程序中的指令和常量,RW是程序中的已初始化全局变量,ZI是程序中的未初始化或初始化为零的全局变量. 那么如下的代码 int aaa; i ...
- 关于keil中data,idata,xdata,pdata,code的问题
转自关于keil中data,idata,xdata,pdata,code的问题 从数据存储类型来说,8051系列有片内.片外程序存储器,片内.片外数据存储器,片内程序存储器还分直接寻址区和间接寻址类 ...
- RW RO ZI ROM keil中的含义
编译的一个ARM的程序,会得到这样的信息: ============================================================================== ...
- Keil MDK中的Code, RO-data , RW-data, ZI-data分别代表什么意思?(转)
一 基础知识 字节 8位半字 16位字 32位 二 解惑 Code, RO-data,RW-data,ZI-data Code为程序代码部分RO-data 表示 程序定义的常量const t ...
随机推荐
- “拒绝了对对象数据库的 EXECUTE 权限”之解决
“拒绝了对对象'aspnet_CheckSchemaVersion'的 EXECUTE 权限”之解决 [错误状态] “/XXX”应用程序中的服务器错误. ----------------------- ...
- django项目设计
我们以前是只建立一个项目只建立一个app,如果我们要建立多个app的时候 并且这个app要写很多额视图的函数views内函数,要是建立很多种的时候就会造成很冗杂,不美观 我们未来增强解耦性,就把那个 ...
- python安装lib库
time:2015/11/11 双十一 一.初衷 看到一篇帖子[1],里面有python代码,就想实现一下,代码如下: import cv2 as cv import numpy as np from ...
- Linux tar命令详解
当你想要压缩一大堆文件时,你得先将这一大堆文件先打成一个包(tar命令),然后再用压缩程序进行压缩(gzip bzip2命令) tar常见命令参数 必要参数有如下: -A 新增压缩文件到已存在的压缩 ...
- (matlab)plot画图的颜色线型(转)
http://wenku.baidu.com/link?url=SVVMVH8QlDIu2hVKDtoBYs6l0CnQvFnFHJJ9yexmYVKQqhz47qIr7aK7LOf8nN0qNdy8 ...
- mysql创建表的注意事项
1 库名,表名,字段名必须使用小写字母,"_"分割. 2 库名,表名,字段名必须不超过12个字符. 3 库名,表名,字段名见名识意,建议使用名词而不是动词. 4 建议使用InnoD ...
- 手动安装 pygame
在windows下 用pip 安装pygame,老是失败,下载了 wheel文件,用pip安装还是不行,查了一下资料,可以手动安装: 1.在 http://www.lfd.uci.edu/~gohlk ...
- jprofiler9.2注册码
jprofiler9.2注册码 2016-08-23 18:11 3658人阅读 评论(2) 收藏 举报 L-Larry_Lau@163.com#23874-hrwpdp1sh1wrn#0620 L- ...
- 在C#应用程序中,利用表值参数过滤重复,批量向数据库导入数据,并且返回重复数据
在很多情况下,应用程序都需要实现excel数据导入功能,数据如果只有几十条,或上百条,甚至上千条,速度还好. 但是不仅如此,如果客户提供给你的excel本身存在着重复数据,或是excel中的某些数据已 ...
- TensorFlow函数(六)初始值生成函数
1.常量生成函数 tf.constant(value, dtype) 生成一个初始值为常量value的数组 value:指定的常量 dtype:数据类型 tf.zeros(shape, dtype) ...