;//6.将数据段拷贝到ram中 将零初始化数据段清零 跳入C语言的main函数执行
;//到这步结束bootloader初步引导结束
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 %F1
;//在ARM里,LDRCC是一条条件执行指令。当前面的运算没有设C标志的时候,执行LDR。否则LDRCC就等效于NOP。
0
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 %B0
1
LDR r1, =|Image$$ZI$$Limit| ; Top of zero init segment
MOV r2, #0
2
CMP r3, r1 ; Zero init//将未初始化的全局变量清0
STRCC r2, [r3], #4 ;若r3<r1则先执行[r3]=r2,然后r3=r3+4//将r3指向的寄存器填0
BCC %B2
这段代码中并没有将FLASH中的程序搬到SDRAM中呀?
以下为我的理解,假设:2m NOR FLASH在bank0,8m sdram在bank6,我的程序为0x00100000(包括启动程序)
1)如果我设置ADS中ro base为0x00000000, rw base 为0x0c000000,
程序是不是只在FLASH中运行?而只是把FLASH 中已初始化的数据段(从0x00100000开始的一段数据)放入SDRAM中,
然后将未初始化的变量赋0(本来就在SDRAM中,不需要移动)-----〉问:我的理解对吗?
2)如果我设置ADS中ro base为0x0c000000, rw base 为0x0c200000,
那么程序是不是就不能下到FLASH中,只在SDRAM中运行,这样掉电,程序就消失了,对吗?
3)如果我设置ADS中ro base为0x00000000,rw base不设置
那么启动程序只会将ZI段清0,程序还是在FLASH中运行。
4) 问:如果我想把FLASH里的程序搬到SDRAM中运行(速度会快点)是否要另写代码?请各位朋友帮帮忙!
谢谢