cy757
驱动牛犊
驱动牛犊
  • 注册日期2005-07-21
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分11分
  • 威望68点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
阅读:1870回复:4

写驱动的时候在什么情况下需要VirtualAlloc和VirtualCopy绑定GPIO地址呢?

楼主#
更多 发布于:2008-07-25 00:46
我写背光驱动的时候使用下面的代码绑定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;
    }
high
论坛版主
论坛版主
  • 注册日期2002-08-10
  • 最后登录2010-07-26
  • 粉丝4
  • 关注0
  • 积分60分
  • 威望655点
  • 贡献值0点
  • 好评度56点
  • 原创分0分
  • 专家分60分
沙发#
发布于:2008-07-25 02:10
驱动不是工作在内核态. 所以不能直接使用io对应的虚拟地址, 这个地址往往被设置在内核态(高2G的空间)

所以驱动需要二次映射, 把地址映射到自己能访问的空间.
microsun
论坛版主
论坛版主
  • 注册日期2002-11-11
  • 最后登录2014-07-18
  • 粉丝0
  • 关注0
  • 积分1052分
  • 威望1159点
  • 贡献值0点
  • 好评度848点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2008-07-26 05:51
你的CE是什么版本?是6.0吗?
学海无涯
cy757
驱动牛犊
驱动牛犊
  • 注册日期2005-07-21
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分11分
  • 威望68点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
地板#
发布于:2008-07-28 09:34
我使用的是windows ce5.0.
gooogleman
驱动牛犊
驱动牛犊
  • 注册日期2007-03-02
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分15分
  • 威望179点
  • 贡献值0点
  • 好评度18点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2008-07-28 14:54
我是初学者,只会看和学习,还没有能力回答问题。很丢人
WINCEqq 群39063007
游客

返回顶部