微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 嵌入式软件开发之: 映像文件存储器映射调整

嵌入式软件开发之: 映像文件存储器映射调整

时间:08-30 来源:3721RD 点击:

个执行域组成。执行域放在存储器映像中的相邻位置。

选项中的address指定了加载域和第一个执行域的起始地址(加载域和第一个执行域的起始地址相同)。

下面的例子显示了与"-ro-base 0x8000"命令行选项等价的Scatter文件。

LOADREG 0x8000 ;定义加载域的起始地址0x8000

{ ;

ROM +0 ;定义第一个执行域的起始地址,该地址与加载域的起始地址相同,为0x8000

;

{

*(+RO) ;该域放置所有的RO段

}

RAM_RW +0 ;定义第二个执行域,起始地址为0x8000+ROM段大小

;

{

*(+RW) ;将所有的RW代码放置在该段

}

RAM_ZI +0 ;定义ZI段

;ZI段的起始地址为0x8000+ROM段的大小+RAM_RW段的大小

;

{

*(+ZI) ;放置所有的ZI段

}

}

上例中的Scatter文件创建的映像由一个加载域和三个执行域组成。加载域的起始地址为0x8000。三个执行域分别为ROM、RAM_RW和RAM_ZI,它们分别包含RO、RW和ZI输出段。RO和RAM_RW为启动域,RAM_ZI在执行时动态创建。ROM的执行地址是0x8000,通过对执行区描述使用+offset格式的基址指定程序,所有三个执行域在存储器映射中相邻放置,即前一个执行域的末尾放置后一个执行域。

如果链接程序时,将-ro-base选项和-ropi混合使用,则可以生成位置无关代码。

下面的例子显示了与-ro-base 0x8000 -ropi等效的Scatter文件。

LOADREG 0x8000 PI ;加载域的地址为0x8000,并指定该加载域的属性为PI

{

ROM +0 ;第一执行域的地址为0x8000,而且该执行域继承了加载域的PI属性

;所有该域的执行地址是可变的

{

*(+RO) ;放置所有的RO段

}

RAM_RW +0 ABSOLUTE ;使用ABSOLUTE属性代替PI属性

{

*(+RW) ;放置RW段

}

RAM_ZI +0

{

*(+ZI)

}

}

执行域ROM从LOADREG加载域继承 PI 属性。下一个执行域 RAM_RW 被标记为 ABSOLUTE 所以其不再具有PI属性。另外,因为RAM_ZI 域使用了+0的偏移量,所以它从 RAM_RW域继承 ABSOLUTE 属性。

2.-ro-base和-rw-base选项的替换

使用-ro-base和-rw-base选项链接的映像也由一个加载域和三个执行域组成,它与类型1生成的映像十分相似,只是此类映像的RW执行区与RO执行区不相邻。

在-ro-base选项中指定加载域的起始地址,在-rw-base选项中指定执行域的地址。

下面的例子显示与使用-ro-base 0x8000 -rw-base 0x040000等效的分散载入描述。

LOADREG 0x8000 ;定义加载域的起始地址为0x8000

{

ROM_RO +0 ;定义第一个执行域的起始地址为0x8000

{

* (+RO) ;在该域中放置所有的RO段

}

RAM_RW 0x040000 ;第二个执行域名为RAM_RW,起始地址为0x40000

{

* (+RW) ;放置所有的RW段

}

RAM_ZI +0

{

* (+ZI) ;放置所有的ZI段

}

}

该Scatter文件创建的映像有一个名为LOADREG的加载域,载入地址是0x8000。该映像有3个执行区,分别为ROM、RAM_RW和RAM_ZI,它们分别包含RO、RW和ZI输出段。其中,RO域是启动域,执行地址是0x8000,RAM_RW执行域与第一个执行域RAM_RW不相邻。其执行地址是0x040000。紧随其后的执行区RAM_ZI放置所有的ZI数据。

另外,也可以将-rw-base和位置无关选项-rwpi配合使用,将RW输出节的执行区标记为位置独立。

下面的例子显示了使用-ro-base 0x8000 -rw-base 0x40000 -rwpi等效的Scatter文件。

LOADREG 0x0x8000 ;定义加载域的起始地址为0x8000

{

ROM +0 ;定义第一执行域,其起始地址为0x8000

{

*(+RO) ;放置所有RO段

}

RAM_RW 0x40000 PI ;设置第二执行域的属性为PI属性

{

*(+RW)

}

ER_ZI +0 ;继承了PI属性

{

*(+ZI)

}

}

第一个执行域ROM从加载域LOADREG继承ABSOLUTE属性。第二个执行区RAM_RW标记为PI属性。另外,因为ER_ZI区的偏移为+0,所以它从RAM_RW区继承PI属性。

3.-reloc -split选项的替换

使用-split选项生成的映像由两个加载域和三个执行域组成。

使用以下的链接选项重新分割并定位加载域。

· -reloc

组合使用-reloc -split生成具有两个加载域的映像,并且使加载域具有RELOC属性。

· -ro-base address1

指定包含RO输出段的域的载入地址和执行地址。

· -ro-base

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

网站地图

Top