关于arm中对rw段说明的讨论

[复制链接]
2599|6
 楼主| playlinus 发表于 2008-11-12 16:57 | 显示全部楼层 |阅读模式
网上任何一篇介绍&nbsp;arm&nbsp;bootloader&nbsp;的**都会提及对rw段的使用说明,而普遍较流行的一种说法如下:&nbsp;(完全copy&nbsp;<br />http://zhanglicn.blog.sohu.com/72551452.html)<br /><br />因为RO段是只读的,在运行的时候不可以改变,所以,在运行的时候,RO段可以驻留在Flash里(当然也可以在SDRAM或者<br />SRAM里了)。而RW段是可以读写的,所以,在运行的时候必须被装载到SDRAM或者SRAM里。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在用ADS编译的时候,是需要设置RO&nbsp;BASE&nbsp;和RW&nbsp;BASE的,用过ADS的应该都清楚这点。通过RO&nbsp;BASE&nbsp;和RW&nbsp;BASE的设置,<br />告诉链接器(linker)该程序的起始运行地址(RO&nbsp;BASE)和&nbsp;RW段的地址&nbsp;(RW&nbsp;BASE)。如果一个程序只有RO段,没有RW段,<br />那么这个程序可以完全在Flash里运行,不需要用到SDRAM&nbsp;或者&nbsp;SRAM。如果包括RW段和RO段,那么该程序的RW段必须在被访<br />问以前被拷贝到SDRAM&nbsp;或者SRAM里去,以保证程序可以正确运行。下面这个图说明了一个程序执行前(load&nbsp;view)和执行时<br />(execute&nbsp;view)的状态。从图中可以看到,整个程序在执行前始放在ROM里的,在执行的时候,RW段被拷贝到了RAM里的合<br />适位置去。<br /><br />针对此类对rw的讲法,我今天做了一个试验,将2410&nbsp;bootloader的那段copy&nbsp;rw&nbsp;/&nbsp;初始化&nbsp;zi&nbsp;的代码全部屏蔽掉,然后编译链<br />接下载到nor&nbsp;flash&nbsp;,&nbsp;由nor启动,&nbsp;程序居然正常运行&nbsp;.&nbsp;我的程序比较简单,但应该是包含了rw输入段的&nbsp;.<br /><br />这次实验是否能否认网上流行的这个所谓必须将rw段copy到sdram/sram中去运行的说法呢&nbsp;,&nbsp;个人认为只要是将程序下载到0<br />地址开始的类似nor/eeprom等线性的存储器上,程序就可以运行,而那个copy动作应该不是必须的.<br /><br />渴望各位DX拍砖...<br />
dld2 发表于 2008-11-12 17:03 | 显示全部楼层

瞎讲

一个变量不能被改写怎么玩?<br /><br />要么用的全是寄存器变量。
biehoff 发表于 2008-11-12 19:02 | 显示全部楼层

RE

被拍砖了···LZ貌似不可能吧
dld2 发表于 2008-11-12 19:34 | 显示全部楼层

这样的

int&nbsp;a&nbsp;=&nbsp;7;//会放在RW段<br /><br />void&nbsp;main(void)<br />{<br />if(a&nbsp;==&nbsp;7)<br />{<br />...<br />}<br /><br />}<br />这样的程序,不拷贝RW,是不行的。<br /><br />ZI初始化为零不是必须的。<br />
纯金属 发表于 2008-11-14 14:35 | 显示全部楼层

.

NOR&nbsp;FLASH&nbsp;是可以运行程序的。
 楼主| playlinus 发表于 2008-11-14 17:12 | 显示全部楼层

2楼. 变量放在NOR为什么就不能被改写啦 ?

  
gdpbeyond 发表于 2008-11-14 23:16 | 显示全部楼层

如果

如果bootloader&nbsp;里有调用__main&nbsp;,c运行时库会把RW&nbsp;帮你拷到RW&nbsp;BASE位置的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

102

主题

518

帖子

2

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