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

[复制链接]
2645|6
 楼主| yuyoo 发表于 2007-11-9 14:03 | 显示全部楼层 |阅读模式
三星对2410做的的bootloader有串口下载并运行下载的程序的功能,我看了下源码,下载地址是0x30400000,我编了个LED闪烁的小程序,RO基地址是0x30100000,程序入口地址同RO地址,生成.bin文件后通过串口下载到内存中能运行,但RO改成0x30200000后不能运行,改成0x30400000后又能运行,最后一个能理解,毕竟RO段的起始位置与其在内存中的地址一样的,但前两者就无法理解了<br />简而言之就是是否必须RO段的起始地址必须和其在内存或flash中的地址相同程序才能运行<br />但我发现三星的bootloader编译时它RO设的地址是0x30100000,最后焼写到flash中是从0地址开始运行的<br />知道的吼下,万分感谢,困扰我好久了
yamaki 发表于 2007-11-9 14:33 | 显示全部楼层

没用过2410,难道是remap?

  
mybao 发表于 2007-11-9 16:06 | 显示全部楼层

最根本的原因

但我发现三星的bootloader编译时它RO设的地址是0x30100000,最后焼写到flash中是从0地址开始运行的。<br /><br />为什么这么奇妙,最根本的原因就是:ARM的PC指针是可以访问的。<br />好好看看reset后执行的那段汇编启动代码。<br />
 楼主| yuyoo 发表于 2007-11-9 19:51 | 显示全部楼层

谢谢楼上的

我看过启动代码,但有的地方不太理解<br />比如nor&nbsp;flash是可以运行程序的,将bootloader烧入后,复位从0x0开始运行,这一段汇编代码把RO,RW段搬入内存,最后ldr&nbsp;pc&nbsp;Main,按理说此时nor&nbsp;flash中的程序和SDRAM中的程序是一样的,也就都有Main入口,但为什么它就能寻址到SDRAM中的Main入口呢,这和PC指针和RO段有什么联系吗<br />查资料说有地址无关这么一概念,但不知是如何理解的,受教了
twentyone 发表于 2007-11-9 21:01 | 显示全部楼层

地址无关

提示一下,希望有帮助:<br /><br />假设一个程序,只包括一条指令&nbsp;MOV&nbsp;R0,&nbsp;R0。&nbsp;我编译链接的时候,把RO设置为0X10000000。好了后,我把这个程序烧写到地址0X0,上电后肯定是能执行的。因为这段程序是地址无关的。<br />
mybao 发表于 2007-11-9 22:17 | 显示全部楼层

re

其实启动代码搬移代码是有条件的,不是一定要搬移的,你仔细看看那个搬移代码所需要的条件,奥妙就在里面。<br /><br />ldr&nbsp;pc&nbsp;Main,其实Main在编译时就确定了,唯一的,这个不用多解释。你把搬移代码的条件搞清楚了,就什么都明白了。<br /><br />五楼的,你这个解释是行不通的哦,程序总会有跳转,调用,不是一条指令执行那么简单。
wishcom 发表于 2007-11-9 23:48 | 显示全部楼层

还是老话,看看Scatter Loading

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

本版积分规则

2

主题

3

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部