打印

请教各位一个bootloader中的问题

[复制链接]
1231|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
huzhongmoshui|  楼主 | 2010-10-26 17:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如题,请教AT91RM9200从外部Flash中启动,bootloader将代码搬移结束后是怎么进入到SDRAM中运行的,程序上是怎么实现的?
需要重映射吗?
进入SDRAM中运行时,是以内部RAM的地址为0x0地址的,还是以SDRAM的首地址为0x0地址啊?
请教了。
代码贴出来,大家帮我分析一下
;****************************************************
adr r0, ResetEntry
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

InitRam
ldr r2, BaseOfBSS
ldr r3, BaseOfZero
0
cmp r2, r3
ldrcc r1, [r0], #4
strcc r1, [r2], #4
bcc %B0

mov r0, #0
ldr r3, EndOfBSS
1
cmp r2, r3
strcc r0, [r2], #4
bcc %B1

_main
__main
EXPORT _main
EXPORT __main

ldr lr, GotoMain
MOV_PC_LR ;宏定义,相当于MOV PC,LR

GBLS MainEntry
MainEntry SETS "Main"
IMPORT $MainEntry

GotoMain DCD $MainEntry
C函数:
void Main(void)
{
DisableInt(); //Disable interrupt

BoardInitStart();

在BoardInitStart()中的第一句话就是memcpy((char *)(0), (char *)__ENTRY, 0x1000);  
这一段应该是在SDRAM中了吧

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

19

帖子

0

粉丝