问题分析:
分散加载描述文件是一个文本文件,它向链接器描述目标系统的存储器映射。如果通过命令行使用链接器,则描述文件的扩展名并不重要。分散加载文件指定:
1)每个加载区的加载地址和最大尺寸;
2)每个加载区的属性;
3)从每个加载区派生的执行区;
4)每个执行区的执行地址和最大尺寸;
5)每个执行区的输入节。
从描述文件的格式中就可以看出加载区、执行区和输入节的层次关系。
问题解答:
程序正确编译生成目标文件以后, 就会链接成可执行的文件, 这个过程中要用到分散加载文件, 它决定可执行的代码在存储器中存放的位置, 这在复杂的程序(例如vivi对linux内核的引导)中是很重要的. 下面是一个简单的分散加载文件的例子:
; *************************************************************
; *** scatter-loading description file generated by uvision ***
; *************************************************************
;run in flash
lr_rom1 0x00000000 { ; load region
er_rom1 0x00000000 0x0200000 { ; load address = execution address
*.o (reset, first)
*(inroot$$sections)
.any ( ro)
}
rw_ram1 0x30000000 0x4000000 { ; rw data
.any ( rw zi)
}
rw_iram1 0x40000000 0x00001000 {
.any ( rw zi)
}
}
在上面的例程中, 代码从地址0x00000000处开始存放,并且将reset程序段放在最开始处, 而可读写的数据从地址0x30000000处开始存放. 分散加载文件的段的名字(例如lr_rom1, er_rom1等)可以是任意的名字。