[ZLG-ARM] 关于固化程序的分散加载文件.scf的疑问

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

chenmi0201

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

汗……

在ADS&nbsp;Link的PDF文档里边,有详细的解释。如果安装的时候没有装,就上ARM网站获取。<br /><br />1&nbsp;RW是带有初始化值的数据段,RO,RW两个合起来是ROM的BIN文件。一般来说对应具有全局生存期的带有初值得变量。比如Static的有初值得局部变量,或者有初值全局;ZI是其他的变量,正常初始化流程需要软件把ZI区域清零。<br /><br />2&nbsp;存储器分配根据需求进行。如果要求访问速度快,那么放在IntRAM就好。对于速度不敏感的,可以考虑片外。<br /><br />0x40004000的定义要和Stack中的定义结合分析。如果Stack中定义的只是栈顶,根据AAPCS的满减协定,那么这里定义了堆栈的顶部。如果Stack中定义了全部栈空间,那么这里有问题。从这里说的前者的可能性大。<br /><br />Heap的RW等用*(+RW)进行Match。而且Stack和Heap也不是ZI的。<br /><br />先看看手册吧。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

7

帖子

1

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