Windows CE引入了虚拟内存机制管理多达4G的虚拟内存,最大支持512MB的物理内存.不同的CPU内存管理方法不同。对于MIPS和SHX系列CPU来说,地址映射是由CPU完成的,CE内核可以直接访问512MB的物理内存。对于x86系列和ARM系列的CPU来说,在内核启动过程中它会将现有物理内存地址全部映射到0x8000 0000以上的虚拟地址空间中供内核以后使用,这个虚实映射机制软件上通过OEMAddressTable实现,硬件上要求具备MMU.
参考microsun的文章:
"WINCE的内存(包括SDRAM及FLASH)的配置包含两个方面:源代码(包括C和汇编)中的定义,及系统配置文件CONFIG.BIB中的定义。源代码中需要定义内存的物理及虚拟地址,大小,并初始化名为OEMAddressTable的结构数组,以告知系统物理地址与虚拟地址的对应关系,系统根据其设置生成MMU页表。而CONFIG.BIB中一般会将内存定义成不同的段,各段用作不同的用途。"
我的理解是在*.h文件中声明各虚拟地址,比如用到的寄存器结构体.在虚实地址映射文件(如ARM下的map.a)的OEMAddressTable中建立虚实地址的静态映射关系,包括RAM,FLASH各部分存储空间. (OS启动后所能够识别的物理内存). 接着在config.bib的MEMORY段(参考HELP里的Memory Section)把RAM映射后的虚拟地址进行分段,比如NK的大小,各种外设缓冲区的保留等.(注意这里是虚拟地址的划分,必须建立在映射基础上) 这种静态的虚拟地址只能够由内核层访问,如果在APP中访问,还必须建立动态映射.
文章评论(0条评论)
登录后参与讨论