阅读:1870回复:4
写驱动的时候在什么情况下需要VirtualAlloc和VirtualCopy绑定GPIO地址呢?
我写背光驱动的时候使用下面的代码绑定GPIO既然没有办法既然没有办法控制GPIO,但是使用“volatile IOPreg * v_pIOPregs = (IOPreg * )IOP_BASE;”就可以实现对GPIO的设定。请问这是什么原因呢?
v_pIOPRegs = (volatile IOPreg*)VirtualAlloc(0, sizeof(IOPreg), MEM_RESERVE, PAGE_NOACCESS); if (v_pIOPRegs == NULL) { DEBUGMSG (1,(TEXT("v_pIOPRegs is not allocated\n\r"))); return TRUE; } if (!VirtualCopy((PVOID)v_pIOPRegs, (PVOID)IOP_BASE, sizeof(IOPreg), PAGE_READWRITE|PAGE_NOCACHE)) { DEBUGMSG (1,(TEXT("v_pIOPRegs is not mapped\n\r"))); return TRUE; } |
|
沙发#
发布于:2008-07-25 02:10
驱动不是工作在内核态. 所以不能直接使用io对应的虚拟地址, 这个地址往往被设置在内核态(高2G的空间)
所以驱动需要二次映射, 把地址映射到自己能访问的空间. |
|
板凳#
发布于:2008-07-26 05:51
你的CE是什么版本?是6.0吗?
|
|
|
地板#
发布于:2008-07-28 09:34
我使用的是windows ce5.0.
|
|
地下室#
发布于:2008-07-28 14:54
我是初学者,只会看和学习,还没有能力回答问题。很丢人
|
|
|