感谢twentyone给我们提供了这么好的资料,使我们少走了很多弯路,在此谢谢了。
不过我对你写的程序还是有两点疑问,如果你有空,还望你解答一下:
;Part 5
;***************************************************************
;Self copy from FLASH to SDRAM
LDR r0, =|Image$$RO$$Base|
LDR r1, =|Image$$RO$$Limit|
LDR r2, =|Image$$RW$$Base|
LDR r3, =|Image$$RW$$Limit|
SUB r1, r1, r0
SUB r3, r3, r2
ADD r1, r1, r3
LDR r2, =0x200000 ;@2M
(ADD R2,R2,R0 ;应该加上这一句。
LDR
COPY
LDR r3, [r0], #4
STR r3, [r2], #4
SUBS r1, r1, #4
BNE COPY
第一个问题就是上面这短从FLASH拷贝RO,RW到SDRAM,从你写的程序中可以看到,在FLASH中,你开始搬移的地址是|Image$$RO$$Base| ,结束的地址是 |Image$$RO$$Base| +R1,(这里的R1就是上面算出的RO加RW的容量),但是你搬到SDRAM的起始地址是0x200000 (也就是SDRAM的起始地址0X0),结束地址是0x200000 +R1。很明显|Image$$RO$$Base| 并不总是恒等于OX0的!!!!这跟ARMLINK里的RO设置有关。所以你上面这样写我觉得不是很妥。应该加上如上的一句。
另外一个问题是:我因为没有具体写过BOOTLOADER,不知道中断向量表是怎么处理的。如果我们把RO设为0X0,那岂不是把中断向量表给覆盖了。那又怎么移植?还是OS能自动处理,在BOOTLOAD不用管这一步的?/
关键词:
twentyone
写的
bootloade
看不