サイプレスFX2LPを使用して30メガバイトのUSBデータ転送をしたいと同時に、それを同時にプロットします。私はこの30メガバイトの転送速度をカバーする戦略を見つけました.1読んだスレッドで1メガバイトのデータを読んでから、それをmain_threadにプロットします。しかし、この戦略には1メガバイトのバッファが必要で、私はそのようなメモリを私のボードには持っていません。USBの高データ転送にはどのような方法が最適ですか?
解決策はありますか?
サイプレスFX2LPを使用して30メガバイトのUSBデータ転送をしたいと同時に、それを同時にプロットします。私はこの30メガバイトの転送速度をカバーする戦略を見つけました.1読んだスレッドで1メガバイトのデータを読んでから、それをmain_threadにプロットします。しかし、この戦略には1メガバイトのバッファが必要で、私はそのようなメモリを私のボードには持っていません。USBの高データ転送にはどのような方法が最適ですか?
解決策はありますか?
このためにスレッドは必要ありません。シンプルなステップにあなたの問題ダウン
ブレイク:
ステップ1では、実際の転送コンテンツは必要ありませんか?あなたはタイミングが必要です。基本的には、ダミーデータを転送して/dev/null
に入れますが、多くのメモリを食べることはない対のリスト(nbytes_transferred, timestamp)
を保存します。ステップ2.
編集に
スレッドの実装に進み、その後、それを保存し、テスト/検証のいずれかの円滑なUIのために絶対に必要ではありません。
ブロック/同期IOを避けるだけです。;非同期/非ブロッキングメソッドを使用します。
Javaでは、これはNIOのようなものです。 Qtで - おそらくQtConcurrent
とQFuture
を使用してください。
は事実上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
のアプローチを選んだ。
ようこそスタックオーバーフロー!質問に対するより良い回答を得るために、[最小、完全、および検証可能](http://stackoverflow.com/help/mcve)の作成方法を確認してください。 –