天嵌 ARM开发社区

 找回密码
 注册
查看: 2020|回复: 4

关于2440启动代码的问题

[复制链接]
扫帚菜~~ 发表于 2012-5-14 22:20:03 | 显示全部楼层 |阅读模式
本帖最后由 扫帚菜~~ 于 2012-5-14 22:29 编辑

分析了一下启动代码,有这么一个地方不是太明白:
;===========================================================
copy_myself    ;boot from nand flash
[ {TRUE}
bl RdNF2SDRAM
]
ldr pc, =copy_proc_beg
;===========================================================
copy_proc_beg
adr r0, __ENTRY
ldr r2, BaseOfROM
cmp r0, r2
ldreq r0, TopOfROM
beq InitRam
ldr r3, TopOfROM
0
ldmia r0!, {r4-r7}
stmia r2!, {r4-r7}
cmp r2, r3
bcc %B0

sub r2, r2, r3
sub r0, r0, r2
   进入RdNF2SDRAM()这个函数中又发现定义了这么一个东西:unsigned char * to = (unsigned char *)0x30000000;
S3C2440的运行域起始的地址为0x30000000,,上文汇编语言中的BaseOfRom就等于0x30000000,在
RdNF2SDRAM()这个函数中以经把所有代码搬到0x30000000这个地址了,为什么在Cop_proc_beg中还要搬一次呢,我知道我哪里肯定理解错了,但是错哪了呢,谢谢大家。


connortao 发表于 2012-5-14 22:51:07 | 显示全部楼层
Cop_proc_beg是针对从norflash启动时做搬运。在这个函数开头,有这么一段:
  1.         adr        r0, ResetEntry;注意,此处用adr指令,它把运行地址装载到给定寄存器中
  2.         ldr        r2, BaseOfROM        ;此处用ldr指令,加载绝对地址
  3.         cmp        r0, r2                ;比较rom基地址和入口地址是否相等:相等则说明本程序在norflash运行,不相等说明已经在ram运行
  4.         ldreq        r0, TopOfROM
  5.         beq        InitRam       
复制代码
假如从nandflash启动,就会直接跳到InitRam去初始化ram数据,你不用担心会搬运两次代码。
借我你的一生 发表于 2012-5-14 23:26:32 | 显示全部楼层
这里是关键...
 楼主| 扫帚菜~~ 发表于 2012-5-15 08:21:13 | 显示全部楼层
connortao 发表于 2012-5-14 22:51
Cop_proc_beg是针对从norflash启动时做搬运。在这个函数开头,有这么一段:假如从nandflash启动,就会直接跳 ...

噢,恍然大悟,3Q...
 楼主| 扫帚菜~~ 发表于 2012-5-15 08:21:44 | 显示全部楼层
借我你的一生 发表于 2012-5-14 23:26
这里是关键...

嗯嗯,晓得了,谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

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

GMT+8, 2024-9-28 13:24 , Processed in 1.035196 second(s), 19 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

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