;//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中运行(速度会快点)是否要另写代码?请各位朋友帮帮忙!
谢谢

 
					
				
 
			
			
			
						
			 我要赚赏金
 我要赚赏金 STM32
STM32 MCU
MCU 通讯及无线技术
通讯及无线技术 物联网技术
物联网技术 电子DIY
电子DIY 板卡试用
板卡试用 基础知识
基础知识 软件与操作系统
软件与操作系统 我爱生活
我爱生活 小e食堂
小e食堂

