...確率は低いですが、メッセージにストップバイトではないときに、メッセージに「10と13」という値が次々に含まれる可能性があると想像できます。
シリアルデータパケットのフォーマットを設計するときは、データの一部が終了シーケンスに等しい場合を考慮する必要があります。考慮すべきもう1つのことは、送信中に文字が破損したり失われたりする可能性があることです。開始文字、停止文字、データペイロードバイト、チェックサムまたはCRCバイト、転送エラー修正バイトは破損の影響を受けません。フレーミングメカニズムは、パケットが破損したデータを検出できる必要があります。
これらすべてに取り組むにはいくつかの方法があります。
私は、パケットがシリアルバイトでのみフレーム化されるという作業上の仮定を行っています。ハンドシェイクラインはフレーミングに使用されません。時間遅延はフレーミングに使用されません。
送信パケット長
末尾の終了文字の代わりに[またはそれに加えて]パケットの長さを最初に送信します。
長所: ペイロードは効率的なバイナリ形式で送信されます。
短所: 送信開始時のパケット長を知る必要がある。
特殊文字をエスケープする
ペイロードデータを送信するときに、特殊文字をエスケープします。これは以前の回答ですでに説明されています。
長所: 送信者は、送信の開始時にパケットの長さを知る必要はありません。
短所: エスケープする必要があるペイロードバイトの数によっては、効率がやや低下します。
開始文字と停止文字を含まないようにエンコードされたペイロードデータ
パケットのペイロードは、開始文字または停止文字を含めることができないようにエンコードされています。通常、これは、ASCIIまたはHex-ASCII表現として数値を送信することで行われます。
長所: 一般的な端末プログラムで人間が読める形式。エスケープを処理するためのコードは必要ありません。送信の開始時にパケットの長さを知る必要はありません
短所: 効率が低下します。1バイトのペイロードデータの場合、数バイトが送信されます。