ARM程序的RO段、RW段和ZI段 --Image】的更多相关文章

Limit 含义了解RO,RW和ZI需要首先了解以下知识:ARM程序的组成此处所说的“ARM程序”是指在ARM系统中正在执行的程序,而非保存在ROM中的bin映像(image)文件,这一点清注意区别.一个ARM程序包含3部分:RO,RW和ZIRO是程序中的指令和常量RW是程序中的已初始化变量ZI是程序中的未初始化的变量由以上3点说明可以理解为:RO就是readonly,RW就是read/write,ZI就是zero ARM映像文件的组成所谓ARM映像文件就是指烧录到ROM中的bin文件,也成为i…
一直以来对于ARM体系中所描述的RO,RW和ZI数据存在似是而非的理解,这段时间对其仔细了解了一番,发现了一些规律,理解了一些以前书本上有的但是不理解的东西,我想应该有不少人也有和我同样的困惑,因此将我的一些关于RO,RW和ZI的理解写出来,希望能对大家有所帮助. 要了解RO,RW和ZI需要首先了解以下知识: ARM程序的组成 此处所说的“ARM程序”是指在ARM系统中正在执行的程序,而非保存在ROM中的bin映像(image)文件,这一点清注意区别. 一个ARM程序包含3部分:RO,RW和ZI…
1.比如编译一个工程文件,产生如下提示信息: Program Size: Code=18938 RO-data=622 RW-data=124 ZI-data=7724 RO段.RW段和ZI段 要了解RO,RW和ZI需要首先了解以下知识:ARM程序的组成            此处所说的“ARM程序”是指在ARM系统中正在执行的程序,而非保存在ROM中的bin映像(image)文件,这一点清注意区别.            一个ARM程序包含3部分:RO,RW和ZI.RO是程序中的指令和常量:R…
Keil开发的ARM程序main函数之前的汇编分析 ——BIN文件中RW段的数据移动 系统平台: STM32系列STM32F103ZE,512KB内部FLASH,64KB片内存储; FLASH地址范围0x0800 0000 ~ 0x0808 0000,用于存放代码; 片内存储地址范围0x2000 0000 ~ 0x2001 0000,用于存放数据; Cortex-M3上电后来到复位中断(已将前4个字节的值存入MSP堆栈指针),转到__main标号,完成RW段的移动.ZI段的初始化,建立堆栈,初始…
对ARM加载域和运行域的理解 一般而言,一个程序包括只读的代码段和可读写的数据段.在ARM的集成开发环境中,只读的代码段和常量被称作RO段(ReadOnly):可读写的全局变量和静态变量被称作RW段(ReadWrite):RW段中要被初始化为零的变量被称为ZI段(ZeroInit).对于嵌入式系统而言,程序映象都是存储在Flash存储器等一些非易失性器件中的,而在运行时,程序中的RW段必须重新装载到可读写的RAM中.这就涉及到程序的加载时域和运行时域.简单来说,程序的加载时域就是指程序烧入Fla…
按照C编译器编译的结果,一般会产生RO段,RW段,ZI段.RO是程序中的指令和常量,RW是程序中的已初始化全局变量,ZI是程序中的未初始化或初始化为零的全局变量. 那么如下的代码 int aaa; int bbb; int main() { aaa = ; bbb = ; ; } 应该产生的是八个字节的ZI段,但很奇怪,--bss_threshold=0 Program Size: Code= RO-data= RW-data= ZI-data= 如上所示,其中的Code段,RO-data段和Z…
@2019-02-14 [小记] RO段.RW段和ZI段 --Image$$??$$Limit 含义(zz)…
最近看到一篇博客<撸一段 SQL ? 还是撸一段代码?>,文章举例说明了一个连表查询使用程序code来写可读性可维护性更好,但是回帖意见不一致,我想作者在理论层面没有做出更好的论述,而我今天才回帖结果发现不能回帖了,于是单独写此文随记. 木桶定律 连表查询的确应该尽量避免,虽然普通情况下一条连表查询的SQL效率比两个for循环效率更高,但是我们应该知道大量依靠复杂SQL查询的应用程序,数据库很容易成为瓶颈,但应用程序所在的服务器却比较空闲,那么此时应用程序表现的结果就是等待数据库返回查询结果,…
这篇博文,我们编写一个C语言的小程序,来解析数据段或者代码段描述符的各个字段.这样我们阅读原书的代码就会方便一点,只要运行这个小程序,就可以明白程序中定义的数据段或者代码段的描述符了. 这段代码,我用了"位字段"的知识,这还是第一次使用C语言的这个特性呢,如果有不对的地方,欢迎博友斧正. 写代码之前,我们再复习一下数据段描述符和代码段描述符的格式.(图片选自赵炯老师的<Linux内核完全剖析>) #include <stdio.h> //定义描述符中的低32位…
一.段描述符的分类 在上一篇博文中已经说过,为了使用段,我们必须要创建段描述符.80X86中有各种各样的段描述符,下图展示了它们的分类. 看了上图,你也许会说:天啊,怎么这么多段描述符啊!我可怎么记住呢? 别担心,我会在以后的博文中,跟随原书的作者,为您逐步介绍.我们的学习是循序渐进的,所以不要求一下子掌握所有东西.我们的原则是:用到什么学什么.我们今天的重点是"存储段描述符". 二.段描述符的通用格式[1] 段描述符是GDT和LDT中的一个数据结构项,用于向处理器提供有关一个段的位置…