|
在step 3中有简化的bootloader,其中
RomBaseAddr EQU 0
RomEndAddr EQU &20
RamBaseAddr EQU &100
RamEndAddr EQU &200
……
实在搞不懂这里的&20,&100,&200是什么地址,看下面的好像是省略了16个0吗?这些地址安排上是自己分配的吗?
adr r0, ResetEntry
mov r3, #(RamBaseAddr<<16)
ldr r1, BaseOfROM
ldr r2, TopOfROM
add r1, r1, r3
add r2, r2, r3
0
ldmia r0!, {r4-r11}
stmia r1!, {r4-r11}
cmp r1, r2
bcc %B0
sub r1, r1, r2
sub r0, r0, r1
ldr r1, BaseOfBSS
ldr r2, BaseOfZero
add r1, r1, r3
add r2, r2, r3
1
cmp r1, r2
ldrcc r4, [r0], #4
strcc r4, [r1], #4
bcc %B1
mov r0, #0
ldr r2, EndOfBSS
add r2, r2, r3
3
cmp r1, r2
strcc r0, [r1], #4
bcc %B3
我看了很多bootloader介绍,copy rom to ram只需要把第二阶段的copy过去,我看这里是从resetentry开始的,有没有关系呢?
adr r0, ResetEntry
ldr r1, =RemapMemory
ldr r2, BaseOfROM
sub r2, r1, r2
add r0, r0, r2
add r1, r2, r3
mov r2, #32
0
ldr r3, [r0], #4
str r3, [r1], #4
subs r2, r2, #1
bne %B0
这里为什么在remapmemory地址处copy 32个字节的内容到rambaseaddr+remapmemory处?作什么用?地址映射不是在boot中进行吗?rambaseaddr+remapmemory在哪个region(RO?RW?ZI?) ?我没4510的板子,所以请大家帮忙看看,谢谢! |
|