0.什么是Remap
我的理解是:在ROM从0x0用几句指令引导系统之后,把RAM映射到0x0就是Remap。

1.Remap的作用

当ARM处理器上电或Reset之后,处理器从0x0取指。因此,必须确保系统上电时,0x0处有指令能够执行。所以,上电的时候,0x0地址处必定是ROM或Flash(NOR)。

但是,为了加快启动的速度,也方便能够更改异常向量表,加快中断响应速度,往往把异常向量表映射到更快、更宽(32bit/16bit)的RAM中。但是异常向量表的开始地址是由ARM架构决定的,必须位于0x0处,因此,必须把RAM映射到0x0。

2.Remap的配置

Remap的实现和ARM处理器的实现相关。
1)假如处理器有专门的寄存器能够完成Remap。那么Remap是通过Remap寄存器的相应bit置1完成的。如Atmel AT91xx
2)假如处理器没有专门的寄存器,但是memory的bank控制寄存器能够用来配置bank的起始地址,那么只要把RAM的起始地址编程为0x0,也能够完成remap。如samsung s3c4510
3)假如上面两种机制都没有,那么Remap就不要做了。因为处理器实现决定了SDRAM对应的bank地址是不能改变的。如Samsung S3c2410.
3.Remap配置前后要做的工作
Remap前后,不同之处就是RAM的位置变了。为了达到Remap的目的,就是加快启动的速度和异常处理速度,一定要初始化异常堆栈和建立异常向量表的。

4.假如象2410那样不能Remap的话怎么办?

2410不是不能Remap吗?为了加快启动速度,能够这样做

1)使用他的NAND boot模式。为什么NAND boot会比较快,那是因为2410里面有块小石头——“SteppingStone”,一块4KB SRAM,他是映射在0x0的。启动程式会自动被copy到这个石头里面。自然异常向量的入口放到这个地方,相同能够达到比NOR boot快的启动、异常响应速度。
2)假如您对NOR Boot情有独衷,那么您只好把您的异常向量的入口copy到SDRAM里面,实现所谓的High Vector

我个人认为,假如中断向量放在rom中的0x0位置,就用不着remap,但是无法再更改中断向量,假如放在ram或其他的存储器中,那么就应该用的remap,因为在系统复位后,对系统环境的初始化是从中断向量中的中断reset开始的,而系统运行必须是从rom的0x0开始的,因此应该利用remap把放中断向量的初始地址映射到rom的0x0处,以使程式进行正确的初始化.这样既能够初始化,有能够使程式运行的快一些,因为毕竟rom的速度是比较慢的.
以上是个人理解,如有错误请大家指正!!!



文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!