fkingreg
驱动牛犊
驱动牛犊
  • 注册日期2009-01-14
  • 最后登录2009-11-15
  • 粉丝0
  • 关注0
  • 积分18分
  • 威望121点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:904回复:1

【求助】怎么才能提高传输速度??

楼主#
更多 发布于:2009-01-15 00:12

我的应用是这样的,usb设备用于采集数据,然后发送到PC。

固件中采用两个缓冲区的方法,一个缓冲区接收的时候另一个用于发送,每传输一次缓冲区互换。每个缓冲区如果填满数据大概是6k byte,一个数据长度为24字节,缓冲区容纳240个数据。

与Pc的通讯采用如下机制:每次传输以PC发送的请求开始,固件收到请求后开始发送数据,端点每次传输最大64字节,因此,在发送开始后,在端点的发送完成中断里面继续发送数据,直到所有数据发送完成。

PC端DLL函数是这样的:发送一个请求(同步方式writefile)后,用异步readfile循环读数据,每次读完数据把数据放到传递来的缓冲区中,直到返回的数据长度不等于64时退出。然后上层的应用程序再循环调用这个DLL函数。

现在的现象是:如果固件每秒钟收到1000个数据,整个传输过程可以顺利的完成,可以通过文件记录看到所有的数据都正确接收了,并且每次读到的缓冲区里面的数据个数大概在20个左右。 当每秒钟接收的数据达到2000个时,就出现了很明显的丢包,大量的数据处理不过来了。

这样算下来,传输速度只有20多K字节每秒,是不是太慢了一点?

我首先觉得是固件处理速度的问题,把固件的总线频率涨到了24M,没什么效果,接着我又把接收数据的功能去掉,只是定时增加缓冲区的索引,还是没效果;最后我甚至把写端点的代码都去掉了,只是告诉端点数据长度而不写,节省单片机的处理时间,但是结果还是差不多。。。

所以我想问一下,是不是我上位机接收数据的方法不合适?还是跟驱动有关?还是其他什么原因?
20多K的速度也实在是太慢了。。。

恳请高手指教! 先谢过了!
fkingreg
驱动牛犊
驱动牛犊
  • 注册日期2009-01-14
  • 最后登录2009-11-15
  • 粉丝0
  • 关注0
  • 积分18分
  • 威望121点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2009-01-19 22:58
游客

返回顶部