什么是USB高数据传输的最佳方式?

时间:2017-12-21 13:24:16

标签: usb transfer

我希望使用cypress FX2LP进行30兆字节的USB数据传输,并同时绘制它的图表。我找到了一个涵盖这个30兆字节传输速率的策略:在读取线程中读取1兆字节数据,然后在main_thread中绘制它。但是这个策略需要1兆字节的缓冲区,我的板上没有这样的内存。

你有其他解决方案吗?

1 个答案:

答案 0 :(得分:0)

你不需要任何线索。

将问题分解为更简单的步骤:

  1. 如何衡量和收集我需要的数据?
  2. 如何绘制数据?
  3. 对于第1步 - 你不需要实际的转移内容,对吗?你只需要时间;基本上你想传输虚拟数据,把它放到/dev/null但保存一对(nbytes_transferred, timestamp)的列表,它们不会占用那么多内存。保存,测试/验证,然后继续执行第2步。

    修改

    线程也不是绝对必要的。
    避免阻塞/同步IO ;使用异步/非阻塞方法 在Java中,这意味着像NIO;在Qt中 - 可能使用QtConcurrentQFuture

    几乎每个GUI工具包都基于event loop模型工作:那里有主循环滚动(通常隐藏在application.run()调用中)这一次又一次查询事件的操作系统(例如用户按键或鼠标使用,计时器启动,[异步]网络或磁盘IO完成或进行等),然后处理发送这些事件,最终调用您的onButton1Click方法,然后最后睡觉,直到有更多事件需要处理。

    通常还有一种挂钩onIdle"事件"的方法,它发生在主循环静止不动之前(为了节省CPU功率和放大器)能量)。在Qt中,这是0超时QTimerQAbstractEventDispatcher::aboutToBlock()回调。有关您的更多信息,请参阅this question

    如果所有这些听起来太复杂,或许请查看this library一些不错的公司在GitHub上开源。 (我刚刚在google上找到它;没有任何关系)。从源代码看,它们似乎为libusb-1.0提供了一个不错的Qt-onic API - 您最有可能用于跨平台USB访问。哦,他们选择了0超时QTimer方法。