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