打印

问一个困扰了我很久的有关RO段地址的问题

[复制链接]
1660|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yuyoo|  楼主 | 2007-11-9 14:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
三星对2410做的的bootloader有串口下载并运行下载的程序的功能,我看了下源码,下载地址是0x30400000,我编了个LED闪烁的小程序,RO基地址是0x30100000,程序入口地址同RO地址,生成.bin文件后通过串口下载到内存中能运行,但RO改成0x30200000后不能运行,改成0x30400000后又能运行,最后一个能理解,毕竟RO段的起始位置与其在内存中的地址一样的,但前两者就无法理解了
简而言之就是是否必须RO段的起始地址必须和其在内存或flash中的地址相同程序才能运行
但我发现三星的bootloader编译时它RO设的地址是0x30100000,最后焼写到flash中是从0地址开始运行的
知道的吼下,万分感谢,困扰我好久了

相关帖子

沙发
yamaki| | 2007-11-9 14:33 | 只看该作者

没用过2410,难道是remap?

使用特权

评论回复
板凳
mybao| | 2007-11-9 16:06 | 只看该作者

最根本的原因

但我发现三星的bootloader编译时它RO设的地址是0x30100000,最后焼写到flash中是从0地址开始运行的。

为什么这么奇妙,最根本的原因就是:ARM的PC指针是可以访问的。
好好看看reset后执行的那段汇编启动代码。

使用特权

评论回复
地板
yuyoo|  楼主 | 2007-11-9 19:51 | 只看该作者

谢谢楼上的

我看过启动代码,但有的地方不太理解
比如nor flash是可以运行程序的,将bootloader烧入后,复位从0x0开始运行,这一段汇编代码把RO,RW段搬入内存,最后ldr pc Main,按理说此时nor flash中的程序和SDRAM中的程序是一样的,也就都有Main入口,但为什么它就能寻址到SDRAM中的Main入口呢,这和PC指针和RO段有什么联系吗
查资料说有地址无关这么一概念,但不知是如何理解的,受教了

使用特权

评论回复
5
twentyone| | 2007-11-9 21:01 | 只看该作者

地址无关

提示一下,希望有帮助:

假设一个程序,只包括一条指令 MOV R0, R0。 我编译链接的时候,把RO设置为0X10000000。好了后,我把这个程序烧写到地址0X0,上电后肯定是能执行的。因为这段程序是地址无关的。

使用特权

评论回复
6
mybao| | 2007-11-9 22:17 | 只看该作者

re

其实启动代码搬移代码是有条件的,不是一定要搬移的,你仔细看看那个搬移代码所需要的条件,奥妙就在里面。

ldr pc Main,其实Main在编译时就确定了,唯一的,这个不用多解释。你把搬移代码的条件搞清楚了,就什么都明白了。

五楼的,你这个解释是行不通的哦,程序总会有跳转,调用,不是一条指令执行那么简单。

使用特权

评论回复
7
wishcom| | 2007-11-9 23:48 | 只看该作者

还是老话,看看Scatter Loading

使用特权

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

本版积分规则

2

主题

3

帖子

0

粉丝