ads中的RO和RW还有ZI

本文介绍了ARM系统中程序映像文件的基本概念,包括其组成部分RO、RW和ZI段,并详细解析了如何通过启动代码将这些段从Flash复制到RAM中进行运行。此外,还解释了链接器选项和分布装载描述文件的作用。

转载自:
http://hi.baidu.com/zzz1367/blog/item/49750758b809f88a810a18de.html

一般而言,一个程序包括只读的代码段和可读写的数据段。
在ARM的集成开发环境中,只读的代码段和常量被称作RO段(ReadOnly);可读写的全局变量和静态变量被称作RW段(ReadWrite);RW段中要被初始化为零的变量被称为ZI段(ZeroInit)。对于嵌入式系统而言,程序映象都是存储在Flash存储器等一些非易失性器件中的,而在运行时,程序中的RW段必须重新装载到可读写的RAM中。这就涉及到程序的加载时域和运行时域。简单来说,程序的加载时域就是指程序烧入Flash中的状态,运行时域是指程序执行时的状态。对于比较简单的情况,可以在ADS集成开发环境的ARM LINKER选项中指定RO BASE和RW BASE,告知连接器RO和RW的连接基地址。对于复杂情况,如RO段被分成几部分并映射到存储空间的多个地方时,需要创建一个称为“分布装载描述文件”的文本文件,通知连接器把程序的某一部分连接在存储器的某个地址空间。需要指出的是,分布装载描述文件中的定义要按照系统重定向后的存储器分布情况进行。在引导程序完成初始化的任务后,应该把主程序转移到RAM中去运行,以加快系统的运行速度。

       什么是arm的映像文件,
arm映像文件其实就是可执行文件,包括bin或hex两种格式,可以直接烧到rom里执行。在axd调试过程中,我们调试的是axf文件,其实这也是一种映像文件,它只是在bin文件中加了一个文件头和一些调试信息。映像文件一般由域组成,域最多由三个输出段组成(RO,RW,ZI)组成,输出段又由输入段组成。所谓域,指的就是整个bin映像文件所处在的区域,它又分为加载域和运行域。加载域就是映像文件被静态存放的工作区域,一般来说flash里的 整个bin文件所在的地址空间就是加载域,当然在程序一般都不会放在 flash里执行,一般都会搬到sdram里运行工作,它们在被搬到sdram里工作所处的地址空间就是运行域。我们输入的代码,一般有代码部分和数据部分,这就是所谓的输入段,经过编译后就变成了bin文件中ro段和rw段,还有所谓的zi段,这就是输出段。对于加载域中的输出段,一般来说ro段后面紧跟着rw段,rw段后面紧跟着zi段。


       什么是arm的映像文件,
arm映像文件其实就是可执行文件,包括bin或hex两种格式,可以直接烧到rom里执行。在axd调试过程中,我们调试的是axf文件,其实这也是一种映像文件,它只是在bin文件中加了一个文件头和一些调试信息。映像文件一般由域组成,域最多由三个输出段组成(RO,RW,ZI)组成,输出段又由输入段组成。所谓域,指的就是整个bin映像文件所处在的区域,它又分为加载域和运行域。加载域就是映像文件被静态存放的工作区域,一般来说flash里的 整个bin文件所在的地址空间就是加载域,当然在程序一般都不会放在 flash里执行,一般都会搬到sdram里运行工作,它们在被搬到sdram里工作所处的地址空间就是运行域。我们输入的代码,一般有代码部分和数据部分,这就是所谓的输入段,经过编译后就变成了bin文件中ro段和rw段,还有所谓的zi段,这就是输出段。对于加载域中的输出段,一般来说ro段后面紧跟着rw段,rw段后面紧跟着zi段。
在运行域中这些输出段并不连续,但rw和zi一定是连着的。zi段和rw段中的数据其实可以是rw属性。 

       | Image$$RO$$Base| |Image$$RO$$Limit| |Image$$RW$$Base| |Image$$ZI$$Base| |Image$$ZI$$Limit|这几个变量是编译器通知的,我们在 makefile文件中可以看到它们的值。它们指示了在运行域中各个输出段所处的地址空间,
