|
本帖最后由 扫帚菜~~ 于 2012-5-14 22:29 编辑
分析了一下启动代码,有这么一个地方不是太明白:
;===========================================================
copy_myself ;boot from nand flash
[ {TRUE}
bl RdNF2SDRAM
]
ldr pc, =copy_proc_beg
;===========================================================
copy_proc_beg
adr r0, __ENTRY
ldr r2, BaseOfROM
cmp r0, r2
ldreq r0, TopOfROM
beq InitRam
ldr r3, TopOfROM
0
ldmia r0!, {r4-r7}
stmia r2!, {r4-r7}
cmp r2, r3
bcc %B0
sub r2, r2, r3
sub r0, r0, r2
进入RdNF2SDRAM()这个函数中又发现定义了这么一个东西:unsigned char * to = (unsigned char *)0x30000000;
S3C2440的运行域起始的地址为0x30000000,,上文汇编语言中的BaseOfRom就等于0x30000000,在
RdNF2SDRAM()这个函数中以经把所有代码搬到0x30000000这个地址了,为什么在Cop_proc_beg中还要搬一次呢,我知道我哪里肯定理解错了,但是错哪了呢,谢谢大家。
|
|