天嵌 ARM开发社区

 找回密码
 注册
查看: 2252|回复: 5

启动代码中问题分析!

[复制链接]
lemocai 发表于 2011-3-5 01:13:56 | 显示全部楼层 |阅读模式
NAND Flash启动时,启动代码中调用RdNF2SDRAM()这个函数实现复制NAND Flash代码到SDRAM,问题是此时代码是运行在4K Steppingstone中的,那是不是RdNF2SDRAM()被编译到这4K Steppingstone引导代码中?如何知道呢?

nand_boot_beg
        [ {FALSE}
                bl RdNF2SDRAM                        ;复制NAND Flash到SDRAM
        ]

        ldr        pc, =copy_proc_beg       

还有以下代码什么情况才执行
0     
       ldmia     r0!, {r4-r7}
       stmia      r2!, {r4-r7}
       cmp       r2, r3
       bcc  %B0

注释上说是把程序复制到RAM中;
但当从NAND Flash启动时,因为前面已经有复制到RAM的代码了(bl RdNF2SDRAM),故不会运行,当从RAM调试中启动时,也不用RAM复制到RAM,那只有一种可能,就是从NOR FLASH启动时,但NOR FLASH中可以直接运行代码,不需要把代码copy到sdram中;那这段代码是不是多余的?
望各位赐教,不胜感激!
 楼主| lemocai 发表于 2011-3-6 20:30:05 | 显示全部楼层
怎么都没有人会的呢?
对于第二个问题,我搞明白了!
给大家分析,看对不对:

0     
       ldmia     r0!, {r4-r7}
       stmia      r2!, {r4-r7}
       cmp       r2, r3
       bcc  %B0
只有从NAND Flash启动时,才运行!但为什么要把代码COPY到RAM呢,那是因为当编译时的链接地址为RAM地址时,如:0X30000000,就会把NAND Flash代码COPY到RAM,当链接地址0x00000000时,这段代码是不会运行的!在这段代码的前面有判断!
回复

使用道具 举报

学海无涯 发表于 2011-3-7 11:19:32 | 显示全部楼层
嗯,我支持你的说法
回复

使用道具 举报

 楼主| lemocai 发表于 2011-3-7 20:17:11 | 显示全部楼层
第一个问题解决了!
往往自己新建的工程不行,例程的可以,都有可能是这个问题!启动代码中RdNF2SDRAM()没搞懂!
注意了,RdNF2SDRAM()一定要编译到前面4K代码了,否则程序不能运行!我自己做的bootloader终以可以运行了!
回复

使用道具 举报

天嵌_support1 发表于 2011-3-8 15:04:42 | 显示全部楼层
:)
回复

使用道具 举报

mydream0110 发表于 2011-12-19 20:40:29 | 显示全部楼层
学习了,我最近正在看祼机的启动代码.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号-2 )

GMT+8, 2025-8-3 16:11 , Processed in 2.040879 second(s), 20 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表