打印
[ZLG-ARM]

关于固化程序的分散加载文件.scf的疑问

[复制链接]
1998|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
chenmi0201|  楼主 | 2008-1-29 22:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
ST, AC, ck, Stack, ni
周公:
    这段时间在学习EASYARM2200开发版的分散加载文件时,有如下疑问不解特向各位大师请教:
     1.ARM的系统软件开发中主要包含RO,RW,ZI三个段组成。其中的RW,ZI段有都属于数据段,但两者间何区别?他们分别对应的是程序中的哪些变量? 
     2.存储器分配应遵循哪些规则要求呢?
例如以下片内FLASH固化程序的SCF文件:     
ROM_LOAD 0x0
{
    ROM_EXEC 0x00000000
    {   Startup.o (vectors, +First)
        * (+RO)
    }
    IRAM 0x40000000
      {    Startup.o (+RW,+ZI)    }
    ERAM 0x80000000
      {      * (+RW,+ZI)    }
    HEAP +0 UNINIT
      {      heap.o (+ZI)   }
    STACKS 0x40004000 UNINIT
      {      stack.o (+ZI)   }
  }  
     这其中的问题有:
       (1)为什么 Startup.o和stack.o目标文件的ZI变量放在片内存储器内?哪些数据量该放片内片外?而且加载区STACKS的地址0x40004000在存储器映射表中对应的是“保留给片内存储器空间”,怎么能用呢?
       (2)heap.o  和stack.o的RW变量放在那儿呢?为什么不跟ZI区放在一起?
                                                        恳请赐教!
      
     

相关帖子

沙发
ZlGaRm| | 2008-1-30 16:54 | 只看该作者

chenmi0201

您好!
  十分抱歉,根据公司的规定,我们不对分散加载文件进行技术支持。请您谅解。此外,我们现在才对您的贴作出回应,您的帖子是昨天晚上发的,按理我们应该在今天上午就作出答复,也对此致以歉意。
  PS:关于分散加载文件,其实网上已经有许多极其系统的资料了。不妨搜来一览?:)
                                                By  zlgarm_ltt
   

使用特权

评论回复
板凳
zkr| | 2008-2-2 15:20 | 只看该作者

汗……

在ADS Link的PDF文档里边,有详细的解释。如果安装的时候没有装,就上ARM网站获取。

1 RW是带有初始化值的数据段,RO,RW两个合起来是ROM的BIN文件。一般来说对应具有全局生存期的带有初值得变量。比如Static的有初值得局部变量,或者有初值全局;ZI是其他的变量,正常初始化流程需要软件把ZI区域清零。

2 存储器分配根据需求进行。如果要求访问速度快,那么放在IntRAM就好。对于速度不敏感的,可以考虑片外。

0x40004000的定义要和Stack中的定义结合分析。如果Stack中定义的只是栈顶,根据AAPCS的满减协定,那么这里定义了堆栈的顶部。如果Stack中定义了全部栈空间,那么这里有问题。从这里说的前者的可能性大。

Heap的RW等用*(+RW)进行Match。而且Stack和Heap也不是ZI的。

先看看手册吧。

使用特权

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

本版积分规则

4

主题

7

帖子

1

粉丝