以下是别人在S3C2440的一段起动代码.Ro_Base:0x0 Rw_Base:0x30000000,从以下代码来看,先是将ROM里的RO和RW段全拷贝到了RAM的起始位置,那么在接下来的代码中有:CMP R0, R1,这样又会拷贝RW段到RO,从ARM Linker的设置来看,数据不就被复盖了吗?请大家帮忙解答一下?<br />;---------------------------------------------------<br /><br /> ldr r0, = pROM_BASE ;ROM 0x0 <br /> ldr r1, = pRAM_BASE ;RAM 30000000 <br /> ldr r2, = |Image$$RO$$Limit|<br /> ldr r3, = |Image$$ZI$$Base|<br /> ldr r4, = |Image$$RW$$Base|<br /><br /> sub r3, r3, r4 <br /> add r2, r2, r3 <br />COPY_CODE<br /> cmp r0, r2<br /> ldrne r3, [r0], #4<br /> strne r3, [r1], #4<br /> bne COPY_CODE<br /><br /><br />;-----------------------------------------------------<br /><br />InitVar<br /> IMPORT |Image$$RO$$Limit| <br /> IMPORT |Image$$RW$$Base| <br /> IMPORT |Image$$ZI$$Base| <br /> IMPORT |Image$$ZI$$Limit| <br /> <br /> LDR R0, =|Image$$RO$$Limit| <br /> LDR R1, =|Image$$RW$$Base| <br /> LDR R3, =|Image$$ZI$$Base| <br /> <br /> CMP R0, R1 <br /> BEQ %F1<br />0 <br /> CMP R1, R3 <br /> LDRCC R2, [R0], #4<br /> STRCC R2, [R1], #4<br /> BCC %B0<br />1 <br /> LDR R1, =|Image$$ZI$$Limit| <br /> MOV R2, #0<br />2 <br /> CMP R3, R1 <br /> STRC R2, [R3], #4<br /> BCC %B2 <br /> <br /> MOV PC, LR<br /><br />
|