2017-12-21 29 views
0

サイプレスFX2LPを使用して30メガバイトのUSBデータ転送をしたいと同時に、それを同時にプロットします。私はこの30メガバイトの転送速度をカバーする戦略を見つけました.1読んだスレッドで1メガバイトのデータを読んでから、それをmain_threadにプロットします。しかし、この戦略には1メガバイトのバッファが必要で、私はそのようなメモリを私のボードには持っていません。USBの高データ転送にはどのような方法が最適ですか?

解決策はありますか?

+1

ようこそスタックオーバーフロー!質問に対するより良い回答を得るために、[最小、完全、および検証可能](http://stackoverflow.com/help/mcve)の作成方法を確認してください。 –

答えて

0

このためにスレッドは必要ありません。シンプルなステップにあなたの問題ダウン

ブレイク:

  1. はどのようにして測定し、私は必要なデータを収集していますか?
  2. データをプロットするにはどうすればよいですか?

ステップ1では、実際の転送コンテンツは必要ありませんか?あなたはタイミングが必要です。基本的には、ダミーデータを転送して/dev/nullに入れますが、多くのメモリを食べることはない対のリスト(nbytes_transferred, timestamp)を保存します。ステップ2.


編集

スレッドの実装に進み、その後、それを保存し、テスト/検証のいずれかの円滑なUIのために絶対に必要ではありません。
ブロック/同期IOを避けるだけです。;非同期/非ブロッキングメソッドを使用します。
Javaでは、これはNIOのようなものです。 Qtで - おそらくQtConcurrentQFutureを使用してください。

は事実上event loopモデルに基づいて、すべてのGUIツールキットの作品は:、何度も何度も、ユーザーキー押下やマウスの使用状況などイベント(のためのOSを照会(通常application.run()コールの内側に隠れて)メインループ転がりがあります[非同期]ネットワークまたはディスクIOの完了または進行中など)、ハンドルまたはのイベントを送出し、最終的にはonButton1Clickメソッドを呼び出し、処理するイベントがなくなるまでスリープします。

一般的に、方法は右の非アクティブのために眠って行くだろうメインループの前に起こるonIdle「イベント」、上にフックする、もあります(CPUパワー&エネルギーを節約するために)。 Qtでは、0タイムアウトQTimer、またはQAbstractEventDispatcher::aboutToBlock()コールバックのいずれかです。お好きなものはthis questionをご覧ください。

これはあまりにも複雑すぎると思われる場合は、おそらくthis library GitHub上で親切にお手伝いをしてください。 (私はちょうどGoogleの前にそれを見つけた瞬間、アフィリエーションはまったくありません)。ソースからは、libusb-1.0のための素敵なQt-onic APIを提供しているように見えます。これは、クロスプラットフォームのUSBアクセスにはおそらく使用されます。ああ、彼らは0タイムアウトQTimerのアプローチを選んだ。

+0

ulidtkoありがとう、私のためのスレッドの利点は、ユーザーの相互作用です。ユーザーは転送や他のやりとりを停止する必要があります。私は自分の仕事のためのタイマーも持っています。現在の戦略のタイマーは1/30秒ごとに起動します。 – javad

+0

ちょっと@javad、私の編集を参照してください! – ulidtko

関連する問題