ce内存映射的点点滴滴.doc

上传人:w****2 文档编号:6564996 上传时间:2020-02-29 格式:DOC 页数:2 大小:15.50KB
返回 下载 相关 举报
ce内存映射的点点滴滴.doc_第1页
第1页 / 共2页
ce内存映射的点点滴滴.doc_第2页
第2页 / 共2页
亲,该文档总共2页,全部预览完了,如果喜欢就下载吧!
资源描述
ce内存映射的点点滴滴OEMAddressTable里定义的映射关系是给ARM MMU用的,是在KernelStart (source code参考wince420private目录)时建立的,只要WINCE还在跑,就不会解除. OEMAddressTable里的Virtual Addr和Physical Addr是对ARM来说的. 其实对于WINCE, 只能访问它的Virtual address. 也就是说, OEMAddressTable里的Virtual address对WINCE 系统来说才是Physical Address. 经过OEMAddressTable映射后的系统的物理地址,在0x 8000 00000x 9FFF FFFF之间.是caching and buffering的地址,这个地址加上0x 2000 0000,就是它的cache & buffering disabled地址.所有硬件寄存器的地址都在这个地址段上,受MMU保护. 上面讲的系统的物理地址,从0x 8000 00000x BFFF FFFF, 在Kernel Mode下都可以直接访问. ISR是在KERNEL里,也就可以直接访问这些系统的物理地址.无所谓因为ISR只能访问静态映射的虚拟地址. 对于ARM来说,有虚拟地址和物理地址之分,对于WINCE来说,也有虚拟地址和物理地址之分. 可以这么说, ARM的虚拟地址就是WINCE系统的物理地址. 32位的OS总共有4G的虚拟地址空间,WINCE也不例外. 其中,0x 0000 00000x 8000 0000是Application Space; 0x8000 00000x FFFF FFFF是System Reserved. 系统的物理地址就在System Reserved的这段,只能用KERNEL MODE访问. 那么,当APPLICATION和DRIVER(都是运行在USER MODE)要访问这些在System Reserved地址段的硬件寄存器或MEMORY怎么办呢?只好再建立一层映射关系,在Application Space里分配一段空间,把它映射到System Reserved里的地址上,这就是VirtualAlloc/VirtualCopy和MmMapIoSpace干的事情.如果地址的声明是这样: #define RTC_COUNTER *(volatile unsigned *)0x91000000) 那么直接读写就可以了: int nRtc = RTC_COUNTER; RTC_COUNTER = nRtc; 否则,可以用: int nRtc = READ_REGISTER_ULONG(0x91000000); WRITE_REGISTER_ULONG(0X91000000, nRtc); 其实这两种方式的本质是一样的,都是把地址声明成某个数据类型,然后就可以直接读写了.下面是READ_REGISTER_ULONG()和WRITE_REGISTER_ULONG()的定义: #define READ_REGISTER_ULONG(reg) (*(volatile unsigned long * const)(reg) #define WRITE_REGISTER_ULONG(reg, val) (*(volatile unsigned long * const)(reg) = (val)
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 临时分类 > 人文社科


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!