阅读:1929回复:11
我该怎么办,调试USB时操作系统挂起
我的应用程序和USB硬件传输数据的时候,每当传输不成功的时候(DeviceIoControl没有返回,而不是返回失败),一将USB线拔掉或者reset USB设备,操作系统就会挂起,鼠标、键盘都不响应,这时就只能通过断电来重启机子。
请问有没有谁碰到过这种问题?该如何解决?谢谢 |
|
沙发#
发布于:2007-10-10 17:36
呵呵,确实,驱动里面没有做Cancel IRP,所以CancelIo()可能会不起作用
顺便问下:softice内有没将硬件重枚举或类似于强制CancelIo()的命令? |
|
板凳#
发布于:2007-10-10 16:18
用overlap操作这个设备,但我怀疑你的驱动没有支持,呵呵。
如果支持,可以在应用程序做个定时器,超时就 CancelIo(yourhandle); |
|
|
地板#
发布于:2007-10-10 15:52
多谢楼上的几位朋友
我的想法是看能不能不修改驱动,因为同样的程序操作两个不同的硬件,一个运行正常,一个就出现了上述的现象 当然,驱动还是存在一些问题,比如在传输的时候没有timeout处理等;但是,由于驱动不是我写的,虽然有源码,贸然修改怕出现意想不到的结果,所以我想在硬件和应用程序方面修改,尽量避免上述问题的现象,不知弟兄们有没有好的建议? |
|
地下室#
发布于:2007-10-10 12:40
用户被禁言,该主题自动屏蔽! |
|
5楼#
发布于:2007-10-10 12:16
设置一个定时器,如果timout,就如下
Irp->IoStatus.Status = STATUS_UNSUCCESSFUL; Irp->IoStatus.Information = info; IoCompleteRequest(Irp,IO_NO_INCREMENT); |
|
|
6楼#
发布于:2007-10-10 12:09
谢谢楼上的同学
确实,在DeviceIoControl pending的时候,我没有取消这个请求。但我觉得如果USB线拔掉了,那么此时的USB设备就不存在,DeviceIoControl 便会返回FALSE,系统不应该会挂起啊 欢迎讨论 |
|
7楼#
发布于:2007-10-10 11:49
用户被禁言,该主题自动屏蔽! |
|
8楼#
发布于:2007-10-10 11:40
驱动我去年用了一年,一直没有这个现象。以前应用程序如果从USB硬件读不到数,拔掉USB线DeviceIoControl就返回FALSE,而现在一拔线PC就挂起了,DeviceIoControl没有返回;
我的鼠标是USB的,键盘是ps2的,机子挂起之后所有硬件都没有响应,但是softice可以打开; 请问各位,有没有可能是硬件的问题? |
|
9楼#
发布于:2007-10-09 20:50
驱动里对cancel irp进行处理呢,好像要写个回调函数吧
|
|
|
10楼#
发布于:2007-10-09 15:12
好像你没有说系统除了键鼠以外是否正常运作,大概你的键盘和鼠标也是USB口的,换ps/2口的键鼠试试
还有可能是因为共用一个usb root hub,你的设备把状态搞乱了?分开用不同的usb root hub 试试? |
|
11楼#
发布于:2007-10-09 14:38
你写的驱动有问题吧
|
|