adr r0, ResetEntry //adr是伪指令,此处是将入口处的地址赋予r0
ldr r1, BaseOfROM //BaseOfROM是在使用ADS时所设定的ROBase的基址(如0xc008000)
cmp r0, r1 //比较入口地址与ROBase的基址
ldreq r0, TopOfROM //如果相等,将ROLimit的地址值赋予r0
beq InitRamData //如果ResetEntry==BaseOfROM 既RO base为0x0它将在flash 中运行,不等要进行代码搬迁
ldr r2, =CopyProcBeg
sub r1, r2, r1
add r0, r0, r1
ldr r3, =CopyProcEnd
0
ldmia r0!, {r4-r7}
stmia r2!, {r4-r7}
cmp r2, r3
bcc %B0 //先把拷贝代码搬迁到SDRAM中
ldr r3, TopOfROM
ldr pc, =CopyProcBeg
CopyProcBeg
0
ldmia r0!, {r4-r11}
stmia r2!, {r4-r11}
cmp r2, r3
bcc %B0
CopyProcEnd
假设我在ADS中设定ROBASE为0xc008000
问题1:CopyProcBeg 和CopyProcEnd的地址是位于RAM区还是ROM区?个人分析了一下,位于RAM区这个将stage2搬到RAM中执行的程序才正确。如果是ROM区的话就不太对了,还请大虾指教。
问题2:
CopyProcBeg
0
ldmia r0!, {r4-r11}
stmia r2!, {r4-r11}
cmp r2, r3
bcc %B0
CopyProcEnd
这段程序到底是什么意思?不是很懂,希望大虾详细讲解一下
问题3:ADS中设定了ROBASE值编译后生成了BIN文件。下载以后是不是能将bootloader的stage2复制到RAM区中执行?还是仅仅是在调试模式下才能将stage2复制到RAM区中执行?
希望大虾讲解,谢谢