阅读:1575回复:9
DeviceIoControl的疑问!(急问)
我用DS做了个USB驱动,Endpoint2Out用Interrupt进行传输,USB芯片采用PDIUSBD12芯片,底层是我的同学一起开发的,现在遇到了一个问题:
就是在编写应用层的USB通信程序时,发现其中的DeviceIoControl竟然花了16ms的时间(不管一次请求的大小是64B还是256B)。 我用WinDbg跟踪了USB设备驱动,发现在驱动层m_Endpoint2OUT.SubmitUrb (pUrb, NULL, NULL, 5L);这个函数上花了16ms的时间,我想这个时间应该不正常的吧?怎么会用了这么长的时间呢? 请高手帮个忙,能不能帮我解释一下这么长的时间是什么引起的呢? 谢谢! |
|
沙发#
发布于:2007-10-12 14:07
每次传输需要一个时间损耗的,包括协议的冗余字符,软硬件的延迟等等,这个时间损耗是相对固定的,当你一次传输的数据量较多时,这些时间损耗在整个时间里占的比例就会小,因为总线上更多的时间是用于数据的传输,当你每次传输的数据量较小时,这个延迟就能明显的显现出来了,楼上的例子很好的证明了这一点
|
|
板凳#
发布于:2007-10-11 13:09
经过多次的调用,好像时间就是那么长
因为我现在做的是USB音频流的传输,本来打算用interrupt,现在改为isochrous,发现应用程序调用这个API的时间好像还是16ms左右,不过因为采用isochrous,将包的大小改为了4096 应用程序调用这个API跟需要传输的数据量有关系,好像数据量跟时间不是成正比。 比方说,原先传输的数据大小为64字节,用了16ms。现在改为1920字节,用了大约120ms,就是说平均起来的时间是减少了 |
|
地板#
发布于:2007-10-11 12:36
解决了没?
碰到同样的问题,,,指点哈,,, |
|
|
地下室#
发布于:2007-09-25 17:24
谢谢楼上的兄弟
!! 我立马去研究研究! |
|
5楼#
发布于:2007-09-25 14:48
用户被禁言,该主题自动屏蔽! |
|
6楼#
发布于:2007-09-24 16:25
谢谢大哥
用示波器看了,好像发到固件的数据的间隔就是8ms左右,估计是驱动程序的问题。 如果是这样的话,会是什么地方的原因呢?能不能帮我说说大概的地方呢? |
|
7楼#
发布于:2007-09-24 14:14
具体的,我没有遇到这样的情况,所以要亲自查才知道.
|
|
8楼#
发布于:2007-09-24 14:14
这个原因有两个,一个可能是固件程序有问题,还有一个是驱动程序写得有问题.按道理不会这样的
|
|
9楼#
发布于:2007-09-24 12:26
没人知道么?
求求大家了 |
|