我现在遇到的现象是这样的。我的应用程序在大部分台式机和笔记本上读写USB都很正常(读写一次4ms),没出现问题。但在部分华硕笔记本上就会出现问题,读写不正常,读一次中断数据要10多ms,甚至20多ms,而我们的设备一般是10ms发一次中断数据,然后应用程序收到中断数据后写一次命令读一次数据,读写一次也要10ms多。我是用ReadFile和WirteFile共读写USB的,用的是异步读写。弄了两天,具体什么原因还不清楚,所以上来询问下,希望有人能给出思路或答案或者大家一起探讨下。就算没法解决,最好能讨论出原因。
按理说,用ReadFile来读数据,只是去读系统分配好的一个Buffer,主机和设备的交互不用管,主机自己发IN中断去轮询,有数据就读。设备描述符里设置轮询时间是1ms。为什么这华硕的就有问题呢?我用USB逻辑分析仪专抓设备的中断数据包,时间很正常(10ms),但我的应用程序就很不正常,经常是20ms左右,有时居然是300us。应用程序的时间是我在程序里有时间函数打印看到的。

解决方案 »

  1.   

    不太懂,读写数据时要将数据flush到设备里,这样就“立即”执行了。
      

  2.   

    做成驱动试试,或者不用异步读写试试,是不是你在读的时候释放了CPU,在user mode下线程切换的时间不能控制的.可能不是和华硕有关,而是和windows的版本有关.
      

  3.   

    to jennyvenus:
    读数据应该是不需要做多余操作的吧,只是去读主机准备好的ring buffer而已。至于写数据,我在CreateFile时,设置了标志位FILE_FLAG_WRITE_THROUGH,也没什么效果。如果还再加FILE_FLAG_NO_BUFFER的话,好像读写都会有问题。
    to eyey1:
    读的时候释放CPU是什么意思?我是用线程一直在读。
    和windows版本会有什么关系呢?都是SP3的,和文件系统有关系吗?
    用ReadFile读USB设备数据,数据是由主机一直发IN中断,如果有数据的话,HID driver会将数据读到ring buffer里,之后ReadFile只是读buffer,为什么会出现读数据需要那么久的时间呢?
      

  4.   

    to webipstin:
    我的USB设备是HID类的,用系统自带的HID驱动。系统安全监控软件我关掉了还是一样。
    to jennyvenus:
    我用了HidD_FlushQueue,没有什么效果,我用USB分析仪抓过,我的读命令下去后,设备在2-3ms内是会回数据的,但是程序读到数据就会比较慢。写数据下去我想可能也会存在同样的问题。
      

  5.   

    看了楼上兄弟们和你的回复,我收回我说的话.如果真怀疑华硕,建议看看是usb1.0还是2.0,用u盘和测速软件和其它机器比较下.