阅读:1536回复:2
请问斑竹,我的USB驱动构架是不是有问题
最近写了个USB设备驱动程序,大体上程序构架是这样的:
StartInterruptUrb1() //读中断管道1 { ... IoSetCompleteRoutine(OnInterrupt1) ... } OnInterrupt1() { StartBulkUrb1(); //读块传输管道1 ... StartInterruptUrb1() //读中断管道1 } StartInterruptUrb2() //读中断管道2 { ... IoSetCompleteRoutine(OnInterrupt2) ... } OnInterrupt2() { StartBulkUrb2(); //读块传输管道2 ... StartInterruptUrb2() //读中断管道2 } 这样,在两个循环里做读操作,读取实时采集来的数据。可以只有一个循环可以正常运行。如果在OnInterrupt里不读“块传输管道”(即,只有两个读“中断管道”的循环),两个“中断管道”的读循环都正常,请赐教! |
|
|
沙发#
发布于:2001-10-11 17:14
谢谢斑竹Ray Yang!我试了一下,发现本质现象好象是:如果发到下一层(应该是USBDI.SYS)的“未决请求”超过两个;也就是在“完成例程”里,如果连续发超过两个读请求下去,下层就无法返回了,两个是可以的。
如下: StartInterruptUrb1() //读中断管道1 { ... IoSetCompleteRoutine(OnInterrupt1) ... } OnInterrupt1() { StartBulkUrb1(); //读块传输管道1 StartBulkUrb2(); //读块传输管道2 StartBulkUrb3(); //读块传输管道3 ... StartInterruptUrb1() //读中断管道1 } 失败!只有两个读请求可以返回! 请指点,谢谢! |
|
|
板凳#
发布于:2001-10-11 13:29
抱歉!没做过interrup方式,没有什么意见。看看别人有什么意见。
|
|
|