一个正在执行的ARM程序包含3部分:RO,RW和ZI。 RO是程序中的指令和常量 RW是程序中的已初始化变量 ZI是程序中的未初始化的变量 由以上3点说明可以理解为:RO就是readonly,RW就是read/write,ZI就是zero。 ARM映像文件的组成 所谓ARM映像文件就是指烧录到ROM中的bin文件,也成为image文...
Image文件包含了RO和RW数据。 之所以Image文件不包含ZI数据,是因为ZI数据都是0,没必要包含,只要程序运行之前将ZI数据所在的区域一律清零即可。包含进去反而浪费存储空间。 Q:为什么Image中必须包含RO和RW? A:因为RO中的指令和常量以及RW中初始化过的变量是不能像ZI那样“无中生有”的。 ARM程序的执行过程 从以上...
映像文件一般由域组成,域最多由三个输出段组成(RO,RW,ZI)组成,输出段又由输入段组成。所谓域,指的就是整个bin映像文件所处在的区域,它又分为加载域和运行域。加载域就是映像文件被静态存放的工作区域,一般来说flash里的整个bin文件所在的地址空间就是加载域,当然在程序一般都不会放在flash里执行,一般都会搬到...
我们输入的代码,一般有代码部分和数据部分,这就是所谓的输入段,经过编译后就变成了bin文件中ro段和rw段,还有所谓的zi段,这就是输出段。对于加载域中的输出段,一般来说ro段后面紧跟着rw段,rw段后面紧跟着zi段。在运行域中这些输出段并不连续,但rw和zi一定是连着的。zi段和rw段中的数据其实可以是rw属性。 |I...
RO,RW,ZI区别 ——刁雪松 一直以来对于ARM体系中所描述的RO,RW和ZI数据存在似是而非的理解,这段时间对其仔细了解了一番,发现了一些规律,理解了一些以前书本上有的但是不理解的东西,我想应该有不少人也有和我同样的困惑,因此将我的一些关于RO,RW和ZI的理解写出来,希望能对大家有所帮助。 要了解RO,RW和ZI需要...
ZI:未初始化的static和全局变量以及堆栈所占的空间 上述参数和芯片Flash以及SRAM的对应关系是 Flash占用大小=Code+RO+RW SRAM占用大小=RW+ZI 不知道有没有人会像我一样好奇为什么RW参数同时参与了Flash和SRAM占用量的计算。这是因为Flash部分的属性是Read-Only的,而SRAM虽然是Read-Write但里面数据不能掉电保存,所...
1、 ARM中ZI、RO、RW和CODE的区别1.0 ARM中ZI、RO、RW和CODE介绍 CODE:代码 RO:只读,相当于code在内存中的区间(即相当于code); ZI:未初始化段,例如uchar i;就放在该区 bss段。 i=5; RW:可读可写,程序运行需要占用多大内存,小于这个区间程序会出错,例如运行变量区比如i+的运行结果就在该区运行。 uchar...
RO,RW,ZI区别 ——刁雪松 一直以来对于ARM体系中所描述的RO,RW和ZI数据存在似是而非的理解,这段时间对其仔细了解了一番,发现了一些规律,理解了一些以前书本上有的但是不理解的东西,我想应该有不少人也有和我同样的困惑,因此将我的一些关于RO,RW和ZI的理解写出来,希望能对大家有所帮助。 要了解RO,RW和ZI需要...
说了上面的可能还是有些迷糊,RO,RW和ZI到底是什么,下面我将给出几个例子,最直观的来说明RO,RW,ZI在C中是什么意思。 1; RO 看下面两段程序,他们之间差了一条语句,这条语句就是声明一个字符常量。因此按照我们之前说的,他们之间应该只会在RO数据中相差一个字节(字符常量为1字节)。
域最多由三个输出段组成(RO,RW,ZI)组成,输出段又由输入段组成。所谓域, 指的就是整个bin映像文件所处在的区域,它又分为加载域和运行域。加载域 就是映像文件被静态存放的工作区域,一般来说flash里的整个bin文件所在的 地址空间就是加载域,当然在程序一般都不会放在flash里执行,一般都会搬 到sdram里运行工作,...