历史上的今天
今天是:2025年02月05日(星期三)
2020年02月05日 | ARM映像文件的组成
2020-02-05 来源:eefocus
ARM映像文件的组成
所谓ARM映像文件就是指烧录到ROM中的bin文件,也成为image文件。以下用Image
文件来称呼它。Image文件包含了RO和RW数据。之所以Image文件不包含ZI数据,是因
为ZI数据都是0,没必要包含,只要程序运行之前将ZI数据所在的区域一律清零即可。
包含进去反而浪费存储空间。
烧录到ROM中的image文件与实际运行时的ARM程序之间并不是完全一样的。因此就有
必要了解ARM程序是如何从ROM中的image到达实际运行状态的。
RO == ReadOnly 只读的代码段和常量
RW == ReadWrite 可读写的全局变量和静态变量
ZI == ZeroInit RW段中要被初始化为零的变量的段(也就是说该段包含在RW内) 对于嵌入式系统而言,程序映象都是存储在Flash存储器等一些非易失性器件中的,
而在运行时,程序中的RW段必须重新装载到可读写的RAM中。这就涉及到程序的加载时域和运行时域。简单来说,程序的加载时域就是指程序烧入Flash中的状态,运行时域是指程序执行时的状态。
在引导程序完成初始化的任务后,应该把主程序转移到RAM中去运行,以加快系
统的运行速度。
RO中的指令至少应该有这样的功能:
1. 将RW从ROM中搬到RAM中,因为RW是变量,变量不能存在ROM中。
2. 将ZI所在的RAM区域全部清零,因为ZI区域并不在Image中,所以需要程序根据编译器
给出的ZI地址及大小来将相应得RAM区域清零。ZI中也是变量,同理:变量不能存在ROM
中在程序运行的最初阶段,RO中的指令完成了这两项工作后C程序才能正常访问变量。否
则只能运行不含变量的代码。
总结:
1; C中的指令以及常量被编译后是RO类型数据。
2; C中的未被初始化或初始化为0的变量编译后是ZI类型数据。
3; C中的已被初始化成非0值的变量编译后市RW类型数据。
///////
ARM的Image文件又叫ELF文件由若干域组成,通常是加载域和运行域。
加载域:就是Image被静态存放的区域,一般就是指烧在flash中的整个bin文件;
运行域:通常是程序都是被搬到SDRAM中运行,该Image被搬在SDRAM里工作所处的地址空间就是运行域。
每个域又由至多三个输出段组成,每个输出段又由一个或多个输入段组成,输入段由目标文件中的代码和数据。我们写的程序代码其实就是输入段。
输入段包括三种属性:只读(RO:Read Only。对应C程序中的代码和常量),可读写(RW:Read Write。对应C程序中的初始化为非0的变量),初始化为0的属性(ZI:Zero Init。对应于C程序中的未初始化或初始化为0的变量)。
在加载域中,三者的排序顺序依次是:

在运行域中,只有RW和自ZI段必须连在一起。
因为ROM中的RW和ZI段不能写,所以在远行时态时RW和ZI属性段就要被搬到RAM中去。而RO段本身就是只读的,可以放在ROM中运行也可以搬到RAM中运行,当然搬在RAM中运行更块。
史海拾趣
|
以共发射极电路为例,进入深饱和状态与基极、集电极电阻,三极管的电流放大系数和电源电压有关,基极偏压电阻越小、集电极负载电阻越大、三极管的放大系数越高、电源电压越低,越容易进入饱和状态。 基极开路时集电极电压等于电源电压,逐步减小基 ...… 查看全部问答> |
|
如题所述。我在安装isp运行或者 用绿色版运行之后都提示缺少一个文件 但是我的文件夹下有这个文件 而且我去网上下了新的解压替换了之后还是这样 。isp下了好几个了都是这样 。请高手指点一下。 注:我没有连接单片机 只是单 ...… 查看全部问答> |
|
可以完全显示,只是有点小问题,比如第一次显示的是3位数 类似234,要是第2次在同样位置显示个1位数 如6,现在LCD显示变成634,怎么清除后面2位啊?命令里还是别的问题?… 查看全部问答> |
|
我在Vxworks下实现以太网通讯,采用UDP协议,在调试状态下,程序运行正常,用ping指令ping目标机和测试程序测试均正常,但将程序作成映像下载到DOC中运行时,却发现无法ping通目标机,不知怎么回事,请高手解释一下,另外,我在程序中开了三个任务 ...… 查看全部问答> |
|
请教WinCE6.0开发中关于Emulator的问题(如何自制SDK,Emulator) 我刚刚接触WinCE,我需要做的事情是在一般WinCE设备上开发应用程序,我打算自己在PB6.0上导出一个一般的WinCE6.0的SDK并安装,然后在VS2005上写代码,通过WinCE6.0仿真器看到代码的效果。 现在我按照网上的文章“WinCE6.0安装顺序”依次安装了下列 ...… 查看全部问答> |
|
module contral(clk1hz,rst_n,hold, led,num,flash);input clk1hz;input rst_n;input hold; //incident happen//input INTI; //红绿灯初始状态output [2:0] led; //红绿灯output [4:0] num; //显示的倒计时outp ...… 查看全部问答> |




