4948|13

74

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

wince 6.0 驱动异常问题 [复制链接]

我在wince6.0 下修改按键驱动

  1. [/
  2. BOOL KeyPad::IsrThreadProc(void)
  3. {
  4.         RETAILMSG (1, (TEXT("------------------keypad InterruptInitialize success1\r\n")));
  5.     m_hevInterrupt = CreateEvent(NULL, FALSE, FALSE, NULL);

  6.     if (m_hevInterrupt != NULL)
  7.     {
  8.                 RETAILMSG (1, (TEXT("------------------keypad InterruptInitialize success2\r\n")));
  9.         if (InterruptInitialize(SYSINTR_KEYPAD, m_hevInterrupt, NULL, 0))
  10.         {

  11.             KeyPadIstLoop(m_hevInterrupt);
  12.         }
  13.     }

  14.     return(FALSE);
  15. }

  16. DWORD KeyPadIsrThread(KeyPad *pKP)
  17. {
  18.         RETAILMSG (1, (TEXT("------------------keypad KeyPadIsrThread\r\n")));
  19.     pKP->IsrThreadProc();
  20.         RETAILMSG (1, (TEXT("------------------keypad KeyPadIsrThread\r\n")));
  21.     return(0);
  22. }

  23. BOOL KeyPad::IsrThreadStart(void)
  24. {
  25.         RETAILMSG (1, (TEXT("------------------keypad IsrThreadStart\r\n")));
  26.    HANDLE hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)KeyPadIsrThread, this, 0, NULL);

  27.    CloseHandle(hThread);
  28.    RETAILMSG (1, (TEXT("------------------keypad IsrThreadStart\r\n")));
  29.    return(TRUE);

  30. }
  31. #]
复制代码


当启动系统时提示如下的错误
------------------keypad IsrThreadStart
------------------keypad KeyPadIsrThread
Exception 'Prefetch Abort' (3): Thread-Id=054a0002(pth=85303a34), Proc-Id=00400002(pprc=81d29308) 'NK.EXE', VM-active=01e40002(pprc=87e6ae4c) 'udevice.exe'
PC=c0b41c28(???+0xc0b41c28) RA=c0b41c28(???+0xc0b41c28) SP=d364fe7c, BVA=c0b41c28
这是什么错误,从提示看,应该是在执行pKP->IsrThreadProc();
时出现的问题。
大家有没有碰到这样的问题?这是什么异常啊?
此帖出自WindowsCE论坛

最新回复

我也是这样的错误。  详情 回复 发表于 2009-8-19 18:33
点赞 关注
 

回复
举报

63

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
嘿嘿,wince6.0 已经不指出是哪个DLL造成异常了,给排查带来难点。
找到出事的DLL的map文件,具体看PC=c0b41c28(???+0xc0b41c28),
我博客有些介绍,
good luck
此帖出自WindowsCE论坛
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
1,KeyPadIsrThread只运行一下,没有loop
2,IsrThreadProc也不能多次调用CreateEvent和InterruptInitialize
3,你应该开一个等待线程,wait你的m_hevInterrupt,然后做相应操作.
4,确保你的SYSINTR_KEYPAD在OAL层和你的按键的IRQ是对应的.
此帖出自WindowsCE论坛
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

4
 
引用 1 楼 gooogleman 的回复:
嘿嘿,wince6.0 已经不指出是哪个DLL造成异常了,给排查带来难点。
找到出事的DLL的map文件,具体看PC=c0b41c28(???+0xc0b41c28),
我博客有些介绍,
good luck

这个dll应该就是正在使用的按键的dll吧,问题是不是处在"???"上?
我先看下你的博客吧,Thanks
此帖出自WindowsCE论坛
 
 
 

回复

90

帖子

0

TA的资源

一粒金砂(初级)

5
 
引用 2 楼 rushonin 的回复:
1,KeyPadIsrThread只运行一下,没有loop
2,IsrThreadProc也不能多次调用CreateEvent和InterruptInitialize
3,你应该开一个等待线程,wait你的m_hevInterrupt,然后做相应操作.
4,确保你的SYSINTR_KEYPAD在OAL层和你的按键的IRQ是对应的.

IsrThreadProc应该就是只运行一次,loop
是在KeyPadIstLoop(m_hevInterrupt);中
此帖出自WindowsCE论坛
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

6
 
KeyPadIsrThread还在运行,你就closeHandle了.
此帖出自WindowsCE论坛
 
 
 

回复

57

帖子

0

TA的资源

一粒金砂(初级)

7
 
引用 5 楼 rushonin 的回复:
KeyPadIsrThread还在运行,你就closeHandle了.


恩??那应该在什么时候closeHandle。
这个是仿照wince5.0 的案件驱动写的。
此帖出自WindowsCE论坛
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

8
 
从你的出错信息“'udevice.exe'”看,应该是你的驱动没有跑在Kernel Mode,导致调用函数InterruptInitialize()失败,udevice.exe是用来加载User Mode驱动的。可以修改platform.bib,在你的keypad驱动后面加上K。例如原来是SH的,改成SHK。
此帖出自WindowsCE论坛
 
 
 

回复

62

帖子

0

TA的资源

一粒金砂(初级)

9
 
楼上的wince6很熟啊.
此帖出自WindowsCE论坛
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

10
 
引用 7 楼 wd1394 的回复:
从你的出错信息“'udevice.exe'”看,应该是你的驱动没有跑在Kernel Mode,导致调用函数InterruptInitialize()失败,udevice.exe是用来加载User Mode驱动的。可以修改platform.bib,在你的keypad驱动后面加上K。例如原来是SH的,改成SHK。


这是个可能性之一,我遇到过,但是通常还有很多种情况。
wince6.0 驱动在内核态,比wince5.0的用户态难度要大很多的。
此帖出自WindowsCE论坛
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

11
 
引用 7 楼 wd1394 的回复:
从你的出错信息“'udevice.exe'”看,应该是你的驱动没有跑在Kernel Mode,导致调用函数InterruptInitialize()失败,udevice.exe是用来加载User Mode驱动的。可以修改platform.bib,在你的keypad驱动后面加上K。例如原来是SH的,改成SHK。

不是这样的问题,我的本就是带有K的。
此帖出自WindowsCE论坛
 
 
 

回复

110

帖子

0

TA的资源

一粒金砂(初级)

12
 
引用 7 楼 wd1394 的回复:
从你的出错信息“'udevice.exe'”看,应该是你的驱动没有跑在Kernel Mode,导致调用函数InterruptInitialize()失败,udevice.exe是用来加载User Mode驱动的。可以修改platform.bib,在你的keypad驱动后面加上K。例如原来是SH的,改成SHK。

从打印信息来看,还没有执行到InterruptInitialize()。
此帖出自WindowsCE论坛
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

13
 
引用 7 楼 wd1394 的回复:
从你的出错信息“'udevice.exe'”看,应该是你的驱动没有跑在Kernel Mode,导致调用函数InterruptInitialize()失败,udevice.exe是用来加载User Mode驱动的。可以修改platform.bib,在你的keypad驱动后面加上K。例如原来是SH的,改成SHK。

这位大哥好厉害!
此帖出自WindowsCE论坛
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

14
 
我也是这样的错误。
此帖出自WindowsCE论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表