什么是重映射:
不同的地址指向了同一块物理内存,比如,实际物理地址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,异常向量表是很重要的。
文章评论(0条评论)
登录后参与讨论