6

921600 のボーレートで、シリアル経由でマイクロコントローラーからデータを読み取っています。大量の ASCII csv データを読み取っています。非常に高速に読み込まれるため、バッファーがいっぱいになり、残りのすべてのデータが失われます。読めます。serialwin32 の pyserial ソース コードを手動で編集してバッファ サイズを増やすことができることはわかっていますが、それを回避する別の方法があるかどうか疑問に思っていました。

受信するデータ量を見積もることしかできませんが、約 200kB のデータです。

4

5 に答える 5

5

コマンドをuCに送信してデータを送信するに、実行中の別のスレッドでシリアルインターフェイスから読み取ることを検討しましたか?

これにより、書き込みコマンドと読み取り開始後の遅延がいくらか解消されます。バッファ オーバーランが発生していなければ、この方法で成功した SO ユーザーは他にもいます。

これが明確でない場合はお知らせください。これを示すために何かをまとめることができます.

編集

もう少し考えてみると、バッファから読み込んでファイル システムに書き込もうとしている場合、スタンドアロン スレッドでも解決しない可能性があります。処理時間を最小限に抑えるには、一度に 100 バイトを読み取り、serial.Read(size=100)そのデータをキューにプッシュして、転送が完了した後にすべてを処理することを検討してください。

疑似コードの例

def thread_main_loop(myserialobj, data_queue):
    data_queue.put_no_wait(myserialobj.Read(size=100))

def process_queue_when_done(data_queue):
    while(1):
        if len(data_queue) > 0:
            poped_data = data_queue.get_no_wait()
            # Process the data as needed
        else:
            break;
于 2012-04-12T16:59:06.720 に答える
4

デバイス マネージャーの COM ポートの [プロパティ] ページからアクセスできる [受信バッファー] スライダーがあります。[ポート設定] タブの [詳細設定] ボタンをクリックすると表示されます。

COM ポートの詳細設定

より詳しい情報:

http://support.microsoft.com/kb/131016見出しの下の受信バッファー

http://tldp.org/HOWTO/Serial-HOWTO-4.htmlの見出し「割り込み」の下

1、2 ノッチ下げてみてください。

于 2012-04-12T19:56:30.473 に答える