scatter文件实现用户程序段重定位问题

[复制链接]
4179|6
 楼主| 啊粒狗肉 发表于 2007-1-19 17:24 | 显示全部楼层 |阅读模式
小弟在用ARM7&nbsp;S3C44B0的开发板,ADS编译器。<br />想把代码从FLASH(load&nbsp;region)搬移到SDRAM(execution&nbsp;region)运行。<br /><br />如果这样的话,必须由scatter文件给代码分配两个存储区域,load&nbsp;region和execution&nbsp;region.<br /><br />由bootloader把代码从load&nbsp;region搬移到execution&nbsp;region再执行。<br />Debug阶段的程序的scatter文件基本会写了,但是怎么实现程序的重定位的scatter文件,写法一直没解决。<br />搞了很久还是没头绪,高手说话啊。
luhuaren 发表于 2007-1-19 20:52 | 显示全部楼层

re

用分散加载&nbsp;&nbsp;在进入主程序之前&nbsp;调用&nbsp;&nbsp;__main
 楼主| 啊粒狗肉 发表于 2007-1-20 16:14 | 显示全部楼层

ARM7上能实现代码搬移吗

  
 楼主| 啊粒狗肉 发表于 2007-1-20 16:24 | 显示全部楼层

现在对属性也很迷糊

在load&nbsp;region的代码属性就是ro-code,<br />什么时候用到RW-CODE属性呢,<br />我用scatter&nbsp;description&nbsp;file生成目标代码的时候,<br />在连接器生成的MAP文件里面从没出现过RW-CODE属性的代码,<br />郁闷<br />
 楼主| 啊粒狗肉 发表于 2007-1-21 21:37 | 显示全部楼层

看看我的scatter 文件

第一种scatter&nbsp;file<br />LOAD_REGION&nbsp;0x0000000<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;FLASH&nbsp;+0&nbsp;0x100000<br />&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vector.o(SelfBoot,+FIRST)&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;SDRAM_CODE&nbsp;0xc000000<br />&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*(+RO)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;SDRAM_RW&nbsp;+0<br />&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*(+RW)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;SDRAM_ZI&nbsp;+0<br />&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*(+ZI)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;}<br />}<br /><br /><br />第一种写法只能把CODE的执行域定位到SDRAM,无法把CODE的加载域(LOAD&nbsp;region&nbsp;)定位到flash,CPU上电从FLASH启动的话不行.<br /><br />第二种scatter&nbsp;file<br />LOAD_REGION&nbsp;0x0000000<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;FLASH&nbsp;+0&nbsp;0x100000<br />&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vector.o(SelfBoot,+FIRST)&nbsp;&nbsp;<br />   *(+RO)&nbsp;<br />&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;SDRAM_RW&nbsp;0xc000000<br />&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*(+RW)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;SDRAM_ZI&nbsp;+0<br />&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*(+ZI)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;}<br />}<br /><br />第二种写法只能把CODE的执行域定位到FLASH,无法把CODE的执行域(Execution&nbsp;region&nbsp;)定位到SDRAM,程序只能在FLASH运行.<br /><br />两种scatter文件感觉都不行,到底该怎么写呢,还是我理解错误?
js_wawayu 发表于 2007-1-22 08:20 | 显示全部楼层

说说我的理解

感觉这两种写法都不对,第二种写法的RO段是对的,RW段的起始地址不能为SDRAM的开始地址,因为要留一段空间放RO。程序一开始运行还是在FLASH中,然后要在BOOTLOADER中完成代码的搬移,根据ROBASE&nbsp;和ROLIMIT搬RO段,然后是RW&nbsp;ZI段,这是我的看法,我也没试过。
 楼主| 啊粒狗肉 发表于 2007-1-22 10:26 | 显示全部楼层

js_wawayu说得有道理

RW段的起始地址不能为SDRAM的开始地址<br /><br />这个有道理,非常感谢,现在我主要想怎样实现代码的LOAD&nbsp;region&nbsp;和Execution&nbsp;region&nbsp;的定位,不知道该怎么搞
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

40

帖子

1

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