remap的那些事

来源:互联网 发布:淘宝网商城鞋子 编辑:程序博客网 时间:2024/04/27 16:48

月14日 

今天还在看启动代码,看到target.c这里。先说说target.c的职责。target.c文件包含和目标初始化相关的

代码,如remap设置、系统时钟设置和存储器加速模块设置等,以及IRQ和FIQ的异常处理空函数。好吧,这里

看到了remap就好好查资料把它搞清楚咯!其实我前面看过这个了,只是人上了年纪就健忘还得重新温习下,

不过效果还真的不错相信以后不会忘记了!哈哈!现在分享下吧!

remap---存储器映射控制器

看到了吗?顾名思义,它是来控制映射的,不要怀疑你的直觉,就是这样!存储器映射控制器用于改变从地

址0x00000000开始的中断向量的映射。允许运行在不同存储器空间中的代码对中断进行控制。*我估计有人看

到这里会犯嘀咕了。当arm处理器上电或者reset之后,处理器从0x0取址。因此必须保证系统上电时,0x0处

有指令执行。所以,上电的时候,0x0地址处必定是rom或者flash。把ram映射到这里是为了加快启动速度、

方便更改异常向量表,加快中断响应速度。现在应该有了点大概的了解了吧。哈哈!!!

我们来看看存储器映射控制的注意事项和映射控制的对应关系

存储器映射器只从处理arm异常(中断)必须的3个数据源(flash中断向量、sram中断向量和boot block中断

向量,每个64个字节)中选择一个使用。

它们的关系如下:

mammap[1:0]=00 :boot装载程序模式。中断向量从boot block重新映射

mammap[1:0]=01 :用户flash模式。

mammap[1:0]=10 :用户ram模式。

下面给个例子,每当产生一个软中断请求,arm内核就从0x00000008处取出32位数据。当mammap[1:0]=10时,

从0x00000008的读数/取指是对0x40000008单元进行操作。其他同理。

Remap前后,不同之处就是RAM的位置变了。为了达到Remap的目的,就是加快启动的速度和异常处理速度,一
定要初始化异常堆栈和建立异常向量表的。

简而言之,地址重映射就是可以通过软件配置来改变一块存储器物理地址的一种机制或方法。


参考remap详细讲解:http://hi.baidu.com/suqiniat/blog/item/561ac6d95450dd2910df9b31.html