bootloader的一点问题
在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, , #4
strcc r4, , #4
bcc %B1
mov r0, #0
ldr r2, EndOfBSS
add r2, r2, r3
3
cmp r1, r2
strcc r0, , #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, , #4
str r3, , #4
subs r2, r2, #1
bne %B0
这里为什么在remapmemory地址处copy 32个字节的内容到rambaseaddr+remapmemory处?作什么用?地址映射不是在boot中进行吗?rambaseaddr+remapmemory在哪个region(RO?RW?ZI?) ?我没4510的板子,所以请大家帮忙看看,谢谢! RomBaseAddr EQU 0
RomEndAddr EQU &20
RamBaseAddr EQU &100
RamEndAddr EQU &200
左移16位分别是Flash和Ram的起始和结束地址
copy 那32个字节我理解是copy异常向量表,因为启动后Ram被映射到0x0 那位能讲讲这个remap是怎么做的?我没搞懂。我看rambaseaddr被定义为&100,那么它怎么会映射到0处?还是说这个&100是被映射前的地址? 这里的BaseOfRom和 ResetEntry地址是什么关系啊?程序在哪个地方开始转到ram里去执行呢? &100是映射前的起始地址
具体怎么映射可以参考4510的数据手册 谢谢support!由于没有太多精力放在4510B的bios上,所以没有看它的数据手册,我的板子是44B0,希望能得到你的指点。44B0不支持remap,bios要比45b0简单点,所以问题不是太大。再次表示感谢!
页:
[1]