DS3.2开发USB驱动时SubmitUrb一个输入URB蓝屏问题的解决

技术分类: 消费电子设计  | 2008-03-11
作者:computer00

EDN博客精华文章   作者:computer00

  在使用DS3.2开发USB PDIUSBD12的驱动程序时,使用DS的向导自动生成驱动后,添加发送数据相关代码后,测试发送数据成功。继续增加读数据相关代码,使用最简单的同步调用,结果出现蓝屏……反复查看代码,不管是使用buffered模式还是direct模式,设置成异步调用并设置完成例程,结果还是蓝屏依旧...在经过无数次的修改代码、蓝屏之后,人都快崩溃了...看别人的驱动以及DS自带的例子中都是这样做的呀,看来问题不在这里。找到代码中的设备构造函数Computer00USBDevice::Computer00USBDevice,发现原来是DS向导生成的代码SB了...

  本来应该是
    // Initialize each Pipe object
    m_Endpoint1In.Initialize(m_Lower, 0x81, 16);   
    m_Endpoint1Out.Initialize(m_Lower, 1, 16);   
    m_Endpoint2In.Initialize(m_Lower, 0x82, 64);   
    m_Endpoint2Out.Initialize(m_Lower, 2, 64);   

  而向导自动生成的代码在0x81和0x82前面都漏掉了0x,变成十进制的了,我倒塌...

  结果就是两个输出端点可以正常工作,而一旦对输入端点操作时,就导致系统蓝屏了...

  将代码改正过来,再测试,系统不再蓝屏,而且也可以正常从设备读取到数据了。

  另外,如果应用程序提供的缓冲区比实际返回的数据长度少时,就会读不到数据,并且以后再使用足够长度的缓冲区去读时也还是读不到。需要将设备停用后重新启用才能重新读到数据。所以应用程序应该提供足够大的缓冲区(例如端点的最大数据包长度)去读数据。

                  Computer00 2008.03.11

0
0
(请您对文章做出评价)
加载中

对文章的评论

更多评论

剩余字数:  

相关在线研讨会

我要参加

Fluke红外热像仪技术研讨会–设备预测性维护

时间:2008-10-29 10:00:00-12:00:00
简介:通过本次研讨会,您可以了解红外热像检测的原理及在设备预测性维护方面的应用;红外热像仪可以及时发现设备出现的早期隐患,并对问…

浏览该文章的用户还看过...

  • 文 章

  • 论 坛

  • 博 客

  • 小 组

设计资源与分销

  • 博客推荐

  • 论坛推荐

  • 在线研讨会