Arm2410 : jump to ram? how to? 好困惑啊!!!!求助大家了

abncat   2009-1-9 18:29 楼主
  

ARM boot loader 的一段代码,如下 jump to ram 是怎么保证的呢?
=on_the_ram 是开始的那个‘steppingstone’缓存区 还是 SDRAM 的地址? 请教大家,谢谢

    bl    copy_myself

    @ jump to ram   //here********************
    ldr    r1, =on_the_ram
    add    pc, r1, #0
    nop
    nop
1:    b    1b        @ infinite loop

on_the_ram:

    @ get read to call C functions
    ldr    sp, DW_STACK_START    @ setup stack pointer
    mov    fp, #0        @ no previous frame, so fp=0
    mov    a2, #0            @ set argv to NULL

    bl    main            @ call main  

回复评论 (13)

结帖率:125.00% 这么高斗没人回答啊
点赞  2009-1-9 18:56
不太明白搂主什么意思
友情帮顶!
点赞  2009-1-9 20:51
你的代码有点怪,2410的steppingstone没有这样的代码吧

————————————————————————————————————
steppingstone是2410硬件实现自动拷贝前4K flash数据到内部SRAM运行的。
on_the_ram 应该是内存。
点赞  2009-1-9 23:01
引用: 引用 3 楼 gooogleman 的回复:


————————————————————————————————————
steppingstone是2410硬件实现自动拷贝前4K flash数据到内部SRAM运行的。
on_the_ram 应该是内存。


就是说steppingstone是一行代码都不用写,硬件实现了。
点赞  2009-1-9 23:03
是啊
点赞  2009-1-9 23:13
是啊,自己怎么能把自己拷到内存呢?
点赞  2009-1-9 23:16
这是什么BOOT?反正不像WINCE的Eboot。

RAM是指SDRAM。将boot拷贝到SDRAM,然后跳转过去。
点赞  2009-1-9 23:22
vivi里面的
我知道
steppingstone是一行代码都不用写,硬件实现了
这个bootloader开机运行后
有4k被2410硬件自动拷贝到了内部缓存ram中运行

然后这(开头的一段4k程序)又把整个bootloader(包括那四k)拷贝到sdram中去

我要问的ldr  r1, =on_the_ram 这句,他的意思是跳到sdram中执行
通过上面可知道 包含on_the_ram 这个标号的代码

在内部缓存ram中有一个,(我们当前代码就在这里执行,执行了ldr,r1,=on_the_ram    add pc ,r1,#0就到了下面sdram中了 )
在刚刚完成拷贝中sdram中也有一个,
我要问的就是它是如何保证跳到sdram中,而不是还留在这4k steppingstone 缓冲区中
点赞  2009-1-10 12:06
on_the_ram这样的标志其实是以相对“起始点”的“偏移量”存在的。

在StepStone里时,“起始点”是StepStone的起点。

add pc,r1, #0已经到了sdram,这时“起始点”已经是sdram里面了,然后跳转就是以这个“起始点”找“偏移量”了,这样就确保是在sdram里面了。
点赞  2009-1-10 12:42
唉 还是不明白啊
点赞  2009-1-10 23:03
引用: 引用 10 楼 andykuo 的回复:
唉 还是不明白啊


你关键理解这个PC,PC是是程序执行到哪里的老大,你这个PC的值变成内存之后,程序自然会执行内存里面的程序了。
这个和单片机等都是一样的。
点赞  2009-1-11 11:08
引用: 引用 10 楼 andykuo 的回复:
唉 还是不明白啊


你关键理解这个PC,PC是是程序执行到哪里的老大,你这个PC的值变成内存之后,程序自然会执行内存里面的程序了。
这个和单片机等都是一样的。
点赞  2009-1-11 11:09
on_the_ram假设处于偏移量0x1000的地方。
开始在stepstone的时候,这个on_the_ram实际处于stepstone的起始位置+0x1000的地方。
而当pc指向了sdram之后,再执行pc+0x1000,结果就是sdram里面的on_the_ram了。

汇编里的标识符都是偏移量,而不是绝对地址。
点赞  2009-1-11 20:38
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复