バイトはいつでも入ってくる可能性があるため、入ってくるデータのバッファリングは重要です。だからあなたはすべきです
- 受信データをバッファリングする
- バッファをスキャンして完全なデータを見つける
- バッファから使用済みデータを削除します
シリアルポートにまだ問題があるかどうか疑問に思っています. もしそうなら、私は C# でシリアル ポート プログラミング言語を開発しました。誰もが遭遇するほとんどすべての問題を解決できると信じています。
是非一度ご覧になってみてはいかがでしょうか?例えば; 次のようにシリアルポートからの着信データをバッファリングし、文字列操作を簡単に行うことができます。
state Init
// define a global variable
our $BUFFER = "";
jump(Receive);
end state
state Receive
recv();
$len = length($DATA_PACKET);
if("$len > 0") {
$BUFFER += $DATA_PACKET;
call(Parser);
}
end state
state Parser
// check if buffer matchs regular expression pattern
if(match($BUFFER, "(?<WILLDELETE>.*?<STX>(?<DATA>.*?)<ETX>(?<CHECKSUM>[0-9A-F]{2}))")) {
// Received complete data
$lenData = length($WILLDELETE);
$BUFFER = remove($BUFFER, 0, $lenData);
// Do operations with the other parsed fields. $DATA and $CHECKSUM in this example.
}
end state
プロジェクトは sourceforge で無料で入手できます。ご不明な点がございましたら、お気軽にお問い合わせください。
プロジェクトホームページ
リンクをダウンロード