微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 引用 ADS1.2下ARM映像文件

引用 ADS1.2下ARM映像文件

时间:11-10 来源:互联网 点击:
ARM中的各种源文件(包括汇编文件,C语言程序及C++程序等)经过ARM编译器编译后生成ELF(Executable and linking format)格式的目标文件。这些目标文件和相应的C/C++运行 时用到的库经过ARM连接器处理后,生成ELF格式的映像文件(image),这种ELF格式的映像文件是一种可执行文件,可被写入嵌入式设备的ROM 中。

bin文件是真正的可执行文件,axf文件是ARM的调试文件,除了包含bin的内容之外,还附加了其他的调试信息,这些调试信息加在可执行的二进制数据的前面,所以把axf文件写到ARM的指令执行地址(一般是0x0)将不能运行,因为在此地址前几十个字节的数据不是可执行的二进制数据,而是头部的调试信息;而bin文件正是去掉了调试信息的可以执行的“精华”部分。

ARM映像文件的组成:ARM映像文件是一个层次性结构的文件,包括了域(region),输出段(output section)和输入段(input section)。一个映像文件由一个或者多个域组成;每个域最多由三个输出段组成组成;每个输出段又包含一个或者多个输入段;各输入端包含了目标文件中的代码和数据。

相关术语:

1。域 (region):一个映象文件由一个或多个域组成。反过来说域是组成映象文件的最大的结构。所谓域,指的就是整个bin映像文件所处在的区域,它又分为加载域和运行域。加载域就是映像文件被静态存放的工作区域,一般来说flash里的整个bin文件所在的地址空间就是加载域,当然程序一般都不会放在flash里执行,一般都会搬到sdram里运行工作,它们在被搬到sdram里工作所处的地址空间就是运行域。一个域通常映射到一个物理存储器上,如ROM和RAM等。

2。段(Section):一个域包含一个或多个输出段,一个输出段包含一个或多个输入段。我们输入的代码,一般有代码部分和数据部分,这就是所谓的输入段,每个输入段都有相应的属性,可以为只读(ro),可读写的(rw)以及初始化成0的(zi)。

3。RO,RW,ZI:输入段中包含4类内容:代码、已经初始化的数据、未经初始化的存储区域、内容初始化为0的存储区域。每个输入段有相应的属性,可以为只读(RO)、可读写(RW)以及初始化为0的(ZI)。ARM连接器根据各输入段的属性将这些输入段分组,再组成对应属性的输出段。对于加载域中的输出段,一般来说ro段后面紧跟着rw段,rw段后面紧跟着zi段。在运行域中这些输出段并不连续,但rw和zi一定是连着的。zi段和rw段中的数据其实可以是rw属性。

注:(1); C中的指令以及常量被编译后是RO类型数据。

(2); C中的未被初始化或初始化为0的变量编译后是ZI类型数据。

(3); C中的已被初始化成非0值的变量编译后市RW类型数据。

4。加载时地址:是映象文件位于存储器(还没有运行,一般在ROM中)时的地址

5。运行时地址:是映象文件运行时的地址。

通常一个映像文件中包含若干个域,各个域又包含若干的输出段。ARM连接器就需要知道如下信息以决定生成相应的映像文件。烧录到ROM中的image文件与实际运行时的ARM程序之间并不是完全一样的。因此就有必要了解ARM程序是如何从ROM中的image到达实际运行状态的。

*分组信息 :决定如何各将输入段组织成相应的输出段和域。
*定位信息 :决定各个域在存储器空间中的起始地址。

根据映像文件中地址映射的复杂程度有两种方法告诉ARM连接器这些相关的信息。

(1)当映像文件中最多包含两个域,每个域最多有三个输出段时,可以使用连接器选项告诉连接器相关的地址映射关系。选项有-ropi,-rwpi,-ro_base,-rw_base,-split等。

(2)当映像文件地址映射关系更复杂时,可以使用一个配置文件(分散加载文件)告诉连接器相关的地址映射关系。ARM映像文件

数据移动:

上面已经提到了RW段加载地址一般在ROM中,运行时需要被搬运到RAM中。加载时状态的映象文件中的RO、RW和ZI的地址都是临时的,他们在运行时要被BootLoader程序搬运到真正的运行时地址。这个地址是连接时设置的地址。这个问题很重要,如果在编译前没有正确的设置运行时地址,那么程序就不能被搬运到正确的RAM地址中运行。

了解了以上内容,那么就可以打开ADS1.2来看一下具体的设置。

打开ADS的一个工程后,点击如下图所示的Debug Settings按钮打开对话框。打开Target Settings对话框后,在左边列表中选择Linker选项。点击它下面的的ARM Linker。然后在右面的选项卡选择Output选项卡。如下图所示。

看看ADS 开发文档ARMDeveloper suite 1.2 的ADS_CodeWarriorIDEGuide.pdf 怎么说的

RO Base This text field sets both the load address

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top