这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » 向各位大侠请教几个存储器映射方面的问题!

共2条 1/1 1 跳转至

向各位大侠请教几个存储器映射方面的问题!

院士
2006-09-17 18:14:16     打赏
向各位大侠请教几个存储器映射方面的问题!



关键词: 各位     大侠     请教     几个     存储器     映射     方面的     面的    

院士
2006-12-22 22:43:00     打赏
2楼
问 请教:
问题1:
      1:为什么要存储器映射控制,一般是在什么情况下发生存储器映射控制呢?
问题2
      2:存储器映射控制,是不是专用中断的?
问题3:
      3:书上原文:“
         列如,每当产生一个软件中断请求,ARM 内核就从 0x00000008 处取出 32 位数。这就意味着:
         当 MEMMAP[1:0]=10 (用户 ARM 模式)时,从 0x00000008 的读数/取指是对 0x40000008
         单元进行操作。”
         
         请教,是不是芯片规定了当发生中断时,ARM 就是从  0x00000008 处取出 32 位数?
问题4
     4:书上原文“
       用户程序需要随时更改异常向量表,可以将异常向量表(64字节)复制到片内 RAM 的 0x40000000 地址上,
       然后设置 MEMMAP=2 进行重新映射,0x40000000 地址上的向量表就可以更改了。”

       请教,为什么要将 异常向量表(64字节)复制到片内 RAM 的 0x40000000 地址上呢?
       是不是因为  片内 RAM 的其始地址就是 0x40000000 啊?

       还有 然后设置 MEMMAP=2 进行重新映射,0x40000000 地址上的向量表就可以更改了
       各位大哥详细解释一下,好吗?


辛苦各位大侠了!谢谢!
1: 随便说说我觉得存储器重映射其实很简单:我们知道,复位和发生中断时,CPU是从固定地址读取复位和中断向量.

系统复位时,MCU一般是从0x0处开始指向,这样一来,在0x0处一般就只能是ROM了,以后发生中断,一般也是在这随近取指.这样一来,有时不是太灵活,比如bootloader中用到中断(这个在ARM中好像还好弄一点,在纯ROM的MCU中更麻烦),同时像ARM之类的,在ROM中执行有许多不方便的地方.

于是就有了存储器重映射的方法:就是通过程序控制,把非0x0处的存储器,映射到0x0处.这样一来,这部分存储器对于CPU而言,跟在0x0处没有分别,于是发生中断时,中断向量就从这儿取了.

至于能干什么用,就是各显神通了,比如你可以在0x0处放一个bootloader,执行完相关初始化程序后(在8位MCU中可以方便的用来进行IAP),然后重映射主程序,这样很方便的.在ARM中的话,可以先将代码copy到RAM中,重映射以后,代码全在ram中执行(发生中断后,也从RAM中取指),速度会快不少的:)

也不知道说得有没有不妥的地方,其实你问的问题我也不知道是这是指这个. 2: hiberhe 大哥,谢谢!hiberhe 大哥:
             您好!
我要的就是您说的啊

我还是有几个地方没懂:

问题1:
    您说:“ 把非0x0处的存储器,映射到0x0处”
    这件工作是 芯片自己做的,还是要程序员做的啊?
    如果是需要程序做的话,那要怎么写程序啊
    hiberhe 大哥,举个具体的列子,好吗?
问题2:
      于能干什么用,就是各显神通了,比如你可以在0x0处放一个bootloader,执行完相关初始化程序后(在8位MCU中可以方便的用来进行IAP),然后重映射主程序,这样很方便的.在ARM中的话,可以先将代码copy到RAM中,重映射以后,代码全在ram中执行(发生中断后,也从RAM中取指),速度会快不少的:)

   hiberhe 大哥,重映射主程序,到底做了哪些工作呢?



还有,请大哥帮我看看:
“ 请教:各位大侠,帮我看看下面这段程序,我有几个地方不理解!”
这个帖子。

谢谢大哥!


             3: 别称大哥啦,叫hiber就好了重映射不同的MCU不用.当然不是芯片自己做的,芯片不知道你需不需要重映射,以不知道你将哪块存储器得映射到0x0.通过在程序中设置MCU的寄存器来实现的.这个不同的MCU有不同的寄存器.看MCU的文档就知道了.我知道4510是可以重映射的(自己没实际用过,初学ARM,还是超级菜鸟),我用的44B0X不可以重映射,所以也不好给例子.

看一下CPU的文档就知道了,很简单的.也要注意重映射时对一些注意事项,这个在CPU的文档里都有的.

说白了,重映射就是要CPU将非0x0处的存储器当作0x0处来用,就这么简单,具体CPU是怎么实现的,根本不用关心.设置了重映射以后,在你的程序中,就要把那片区域当作0x0的.

要完成重映射,反正就是操作一下寄存器而已.

不知道自己有没有说清楚.

共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]