|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
大家好! 我是个新手,最近正在看VIVI的源代码,有些问题想请教大家.
如果我们是利用NAND FLASH来启动的话,资料上介绍说,在复位后会把NAND FLASH的前4K的内容拷贝到Steppingstone这块内部的RAM中.我想请问,ARM的启动都应该是从0X00这个地址开始运行的,那我们把代码都考到Steppingstone中了,那怎么运行呢? 是通过MMU映射,把Steppingstone映射到0X00了吗?如果映射了 是通过什么映射的?没有看到有代码实现这个功能啊. 还有就是如果是映射了, 那代码已经在RAM中执行了,VIVI代码中又再次把代码复制到SDRAM中,这样有必要吗? 那不是还需要把新复制好的代码要映射到0X00处,可是也没有这个代码啊, 如果复制好了后,那不是在两块RAM中都有MAIN.C的程序了吗?那这段程序
@ jump to ram
ldr r1, =on_the_ram
add pc, r1, #0
nop
nop on_the_ram:
ldr sp, DW_STACK_START @设置堆栈指针
mov fp, #0 @ no previous frame, so fp=0
mov a2, #0 @ set argv to NULL
bl main @ call main,跳转到init/main.c中的main函数中
最后是跳到哪个RAM中呢?
如果是在NOR FLASH中启动,那我们就直接把NOR FLASH接到0X00处,这样就可以直接运行了, 在代码中也有把VIVI代码复制到RAM中的代码,那这里有是怎么跳到RAM中执行的呢? 谢谢大家了!!! |
|