阅读:2228回复:4
严重!68013自带驱动ezusb.sys连续读几分钟后就死机!!!
1:我是slavefifo模式,应用程序读端点EP6,达到38M/byte,连续几分钟后死掉,需要拔掉usb口才能关闭应用程序。
2:跟踪驱动,发现进入Ezusb_CallUSBD(fdo, urb)函数里的KeWaitForSingleObject()函数就死掉!这个函数一直没有返回!! 3: 某些大侠会说是usb的fifo数据没有准备好,可是我的slwr接地,一直在写的,如果是数据没准备好,那么下一次数据来时KeWaitForSingleObject()应该会返回的啊!受到阻塞的应用程序会继续运行的.不至于完全死掉(非的拔掉usb线才能退出) 4:当然,在不写fifo时,即slwr为高时驱动也会停在KeWaitForSingleObject()这里,因为确实是没有数可读嘛. 各位高手难道没遇到这个问题么? 5:今天查了旧的帖子,发现很多人提出用处理超时的方法,我试着在ezusbsys.c里加入 LARGE_INTEGER timeout; 编译时提示:ezusbsys.c(402) : error C2275: 'LARGE_INTEGER' : illegal use of this type as an expression 是不是我少加了什么头文件啊?可是少加头文件好像不是这样提错的。 我是驱动菜鸟,才声明一个变量一编译就出错,成功做过超时处理的大侠能否将这一段的详细代码帖出来啊?? 菜鸟们会很感激的!! |
|
沙发#
发布于:2007-05-29 09:52
今天解决了一个很弱的问题,但是还是要写出来给跟我一样的新手看看.
68013自带驱动ezussb是C语言的项目,不是CPP(C++)的项目,变量声明一定要放在函数的最前面,我在ezusbsys.c里加入LARGE_INTEGER timeout;提示出错就是因为在赋值语句后声明造成的. |
|
板凳#
发布于:2007-05-28 19:18
都4天了,怎么高手们都不愿意吭声啊??
我发现在《windows 2000驱动程序设计指南》的例子中加入LARGE_INTEGER timeout; 这一句是编译得过的,而在68013自带的ezusb源程序中加入LARGE_INTEGER timeout; 确编译不过,原因可能是《windows 2000驱动程序设计指南》的例子是.cpp文件,而68013 的驱动例子却是.C文件,这问题怎么解决啊?怎样才能将68013的驱动源文件改为.cpp的项目 而又能编译得过啊?望大侠们指教啊!!! |
|
地板#
发布于:2007-05-24 19:35
两天了!怎们没人愿意说一下呢??我边看驱动开发教程边等......
|
|
地下室#
发布于:2007-05-24 15:28
楼主,我也在用slave fifo,不过还没有开始搞驱动,
我现在遇到一个问题: 我现在用68013的slave fifo模式 用EP2 autoout 用EP6 autoin PC可以通过EP2写入512字节的数据包 可是EP6的autoinlen 只能设为0x40 如果设为0x200(512字节),用控制面板去读 就会没有响应 也就是每次EP6传的数据包 不能超过64字节 我的计算机是2.0的口啊 这是怎么回事啊 楼主遇到这样的问题没 |
|