打印
[ZLG-ARM]

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

[复制链接]
1622|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xjc|  楼主 | 2008-7-14 08:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
关于存储器重映射一个基本概念的疑惑?请大家帮忙看看。
鄙人不才,对《深入浅出ARM7》P400页中的一个范例的疑问?


程序如下:
/****************************************************************************
* 文 件 名:REMAP.C
* 功    能:将存储器重映射到片内RAM(0x40000000~0x4000003F),然后更改0x40000000~
*           0x4000003F的内容。
* 说    明:观察0x00000000~0x0000003F地址上的数据有何变化
****************************************************************************/
#include  "config.h"

#define   VECTOR_RAM           ((unsigned char *) 0x40000000)

/****************************************************************************
* 名    称:main()
* 功    能:存储器重映射。
****************************************************************************/
int  main(void)
{  
    uint8  i;
    uint8  *addr;

    MEMMAP = 0x02;            // 中断向量从静态RAM重映射(用户RAM模式)

    addr = VECTOR_RAM;
    for(i=0; i<64; i++)        // 用0x55填充0x40000000~0x4000003F
    {  
        *addr = 0x55;
        addr++;
    }
   
    addr = VECTOR_RAM;
    for(i=0; i<64; i++)        // 用0xAA填充0x40000000~0x4000003F
    {  
        *addr = 0xAA;
        addr++;
    }

    MEMMAP = 0x00;            // 中断向量从Boot Block重映射(Boot装载程序模式)
   
    while(1);
    return(0);
}


问题:

用0x55填充0x40000000~0x4000003F,为何0x00000000~0x0000003F上的数据也会给改变成0X55?
难道改变0x40000000~0x4000003F同时也会改变0x00000000~0x0000003F吗 ?
二者到底是怎样的关联方式 ?

相关帖子

沙发
zlgarm| | 2008-7-15 13:58 | 只看该作者

回复

您好:
   存储器重映射就是给存储单元再分配1个地址。此时,该存储单元就有了两个地址。用户可以通过这两个地址来访问该存储单元。本例程中地址0x40000000~0x4000003F与0x00000000~0x0000003F对应的是相同存储单元。故改变0x40000000~0x4000003F地址的数据时,0x00000000~0x0000003F上的数据也会改变。

By glh

使用特权

评论回复
板凳
lhzw2001| | 2008-7-18 10:38 | 只看该作者

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



使用特权

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

本版积分规则

xjc

14

主题

81

帖子

1

粉丝