arm映像文件及其地址映射

arm映像文件及其地址映射

ID:6029630

大小:32.45 KB

页数:9页

时间:2017-12-31

arm映像文件及其地址映射_第1页
arm映像文件及其地址映射_第2页
arm映像文件及其地址映射_第3页
arm映像文件及其地址映射_第4页
arm映像文件及其地址映射_第5页
资源描述:

《arm映像文件及其地址映射》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、ARM映像文件及其地址映射2010-06-2414:161、什么是arm的映像文件,arm映像文件其实就是可执行文件,包括bin或hex两种格式,可以直接烧到ROM里执行。在axd调试过程中,我们调试的是axf文件,其实这也是一种映像文件,它只是在bin文件中加了一个文件头和一些调试信息。映像文件一般由域组成,域最多由三个输出段组成(RO,RW,ZI),输出段又由输入段组成。所谓域,指的就是整个bin映像文件所处在的区域,它又分为加载域和运行域。对于嵌入式系统而言,程序映象都是存储在Flash存储器等一些非易失性器件中的,而在运行时,程序中的RW段必须重新装载到可读写的RAM

2、中。简单来说,程序的加载时域就是指程序烧入Flash中的状态,运行时域是指程序执行时的状态。一般来说flash里的整个bin文件所在的地址空间就是加载域,当然在程序一般都不会放在flash里执行,一般都会搬到sdram里运行工作,它们在被搬到sdram里工作所处的地址空间就是运行域。我们输入的代码,一般有代码部分和数据部分,这就是所谓的输入段,经过编译后就变成了bin文件中ro段和rw段,还有所谓的zi段,这就是输出段。在ARM的集成开发环境中,只读的代码段和常量被称作RO段(ReadOnly);可读写的全局变量和静态变量被称作RW段(ReadWrite);RW段中要被初始化

3、为零的变量被称为ZI段(ZeroInit)。对于加载域中的输出段,一般来说RO段后面紧跟着RW段,RW段后面紧跟着ZI段。在运行域中这些输出段并不连续,但RW和ZI一定是连着的。ZI段和RW段中的数据其实可以是RW属性。2、简单地址映射对于比较简单的情况,可以在ADS集成开发环境的ARMLINKER选项output中指定ROBase和RWBase,即在simple模式下,告知连接器RO和RW的连接基地址。这种模式下,ARMLinker会输出以下符号,它们指示了在运行域中各个输出段所处的地址空间,在使用的时候可以用IMPORT引入:

4、Image$$RO$$Base

5、:表示RO段

6、在运行域中的起始地址

7、Image$$RO$$Limit

8、:表示RO区末地址后面的地址,即RW数据源的起始地址

9、Image$$RW$$Base

10、:RW区在RAM里的执行区起始地址,也就是编译器选项RW_Base指定的地址

11、Image$$ZI$$Base

12、:ZI区在RAM里面的起始地址

13、Image$$ZI$$Limit

14、:ZI区在RAM里面的结束地址后面的一个地址ROBase对应的就是

15、Image$$RO$$Base

16、,RWBase对应的是

17、Image$$RW$$Base

18、,由于ZI段是包含在RW段里的,所以

19、Image$$RW$$Limit

20、就等于

21、Image$$ZI$$lim

22、it

23、。下面给出一个例子,假设ROBase设为0x00000000,后面的RWBase地址是0x30000000,然后在Options选项中有Imageentrypoint,是一个初始程序的入口地址,设为0x00000000,。现在要做的就是将RWsection移到以0x30000000开始的地方,并且创造一个ZIsection。首先比较Image$$RO$$Limit和Image$$RW$$Base,如果相等,说明executionview下RWsection的地址和loadview下RWsection的地址相同,这样,不需要移动RWsection;如果不等,说明需要移动R

24、Wsection到它在executionview中的地方,把ROM里

25、Image$$RO$$Limt

26、开始的RW初始数据拷贝到RAM里面

27、Image$$RW$$Base

28、开始的地址,当RAM这边的目标地址到达

29、Image$$ZI$$Base

30、后就表示RW区的结束和ZI区的开始,接下去就对这片ZI区进行清零操作,直到遇到结束地址

31、Image$$ZI$$Limit

32、示例代码如下:IMPORT

33、Image$$RO$$Limit

34、IMPORT

35、Image$$RW$$Base

36、IMPORT

37、Image$$ZI$$Base

38、IMPORT

39、Image$$ZI$$Limit

40、IMPORTma

41、in;声明C程序中的Main()函数AREAStart,CODE,READONLY;声明代码段StartENTRY;标识程序入口CODE32;声明32位ARM指令ResetLDRSP,=0x40003F00;初始化C程序的运行环境LDRR0,=

42、Image$$RO$$Limit

43、;得到RW数据源的起始地址LDRR1,=

44、Image$$RW$$Base

45、;RW区在RAM里的执行区起始地址LDRR3,=

46、Image$$ZI$$Base

47、;ZI区在RAM里面的起始地址CMPR0,R1;检查RWsection的

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。