2.RO中的数据是不需要再次拷贝到运行地址处的。
3.RO的代码的加载地址和运行地址是相同的。
4.说明:将数据段拷贝到RAM中,将ZI数据段清零,跳入C语言的main函数执行。到这里Bootloader初步引导结束。拷贝|Image$$RO$$Limit|起始的大小为(|Image$$ZI$$Base|-|Image$$RW$$Base|)的数据拷贝到|Image$$RW$$Base|对应的数据单元处。
;********************************************************
;* Copy and paste RW data/zero initialized data *
;********************************************************
LDR r0, =|Image$$RO$$Limit| ; Get pointer to ROM data,
;获得ROM中的加载/运行时的RW地址
LDR r1, =|Image$$RW$$Base| ; and RAM copy
;获得运行时的RW地址
LDR r3, =|Image$$ZI$$Base| ;获得运行时的ZI地址
;Zero init base => top of initialised data
CMP r0, r1 ; Check that they are different
;比较指定的加载RW地址是否与运行时的RW地址相同。
BEQ %F1 ;如果相同不需要拷贝RW数据,因为它们的在加载和运行时的地址相同
0
CMP r1, r3 ; Copy init data,因为对RW指定了不同的加载和运行地址,因此需要拷贝
LDRCC r2, [r0], #4 ;--> LDRCC r2, [r0] + ADD r0, r0, #4
STRCC r2, [r1], #4 ;--> STRCC r2, [r1] + ADD r1, r1, #4
BCC %B0
1
LDR r1, =|Image$$ZI$$Limit| ;Top of zero init segmen
;初始化ZI数据为0
MOV r2, #0
2
CMP r3, r1 ; Zero init
1.部分资源来自网络,经ET电子归类整理,旨在服务电子爱好者并无商业目的,不保证正确性与完整性.
2.如果您觉得本站资源对您有用,请告知您的好友,用搜索引擎搜"ET电子"即可.

