Windows CE 下I/O操作基础
来源:互联网 发布:apache配置文件 编辑:程序博客网 时间:2024/05/03 17:59
对外设进行I/O操作实际上也就是读写外设的寄存器,而我们通常使用的X86或者ARM处理器在硬件上决定了wince系统启动后,无法直接访问物理地址,因此需要做一些工作来实现I/O操作.
首先要理解windows CE下的地址映射机制。wince有两种地址:物理地址和虚拟地址.不同架构的CPU硬件上的区别导致地址映射也不同。MIPS和SHx处理器,不采用MMU,直接在CPU和内核里定义1G的物理地址;而X86和ARM带有MMU单元,在OEMAddressTable中定义物理地址到虚拟地址间的映射关系或者是OS启动后调用CreateStaticMapping和NKCreateStaticMapping来实现从虚拟地址到物理地址的静态映射.经过静态映射的地址,可以由操作系统内核用于ISR访问设备。如果我们要在应用程序中访问外设,必须在物理地址和虚拟地址间建立动态映射关系,我们可以使用VirtualAlloc和VirtualCopy(或者直接调用MmmapIoSpace函数)来实现。
其次,如果是操作通过总线挂接的I/O或者存储器,必须先把总线地址转化成CPU上的系统地址,再做物理地址到虚拟地址的映射。这里需要查CPU的Datasheet,找出所要操作的I/O地址.先调用HALTranslateBusAddress( )把总线地址转化成CPU上的系统地址,再调用MmmapIoSpace函数实现虚实映射;也可以使用TransBusAddrToVirtual()直接把总线上的地址转化成系统的虚拟地址。
第三,在一般的应用程序中访问I/O是访问它的缓存段虚拟地址,而驱动中必须访问无缓存段虚拟地址。简单来说无缓存段虚拟地址=缓存段虚拟地址+0x20000000。
总结起来,如果是wince内核(如HAL)访问外部I/O,只需要在OEMAddressTable中定义物理地址到虚拟地址间的映射关系就可以了;如果是应用程序或者驱动要访问I/O,要做的工作包括:1。在CPU物理地址和虚拟地址间做一个动态映射,2。对虚拟地址进行操作。
- Windows CE 下I/O操作基础
- Windows CE 下I/O操作基础
- WINDOWS CE下I/O端口访问
- Windows CE5.0 下I/O操作基础(1)
- WINCE下I/O操作基础
- WINCE下I/O操作基础
- Windows I/O操作
- Windows I/O操作
- Windows I/O操作
- Windows I/O 操作--CreateFile
- windows 下 Overlapped I/O
- I/O操作(下)
- linux下I/O操作
- Windows CE下驱动程序开发基础
- Windows CE下驱动开发基础
- Windows CE下驱动程序开发基础
- Windows CE下驱动程序开发基础
- Windows CE下驱动程序开发基础
- oracle的培训
- VC之CString,wchar_t,int,string,char*之间的转换
- LoadRunner监视的性能计数器
- domino 调用 WebService 接口
- Resin/Tomcat下使用jstl
- Windows CE 下I/O操作基础
- PowerDesginer 初探(转载) 很不错的一片入门blog
- WinCE BSP中打印信息的实现介绍
- mootools设置点击全部文本框时变化颜色
- javascript实现兼容ie与firefox下dom的xpath
- asp.net 如何获取html控件select
- 7BIT 编码 长短信
- 配置基本网络参数
- ioctl参数命令设置