yushui213
驱动小牛
驱动小牛
  • 注册日期2006-04-17
  • 最后登录2016-01-09
  • 粉丝1
  • 关注0
  • 积分1015分
  • 威望115点
  • 贡献值0点
  • 好评度102点
  • 原创分0分
  • 专家分0分
阅读:1573回复:9

DeviceIoControl的疑问!(急问)

楼主#
更多 发布于:2007-09-24 00:36
我用DS做了个USB驱动,Endpoint2Out用Interrupt进行传输,USB芯片采用PDIUSBD12芯片,底层是我的同学一起开发的,现在遇到了一个问题:
就是在编写应用层的USB通信程序时,发现其中的DeviceIoControl竟然花了16ms的时间(不管一次请求的大小是64B还是256B)。
我用WinDbg跟踪了USB设备驱动,发现在驱动层m_Endpoint2OUT.SubmitUrb (pUrb, NULL, NULL, 5L);这个函数上花了16ms的时间,我想这个时间应该不正常的吧?怎么会用了这么长的时间呢?

请高手帮个忙,能不能帮我解释一下这么长的时间是什么引起的呢?
谢谢!
yushui213
驱动小牛
驱动小牛
  • 注册日期2006-04-17
  • 最后登录2016-01-09
  • 粉丝1
  • 关注0
  • 积分1015分
  • 威望115点
  • 贡献值0点
  • 好评度102点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-09-24 12:26
没人知道么?
求求大家了
oushengfen
驱动牛犊
驱动牛犊
  • 注册日期2007-06-28
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分747分
  • 威望124点
  • 贡献值1点
  • 好评度82点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-09-24 14:14
这个原因有两个,一个可能是固件程序有问题,还有一个是驱动程序写得有问题.按道理不会这样的
oushengfen
驱动牛犊
驱动牛犊
  • 注册日期2007-06-28
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分747分
  • 威望124点
  • 贡献值1点
  • 好评度82点
  • 原创分0分
  • 专家分0分
地板#
发布于:2007-09-24 14:14
具体的,我没有遇到这样的情况,所以要亲自查才知道.
yushui213
驱动小牛
驱动小牛
  • 注册日期2006-04-17
  • 最后登录2016-01-09
  • 粉丝1
  • 关注0
  • 积分1015分
  • 威望115点
  • 贡献值0点
  • 好评度102点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2007-09-24 16:25
谢谢大哥

用示波器看了,好像发到固件的数据的间隔就是8ms左右,估计是驱动程序的问题。
如果是这样的话,会是什么地方的原因呢?能不能帮我说说大概的地方呢?
gutian98
禁止发言
禁止发言
  • 注册日期2003-01-12
  • 最后登录2016-12-11
  • 粉丝4
  • 关注2
  • 积分760分
  • 威望8026点
  • 贡献值1点
  • 好评度364点
  • 原创分0分
  • 专家分21分
  • 金点子奖
  • 社区居民
5楼#
发布于:2007-09-25 14:48
用户被禁言,该主题自动屏蔽!
yushui213
驱动小牛
驱动小牛
  • 注册日期2006-04-17
  • 最后登录2016-01-09
  • 粉丝1
  • 关注0
  • 积分1015分
  • 威望115点
  • 贡献值0点
  • 好评度102点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2007-09-25 17:24
谢谢楼上的兄弟
!!
我立马去研究研究!
ubuntu_amateur
驱动牛犊
驱动牛犊
  • 注册日期2006-08-04
  • 最后登录2008-12-04
  • 粉丝0
  • 关注0
  • 积分970分
  • 威望98点
  • 贡献值0点
  • 好评度97点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2007-10-11 12:36
解决了没?
碰到同样的问题,,,指点哈,,,
there is a will,there is a way
yushui213
驱动小牛
驱动小牛
  • 注册日期2006-04-17
  • 最后登录2016-01-09
  • 粉丝1
  • 关注0
  • 积分1015分
  • 威望115点
  • 贡献值0点
  • 好评度102点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2007-10-11 13:09
经过多次的调用,好像时间就是那么长
因为我现在做的是USB音频流的传输,本来打算用interrupt,现在改为isochrous,发现应用程序调用这个API的时间好像还是16ms左右,不过因为采用isochrous,将包的大小改为了4096

应用程序调用这个API跟需要传输的数据量有关系,好像数据量跟时间不是成正比。
比方说,原先传输的数据大小为64字节,用了16ms。现在改为1920字节,用了大约120ms,就是说平均起来的时间是减少了
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2007-10-12 14:07
每次传输需要一个时间损耗的,包括协议的冗余字符,软硬件的延迟等等,这个时间损耗是相对固定的,当你一次传输的数据量较多时,这些时间损耗在整个时间里占的比例就会小,因为总线上更多的时间是用于数据的传输,当你每次传输的数据量较小时,这个延迟就能明显的显现出来了,楼上的例子很好的证明了这一点
游客

返回顶部