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