最近碰到一个问题,在开发应用程序中需要操作相应的IO接口,但是该IO口并没有包含到对应的驱动程序中,也就是说没有提供用户操作的接口,我就打算自己在应用程序中直接去操作硬件,后来在网上查阅了不少资料,发现该方法好像不行。这里从网上摘录了一段博文,对该问题做了一定的说明:
在wince 5.0中可以使用如下方法:
unsigned int *gpio_base;
PHYSICAL_ADDRESS PortAddress = {0x56000060, 0};
gpio_base =(unsigned int *)MmMapIoSpace( PortAddress, 0x04,FALSE ); // 获得内存
*gpio_base = 0x0585ff87; // 直接访问硬件
MmUnmapIoSpace(gpio_base,0x04);//释放内存
而在wince6.0中用户态驱动不能调用以下函数:
1、 VM虚拟内存函数:VirtualCopy[Ex], LockPages[Ex], CreateStaticMapping
2、 中断函数:InterruptInitialize, InterruptDone, LoadIntChainHandler
3、 不能直接使用IISR,需要通过转接服务来做GIISR。
4、 OAL层的IOCTL不能直接使用。
目前在各网友的帮助下发现,只能让应用程序加载了一个驱动,通过驱动访问物理内存。具体的实现方法还没有进行尝试,后续会继续更新。