[ZLG-ARM] 关于存储器重映射一个基本概念的疑惑?请大家帮忙看看。

[复制链接]
2299|2
 楼主| xjc 发表于 2008-7-14 08:21 | 显示全部楼层 |阅读模式
关于存储器重映射一个基本概念的疑惑?请大家帮忙看看。<br />鄙人不才,对《深入浅出ARM7》P400页中的一个范例的疑问?<br /><br /><br />程序如下:<br />/****************************************************************************<br />*&nbsp;文&nbsp;件&nbsp;名:REMAP.C<br />*&nbsp;功&nbsp;&nbsp;&nbsp;&nbsp;能:将存储器重映射到片内RAM(0x40000000~0x4000003F),然后更改0x40000000~<br />*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x4000003F的内容。<br />*&nbsp;说&nbsp;&nbsp;&nbsp;&nbsp;明:观察0x00000000~0x0000003F地址上的数据有何变化<br />****************************************************************************/<br />#include&nbsp;&nbsp;&quot;config.h&quot;<br /><br />#define&nbsp;&nbsp;&nbsp;VECTOR_RAM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((unsigned&nbsp;char&nbsp;*)&nbsp;0x40000000)<br /><br />/****************************************************************************<br />*&nbsp;名&nbsp;&nbsp;&nbsp;&nbsp;称:main()<br />*&nbsp;功&nbsp;&nbsp;&nbsp;&nbsp;能:存储器重映射。<br />****************************************************************************/<br />int&nbsp;&nbsp;main(void)<br />{&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;uint8&nbsp;&nbsp;i;<br />&nbsp;&nbsp;&nbsp;&nbsp;uint8&nbsp;&nbsp;*addr;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;MEMMAP&nbsp;=&nbsp;0x02;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;中断向量从静态RAM重映射(用户RAM模式)<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;addr&nbsp;=&nbsp;VECTOR_RAM;<br />&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;&nbsp;i&lt64;&nbsp;i++)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;用0x55填充0x40000000~0x4000003F<br />&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*addr&nbsp;=&nbsp;0x55;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;addr++;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;addr&nbsp;=&nbsp;VECTOR_RAM;<br />&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;&nbsp;i&lt64;&nbsp;i++)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;用0xAA填充0x40000000~0x4000003F<br />&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*addr&nbsp;=&nbsp;0xAA;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;addr++;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;MEMMAP&nbsp;=&nbsp;0x00;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;中断向量从Boot&nbsp;Block重映射(Boot装载程序模式)<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;while(1);<br />&nbsp;&nbsp;&nbsp;&nbsp;return(0);<br />}<br /><br /><br />问题:<br /><br />用0x55填充0x40000000~0x4000003F,为何0x00000000~0x0000003F上的数据也会给改变成0X55?<br />难道改变0x40000000~0x4000003F同时也会改变0x00000000~0x0000003F吗&nbsp;?<br />二者到底是怎样的关联方式&nbsp;?
zlgarm 发表于 2008-7-15 13:58 | 显示全部楼层

回复

您好:<br />&nbsp;&nbsp;&nbsp;存储器重映射就是给存储单元再分配1个地址。此时,该存储单元就有了两个地址。用户可以通过这两个地址来访问该存储单元。本例程中地址0x40000000~0x4000003F与0x00000000~0x0000003F对应的是相同存储单元。故改变0x40000000~0x4000003F地址的数据时,0x00000000~0x0000003F上的数据也会改变。<br /><br />By&nbsp;glh
lhzw2001 发表于 2008-7-18 10:38 | 显示全部楼层

就相当于两个门牌号,指向同一个住宅

<br /><br />
您需要登录后才可以回帖 登录 | 注册

本版积分规则

xjc

15

主题

84

帖子

1

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