最近做了一个简单的ADS工程,程序下载到NOR固化,底层的搬运代码如下. ldr r0, =|Image$$RO$$Base| ; ldr r1, =|Image$$RO$$Limit| ; Get pointer to ROM data ldr r2, =|Image$$RW$$Base| ; and RAM copy ldr r3, =|Image$$ZI$$Base| ;Zero init base => top of initialised data SUB r1,r1,r0 SUB r3,r3,r2 ADD r1,r1,r3 0 LDR r3,[r0],#4 STR r3,[r2],#4 SUBS r1,r1,#4 BNE %B0
以上代码是把RORWI段全部搬运或init到了SDRAM中,在我的印象中要跳往SDRAM运行程序,需要执行一条LDR PC,0x30000000的指令,然后再调用BL main跳转到主函数运行. 而现在我加了LDR PC,0x30000000的指令后make总提示这样的error: A1114E: Expected register relative expression ,双击error就是指向LDR PC,0x30000000这条指令处. 去掉这条指令编译连接通过,固化程序到NOR后运行正常,要比只COPY RW/ZI段到SDRAM快很多,说明程序正常.
现在的疑问是:为什么不需要LDR PC,0x30000000这条指令呢,BL main就可以直接跳转到SDRAM中执行了吗,请有此方面经验的高人赐教,多谢了... |