tarzar 发表于 2011-9-3 10:41:24

TQ2440

通过硬件引脚设置从NORFLASH启动,
那么上电首先从0x0000 0000 (NORFLASH 共2M)运行启动代码,把FLASH的代码段和数据段全部复制到0x3000 0000(外部RAM,共64M),然后跳到RAM(跳到main)去运行,此时RAM的也有一份启动代码(该启动代码在main函数前面),那么这段启动代码是不是相当永远都不会运行啊?


但是我们使用仿真器时,却在运行RAM的启动代码,但是本来自代码就是就在RAM运行,此时又从NOR里拷贝数据到RAM,这样在RAM运行的代码不出问题?

maxbiger 发表于 2011-9-3 12:31:29

肯定 不会执行 两次了,,,启动代码有的。。

tarzar 发表于 2011-9-3 14:05:32

谢谢maxbiger

仔细看了启动代码,是有这样描述


copy_proc_beg_yes_or_no                        ;若是在板从norflash启动,先把用来’拷贝装载域RO段到运行域的程序‘拷贝到SDRAM中,并在SDRAM中执行此程序,以便快速完成装载域RO段程序到运行域的拷贝
                                                                ;若是处于调试状态,或者nandfalsh启动模式的拷贝代码已经完成,则不执行’拷贝装载域RO段到运行域‘的拷贝操作,直接跳到初始化ZI段的子程序处执行
                                                               
        adr        r0, ResetEntry                        ;若是norflash启动模式,r0指向的是装载域RO段起始地址,否则r0指向的是运行域的RO段起始地址
        ldr        r1, BaseOfROM                        ;r1指向运行域RO段起始地址
        cmp        r0, r1                                        ;判断两者是否相等
        ldreq        r2, BaseOfZero                ;两者相等,说明是’处于调试状态‘或者是’nandflash启动模式并且程序已经拷贝到SDRAM中‘而且’已经在SDRAM中运行‘,让r2指向运行域ZI段的开始地址
                                                                ;注意此时运行域已经存在了RW段,所要做的仅仅是初始化ZI段
        beq        init_zi_beg                                ;直接跳转到初始化ZI段子程序
页: [1]
查看完整版本: TQ2440