llbird
驱动牛犊
驱动牛犊
  • 注册日期2001-06-19
  • 最后登录
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1536回复:2

请问斑竹,我的USB驱动构架是不是有问题

楼主#
更多 发布于:2001-10-10 12:49
    最近写了个USB设备驱动程序,大体上程序构架是这样的:
StartInterruptUrb1()      //读中断管道1
{
  ...
  IoSetCompleteRoutine(OnInterrupt1)
  ...
}

OnInterrupt1()
{
  StartBulkUrb1();      //读块传输管道1
  ...
  StartInterruptUrb1()      //读中断管道1
}

StartInterruptUrb2()      //读中断管道2
{
  ...
  IoSetCompleteRoutine(OnInterrupt2)
  ...
}

OnInterrupt2()
{
  StartBulkUrb2();      //读块传输管道2
  ...
  StartInterruptUrb2()      //读中断管道2
}


  这样,在两个循环里做读操作,读取实时采集来的数据。可以只有一个循环可以正常运行。如果在OnInterrupt里不读“块传输管道”(即,只有两个读“中断管道”的循环),两个“中断管道”的读循环都正常,请赐教!
^_^
llbird
驱动牛犊
驱动牛犊
  • 注册日期2001-06-19
  • 最后登录
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2001-10-11 17:14
    谢谢斑竹Ray Yang!我试了一下,发现本质现象好象是:如果发到下一层(应该是USBDI.SYS)的“未决请求”超过两个;也就是在“完成例程”里,如果连续发超过两个读请求下去,下层就无法返回了,两个是可以的。
    如下:

StartInterruptUrb1() //读中断管道1
{
...
IoSetCompleteRoutine(OnInterrupt1)
...
}

OnInterrupt1()
{
StartBulkUrb1(); //读块传输管道1
StartBulkUrb2(); //读块传输管道2
StartBulkUrb3(); //读块传输管道3
...
StartInterruptUrb1() //读中断管道1
}


失败!只有两个读请求可以返回!

    请指点,谢谢!
^_^
rayyang2000
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2012-09-13
  • 粉丝3
  • 关注0
  • 积分1036分
  • 威望925点
  • 贡献值3点
  • 好评度823点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2001-10-11 13:29
抱歉!没做过interrup方式,没有什么意见。看看别人有什么意见。
天天coding-debugging中----超稀饭memory dump file ======================================================== [b]Windows Device Driver Development and Consulting Service[/b] [color=blue][url]http://www.ybwork.com[/url][/color] ========================================================
游客

返回顶部