掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
シリアル通信の受信は? (ID:145647)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
そのコードで動いていれば良いとも言えるのですが、突っ込んで欲しいと言うことなので。 ただし正常に動いているように見えてもたまたまうまくいっている場合も有ります。(^^; ReceivedBytesThresholdは設定値以上のバイト数の受信が有る場合に DataReceivedイベントが起きます。 (ReceivedBytesThreshold=2と設定しておくと、例えば4バイトのデータを 一括で送信した場合、DataReceivedイベントは2バイト受信した時に起きる可能性も ありますし、3バイト受信した場合、4バイト受信した場合に起きる可能性も有ります。 従ってデータが連続して来る場合そのコードでは不具合が出る可能性があります。 例えば3バイト、4バイトでDataReceivedイベントが起きた場合は、 イベントの中で2バイトしかデータを取っていないので、次の受信が来るまで、 受信しているデータを取れない事になります。 最悪の場合データが溜まってオーバーフローする可能性や、最後までデータを取らない可能性 が有ります。 基本的にはReceivedBytesThresholdの値に関係なく DataReceivedイベントでは 受信したデータを全て読み込んで下さい。 >2Bytesのカタマリがさらに連続してくる場合があるので、なるべく高速に処理すべく、 >2Bytes受け取った時点でDataReceivedイベントを発生させたい(ReceivedBytesThreshold=2)。 これは間違いです、データの長さが一定でしかも時間を置いて送信して来る場合を除いて、 ReceivedBytesThreshold=1(デフォルト)にしておいて、来たデータを全て読み込む方法が 一番高速となります。 受信側でたとえReceivedBytesThreshold=1に設定しておいて、送信側で10バイトのデータを一括で 送信した場合、1バイト毎にDataReceivedイベントが起きるわけでは無いのです。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.