我用的开发板的SDRAM为64M,NAND FLASH也是64M,从NAND FLASH启动,ARM Linker的ro-base 设为0x30200000,rw-base设为空。2440init.s有如下相关代码: LDR r0, =|Image$$RO$$Limit| ; Get pointer to ROM data LDR r1, =|Image$$RW$$Base| ; and RAM copy LDR r3, =|Image$$ZI$$Base| ;Zero init base => top of initialised data CMP r0, r1 ; Check that they are different BEQ %F2 1 CMP r1, r3 ; Copy init data LDRCC r2, [r0], #4 ;--> LDRCC r2, [r0] + ADD r0, r0, #4 STRCC r2, [r1], #4 ;--> STRCC r2, [r1] + ADD r1, r1, #4 BCC %B1 2 LDR r1, =|Image$$ZI$$Limit| ; Top of zero init segment MOV r2, #0 3 CMP r3, r1 ; Zero init STRCC r2, [r3], #4 BCC %B3 经过编译及反汇编发现代码是从0x30200000开始的,说明程序是在SDRAM运行,由于我的程序一直没完成,就没有烧写到FALSH,那在烧写时是否应该将ro-base 设为0x0,rw-base设为0x30200000,让程序的RO段在FLASH中运行,而RW段在SDRAM中运行,是这样的吗?我一同学在ro-base 设为0x30200000,rw-base设为空的情况下直接将程序烧到FLASH的0x0也可运行,怎么回事? |