原创 LPC2468启动和重映射的理解

2009-11-12 16:12 2939 8 8 分类: MCU/ 嵌入式

什么是重映射:


不同的地址指向了同一块物理内存,比如,实际物理地址0X123,可以被重映射为0x55aa,那么,当我访问0X55AA时,实际上是访问的内存0X123。


为什么要重映射:


ARM内部FLASH大小是不一样大的,所以固化在FLASH的BOOT LOAD(启动程序,类似电脑的BIOS)的地址也是不一样的,但是BOOT LOAD里的一些函数比如烧写FLASH是可以被用户调用的,如果地址变了,那你的程序又得从头开始写。鉴于此,才重映射到固定地址上去。


重映射的种类:


BOOT LOAD 重映射。请注意,BOOT是在内部FLASH里的(有的是单独的),所以手册中说的512kb实际用户用到的没这些,因为BOOT要占用一部分。RESET后,寄存器MEMMAP值为0,ARM内核以为要从地址0x0处启动,但是被存储管理映射到实际的BOOT LOAD地址处,BOOT会看一下代码是否有效,将要从哪里启动等,然后才运行用户代码。


异常向量表重映射。请注意,在BOOT中也有异常向量表。RESET后,PC指向了地址0,但此时REMAP为0,被映射到了BOOT中的异常向量表中,就执行BOOT程序。可见,异常向量表引导了程序的运行。


到此,重映射就这些内容。其他的操作地址就是实际的物理地址。


总结:


REMAP负责重映射的管理。复位后运行的是BOOT LOAD,异常向量表是很重要的。

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
8
关闭 站长推荐上一条 /3 下一条