打印

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

[复制链接]
3200|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
啊粒狗肉|  楼主 | 2007-1-19 17:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
小弟在用ARM7 S3C44B0的开发板,ADS编译器。
想把代码从FLASH(load region)搬移到SDRAM(execution region)运行。

如果这样的话,必须由scatter文件给代码分配两个存储区域,load region和execution region.

由bootloader把代码从load region搬移到execution region再执行。
Debug阶段的程序的scatter文件基本会写了,但是怎么实现程序的重定位的scatter文件,写法一直没解决。
搞了很久还是没头绪,高手说话啊。

相关帖子

沙发
luhuaren| | 2007-1-19 20:52 | 只看该作者

re

用分散加载  在进入主程序之前 调用  __main

使用特权

评论回复
板凳
啊粒狗肉|  楼主 | 2007-1-20 16:14 | 只看该作者

ARM7上能实现代码搬移吗

使用特权

评论回复
地板
啊粒狗肉|  楼主 | 2007-1-20 16:24 | 只看该作者

现在对属性也很迷糊

在load region的代码属性就是ro-code,
什么时候用到RW-CODE属性呢,
我用scatter description file生成目标代码的时候,
在连接器生成的MAP文件里面从没出现过RW-CODE属性的代码,
郁闷

使用特权

评论回复
5
啊粒狗肉|  楼主 | 2007-1-21 21:37 | 只看该作者

看看我的scatter 文件

第一种scatter file
LOAD_REGION 0x0000000
{
    FLASH +0 0x100000
   {
     vector.o(SelfBoot,+FIRST)   
   }  
   SDRAM_CODE 0xc000000
   {    
      *(+RO)      
   }   
   SDRAM_RW +0
   {            
      *(+RW)           
   }
   SDRAM_ZI +0
   {          
      *(+ZI)      
   }
}


第一种写法只能把CODE的执行域定位到SDRAM,无法把CODE的加载域(LOAD region )定位到flash,CPU上电从FLASH启动的话不行.

第二种scatter file
LOAD_REGION 0x0000000
{
    FLASH +0 0x100000
   {
     vector.o(SelfBoot,+FIRST)  
   *(+RO) 
   }    
   SDRAM_RW 0xc000000
   {            
      *(+RW)           
   }
   SDRAM_ZI +0
   {          
      *(+ZI)      
   }
}

第二种写法只能把CODE的执行域定位到FLASH,无法把CODE的执行域(Execution region )定位到SDRAM,程序只能在FLASH运行.

两种scatter文件感觉都不行,到底该怎么写呢,还是我理解错误?

使用特权

评论回复
6
js_wawayu| | 2007-1-22 08:20 | 只看该作者

说说我的理解

感觉这两种写法都不对,第二种写法的RO段是对的,RW段的起始地址不能为SDRAM的开始地址,因为要留一段空间放RO。程序一开始运行还是在FLASH中,然后要在BOOTLOADER中完成代码的搬移,根据ROBASE 和ROLIMIT搬RO段,然后是RW ZI段,这是我的看法,我也没试过。

使用特权

评论回复
7
啊粒狗肉|  楼主 | 2007-1-22 10:26 | 只看该作者

js_wawayu说得有道理

RW段的起始地址不能为SDRAM的开始地址

这个有道理,非常感谢,现在我主要想怎样实现代码的LOAD region 和Execution region 的定位,不知道该怎么搞

使用特权

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

本版积分规则

9

主题

40

帖子

1

粉丝