[21IC首页] [21IC资料下载] [21IC器件搜索[alldatasheet网] [中国芯片手册网] [电子查询网] [磁动力工作室] [驱动程序开发网] [射频网络] [液晶之家] [可控硅应用技术网]

Computer○○的家当®

 
 
载入中...
   
                                                         设置为首页      [站长入口]    站点2: [EDN站点]   站点3:[61IC站点]  USB专区: [圈圈的USB专区]




载入中...

日志内容


DS3.2开发USB驱动时SubmitUrb一个输入URB蓝屏问题的解决
电脑圈圈 发表于 2008-3-11 14:11:00

在使用DS3.2开发USB PDIUSBD12的驱动程序时,使用DS的
向导自动生成驱动后,添加发送数据相关代码后,测试发
送数据成功。继续增加读数据相关代码,使用最简单的同步
调用,结果出现蓝屏……反复查看代码,不管是使用buffere
d模式还是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) | 引用通告 | 编辑       

发表评论:
载入中...

 
 

 

用户信息

载入中...

    
    
 
家当信息
载入中...

站长简介:  

    Computer00,男。B型血,天蝎座。爱好电子技术及计算机技术。21IC中国电子网[技术交流]版版主。

 

最新回复

载入中...

圈圈公告 
载入中...

最新家当

载入中...

友情链接 

 

家当主题

载入中...

最新留言

载入中...

搜我的家当 

          chunyang工作室
        为您提供无线通讯模块