QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1384|回复: 1

ARMboot的start.S的重定位问题

[复制链接]
发表于 2006-4-11 20:42:15 | 显示全部楼层 |阅读模式
armboot的cpu/arm720t/start.S里有重定位的一段代码
大致意思就是一个copy_loop,把映像从flash拷贝到了ram,这个没有错。
然后就调用c的入口程序,之后认为armboot运行于ram,而非flash,如下所示:
代码:

  1. ldr pc, _start_armboot
  2. _start_armboot: word start_armboot /*start_armboot()定义在Board.c中。*/
复制代码



我的问题是,ldr pc ,_start_armboot之前所有的代码都是在flash里执行的,那么此句也不例外,为什么ldr pc,_start_armboot后,跳转到ram中的start_armboot()而非flash中原有的start_armboot()?

说的有点罗嗦,希望大家都能明白我的意思,也希望大家能帮我解答,谢谢
发表于 2006-4-13 19:20:47 | 显示全部楼层

你可以看一下最后生成的。map文件,就明白了

其实很简单,arm可以执行相对跳转,和你一开始把boot烧写放置的具体位置无关,copy-loop结束后,直接强行更新pc,而start-armboot内部放置的信息是在编译连接时候所定义的位置,之后就跳转到真正预先安排的sdram中的对应位置去执行了。
回复

使用道具 举报

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

本版积分规则

GMT+8, 2024-11-2 18:36 , Processed in 0.046633 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

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