嵌入式软件开发之: 映像文件存储器映射调整
数据。
另外,也可以将-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 address2
指定包含RW输出段的域的载入地址和执行地址。
· -split
将默认的单一加载域(包含RO和RW输出段的加载域)分成两个加载域。一个载入域包含RO输出段,另一个包含RW输出段。
下面的例子显示了与使用-ro-base 0x8000 -rw-base 0x040000 -split等效的Scatter文件。
LOADREG1 0x8000 ;指定第一个加载域的起始地址为0x8000
{
ROM +0
{
*(+RO)
}
}
LOADREG2 0x040000 ;第二个加载域的起始地址为0x40000
{
RAM_RW +0
{
*(+RW) ;放置所有的RW段
}
RAM_ZI +0
{
*(+ZI)
}
}
使用上例中的Scatter文件创建的内存映像有两个加载域,分别为LOADREG1和LOADREG2,它们的起始地址分别为0x8000和0x040000。
该映像文件有三个执行域,分别为ROM、RAM_RW和RAM_ZI,它们分别包含RO、RW和ZI输出段。ROM的执行地址是0x8000。
RAM_RW执行域与ROM不相邻。其执行地址是0x040000。
执行域RAM_ZI紧随RAM_RW域放置。
可以使用-reloc选项和-split选项配合使用,指定两个加载域具有RELOC属性。
下面的例子显示与使用-ro-base 0x8000 -rw-base 0x040000 -reloc -split等效的Scatter文件。
LOADREG 0x010000 RELOC
{
ROM + 0
{
* (+RO)
}
}
LOADREG 0x040000 RELOC
{
RAM_RW + 0
{
* (+RW)
}
RAM_ZI +0
{
* (+ZI)
}
}
- 基于DSP的导弹仿真器嵌入式组件设计(04-30)
- 为嵌入式软件建立统一软件系统框架的方法详介(05-23)
- 在VIM中实现对嵌入式软件的调试(08-06)
- 基于仿真的嵌入式软件白盒覆盖测试系统设计(08-26)
- 嵌入式软件运行剖面建模及测试用例生成(11-06)
- 嵌入式软件与硬件的集成测试过程研究(11-16)