资源预览内容
第1页 / 共2页
第2页 / 共2页
亲,该文档总共2页全部预览完了,如果喜欢就下载吧!
资源描述
通过赋予每个任务不同的虚拟-物理地址转换映射,支持不同任务之间的保护。地址转换函数 在每一个任务中定义 ,在一个任务中的虚拟地址空间映射到物理内存的一个部分,而另一个任务的虚拟地址空间映射到物理存储器中的另外区域。.就是把一个地址连接到另一个地址。例如,内存单元 A的地址为X,把它映射到地址 Y,这样访问Y时,就可以访问到 A 了。当然,访问原来的地址 X,也可以访问到 A。再如,在C语言等高级语言里面没有访问10的指令,所以那样的话在 C里面就无法访问10,只能通过嵌入汇编或者通过调用系统函数来访问10 了。采用10映射后就不同了,因为 I0 空间和内存空间本来不同,有不同的访问指令,那么,将I0 空间映射到内存空间,就可以通过使用访问内存的方法来访问 I0 了,例如在 C 语言里面可以通过指针来访问内存 单元,从而访问到被映射的 I0。存储器映射是指把芯片中或芯片外的 FLASH , RAM ,外设, B00TBL0CK 等进行统 一编址。 即用地址来表示对象。 这个地址绝大多数是由厂家规定好的, 用户只能用而不能改。 用户只能在挂外部 RAM 或 FLASH 的情况下可进行自定义。 ARM7TDMI 的存储器映射可 以有 0X000000000XFFFFFFFF 的空间,即 4G 的映射空间,但所有器件加起来肯定是填 不满的。 一般来说, 0X00000000 依次开始存放 FLASH 0X00000000 , SRAM 0X40000000,BOOTBLOCK,外部存储器 0X80000000 , VPB(低速外设地址, 如 GPI0,UART)0XE0000000 ,AHB (高速外设:向量中断控制器,外部存储器控 制器) 从 0XFFFFFFFF 回头。他们都是从固定位置开始编址的,而占用空间又不大, 如AHB只占2MB,所以从中间有很大部分是空白区域,用户若使用这些空白区域,或者定 义野指针, 就可能出现取指令中止或者取数据中止 。 由于系统在上电复位时要从 0X00000000 开始运行,而第一要运行的就是厂家固化在片子里的 B00TBL0CK ,这是判 断运行哪个存储器上的程序, 检查用户代码是否有效, 判断芯片是否加密,芯片是否IAP(在 应用编程),芯片是否ISP (在系统编程),所以这个BOOTBLOCK要首先执行。而芯片中 的 B00TBL0CK 不能放在 FLASH 的头部,因为那要存放用户的异常向量表的,以便在运 行、中断时跳到这来找入口, 所以 BOOTBLOCK 只能放在 FLSAH 尾部才能好找到, 呵呵。 而 ARM7 的各芯片的 FLASH 大小又不一致, 厂家为了 BOOTBLOCK 在芯片中的位置固定, 就在编址的 2G 靠前编址的位置虚拟划分一个区域作为 BOOTBLOCK 区域,这就是重映射, 这样访问2G即0X80000000 的位置时,就可以访问到在FLASH尾部的BOOTBLOCK区了。 BOOTBLOCK 运行完就是要运行用户自己写的启动代码了, 而启动代码中最重要的 就是异常向量表,这个表是放在 FLASH 的头部首先执行的,而异常向量表中要处理多方面 的事情,包括复位、未定义指令、软中断、预取指中止、数据中止、IRQ (中断),FIQ (快速中断),而这个异常向量表是总表,还包括许多分散的异常向量表,比如在外部存储器, BOOTBLOCK , SRAM 中固化的,不可能都由用户直接定义,所以还是需要重映射把那些 异常向量表的地址映到总表中。 为存储器分配地址的过程称为存储器映射, 那么什么叫存储 器重映射呢?为了增加系统的灵活性, 系统中有部分地址可以同时出现在不同的地址上, 这 就叫做存储器重映射。重映射主要包括引导块 一Boot Block重映射和异常向量表的重映射。1.引导块一Boot Block及其重映射 Boot Block是芯片设计厂商在 LPC2000系列ARM内部固 化的一段代码, 用户无法对其进行修改或者删除。 这段代码在复位时被首先运行, 主要用来 判断运行哪个存储器上面的程序, 检查用户代码是否有效, 判断芯片是否被加密, 系统的在 应用编程(IAP)以及在系统编程功能 (ISP )等。Boot Block存在于内部Flash , LPC2200 系列大小为 8kb ,它占用了用户的 Flash 空间,但也有其他的 LPC 系列不占用 FLash 空间 的,而部分没有内部 Flash 空间的 ARM 处理器仍然存在 Boot Block 。 重映射的原因: BootBlock 中有些程序可被用户调用,如擦写片内 Flash 的 IAP 代码。为了增加用户代码的可移 植性,所以最好把 Boot Block 的代码固定的某个地址上。但由于各芯片的片内 Flash 大小 不尽相同,如果把 Boot Block 的地址安排在内部 Flash 结束的位置上,那就无法固定 Boot Block 的地址。 为了解决上面的问题,于是芯片厂家将Boot Block 的地址重映射到片内存储器空间的最高端, 即接近 2Gb 的地方, 这样无论片内存储器的大小如何, 都不会影响 Boot Block 的地址。 因此当 Boot Block 中包含可被用户调用的 IAP 操作的代码时, 不用修改 IAP 的操作地址就可以在不同的 LPC 系列的 ARM 上运行了。 2. 异常向量表及其重映射 ARM 内核在发生异常后, 会使程序跳转到位于 0x00000x001C 的异常向量表处, 再经过向量跳 转到异常服务程序。但 ARM 单条指令的寻址范围有限,无法用一条指令实现 4G 范围的跳 转,所以应在其后面的 0x00200x003F 地址上放置跳转目标,这样就可以实现 4G 范围内 的任意跳转,因此一个异常向量表实际上占用了 16 个字的存储单元
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号