load_region_name (base_address | ("+" offset)) [attribute_list] [ max_size ]
load_region_name:下载区域名称,最大有效字符数31。
base_address:本区域内部目标被连接到的地址(按字对齐)。
+offset:相对前一个下载区域的偏移量(4的整数倍,如果为第一个区域)。
attribute_list:PI,OVERLAY,ABSOLUTE,FIXED,UNINIT。
PI: 位置独立。
OVERLAY: 覆盖。
ABSOLUTE: 绝对地址。
FIXED: 固定地址,下载地址与执行地址具有该地址指示确定。
UNINIT: 未初始化数据。
RELOC:无法明确指定执行区域具有该属性,而只能通过继承前一个执行区或父区域获得。
对于PI,OVERLAY,ABSOLUTE,FIXED,我们只能选择一个,缺省属性为ABSOLUTE。一个执行区域要么直接继承其前面的执行区域的属性或者具有属性为ABSOLUTE。
具有PI,OVERLAY,RELOC属性的执行区域允许其地址空间重叠,对于BSOLUTE,FIXED 属性执行区域地址空间重叠Armlink会报错。
max_size:可选,他用于指使Armlink在实际分配空间大于指定值时报错。
例子:
uint32 g_stay_iap __attribute__ ((section ("ER_RSV")));
ROM_LOAD 0x00000000
{
ROM_EXEC 0x00000000
{
* (RESET, +First)
*(+RO)
}
; ROM_KEY 0x20000 FIXED
; {
; key_table_new.o(+RO)
; }
; 将全局变量定位于RAM的起始位置
IRAM_OVERLAY 0x40000000 OVERLAY
{
*.o (ER_RSV)
}
IRAM0 0x40000040
{
* (+RW,+ZI)
}
IRAM1 +0
{
*.o (MyStacks)
}
; HEAP +0 UNINIT
; {
; Startup.o (Heap)
; }
; 将UserStack定位于RAM的最高端地址
USER_STACKS 0x40007FE0 UNINIT
{
*.o (Stacks)
}
}
;重定向__user_initial_stackheap 函数
;分配新的bottom_of_heap地址等,R0-R3是函数必须的返回值,返回bottom_of_heap的值
;通过分散加载描述文件,重定向其位置,bottom_of_heap等已经在Startup.s中定义为DATA类型
__user_initial_stackheap
LDR r0,=bottom_of_heap
; LDR r1,=StackUsr
LDR r2,=top_of_heap
LDR r3,=bottom_of_Stacks
MOV pc,lr