| Image$$RO$$Base| 就是ro段在运行域中的起始地址,|Image$$RO$$Limit| 是ro段在运行域中的截止地址,其它依次类推。我们可以在linker的output中指定,在 simple模式中,ro base对应的就是| Image$$RO$$Base|,rw base 对应的是|Image$$RW$$Base|,由于rw和zi相连,|Image$$ZI$$Base| 就等于|Image$$RW$$limit|
。其它的值都是编译器自动计算出来的。

   下面是2410启动代码的搬运部分,我给出注释:

BaseOfROM DCD |Image$$RO$$Base|

TopOfROM DCD |Image$$RO$$Limit|

BaseOfBSS DCD |Image$$RW$$Base|

BaseOfZero DCD |Image$$ZI$$Base|

EndOfBSS DCD |Image$$ZI$$Limit|

adr r0, ResetEntry; ResetEntry是复位运行时域的起始地址,在boot nand中一般是0

ldr r2, BaseOfROM;

cmp r0, r2

ldreq r0, TopOfROM;TopOfROM=0x30001de0,代码段地址的结束

beq InitRam 

ldr r3, TopOfROM

;part 1,通过比较,将ro搬到sdram里,搬到的目的地址从 | Image$$RO$$Base| 开始,到|Image$$RO$$Limit|结束



ldmia r0!, {r4-r7} ;将r0值作为地址处(ResetEntry)连续的4个32位数依次转入r4,r5,r6,r7;同时r0增加。

stmia r2!, {r4-r7};将r4,r5,r6,r7的值依次存入|Image$$RO$$Base|地址处;同时r2增加。

cmp r2, r3

bcc %B0;

;part 2,搬rw段到sdram,目的地址从|Image$$RW$$Base| 开始,到|Image$$ZI$$Base|结束

sub r2, r2, r3;r2=0 ;上面拷贝时每次拷贝4个双字(32位)大小,但是RO段大小不一定是4的整数倍,所以可能多拷贝了几个双字大小,r2-r3得到多拷贝的个数

sub r0, r0, r2 ;
r0-(r2-r3)可以使r0指向在boot nand中RO的结束地址


InitRam ;carry rw to baseofBSS

ldr r2, BaseOfBSS ;TopOfROM=0x30001de0,baseofrw

ldr r3, BaseOfZero ;BaseOfZero=0x30001de0

0

cmp r2, r3

ldrcc r1, [r0], #4

strcc r1, [r2], #4

bcc %B0 

;part 3,将sdram zi初始化为0,地址从|Image$$ZI$$Base|到|Image$$ZI$$Limit|

mov r0, #0;init 0

ldr r3, EndOfBSS;EndOfBSS=30001e40



cmp r2, r3

strcc r0, [r2], #4

bcc %B1

至此三个输出段组成(RO,RW,ZI)拷贝和初始化结束。
INTRODUCTION This current release of the RF High Power Products Design Kit for ADS v2004a has been implemented as follows: • The Library is implemented as an Agilent® EEsof® EDA Advanced Design System (ADS) Design Kit and should be installed according to Agilent's instructions on installing Design Kits. • There is now only one Zip file for all of the major platforms that Freescale Semiconductor supports (Microsoft® Windows® 2000, XP, Solaris® 8/9, HP-UX® 11.0/11.11i) and Red Hat® Linux® 7.2/7.3/8.0. This is because ADS v2004a now allows the use of dynamically linked or shared-object libraries for distribution of user-compiled models. We are no longer required to provide a new simulator executable for each computing platform. • The Design Kit was implemented per Agilent's instructions contained in the Design Kit Development Manual (dated September 2004). Therefore, the structure of our library has been modified per Agilent's requirements so that Agilent can help support installation and simulation issues in the future. Because of this modification, we must now use a new element called TechInclude (see “Release Notes, TechInclude Element” in this document). The TechInclude element is now required on all top-level schematics for simulation purposes. • The Library release includes the following: − Addition of lower thermal resistance package “H” models − The latest release is compatible with previous library releases. − MRF6P21190H and MRF28* models have been updated. − New MRF6S21140H model The Freescale Semiconductor RF Modeling Team highly recommends that you read through this document thoroughly to enable a smooth installation and transition to the new release.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值