
ASCII 文字「NUL」の値は 0 です。この文字を、データが送信されていないと解釈されることなくシリアル ライン経由で送信することは可能ですか?
答え1
はい、もちろんです。文字のフレーミングは、その内容とは別です。8 ビットのゼロが本質的に「データが送信されていない」と解釈される理由はありません。ディスク セクターがゼロでいっぱいであるのと同じです。
詳しく説明すると、一般的な非同期シリアルでは、スタート ビット、8 つのデータ ビット、ストップ ビットの順になります。8 つのデータ ビットは残りますが、すべて 0 になります。スタート ビットとストップ ビットは、受信側に「ここに文字があります」と伝えます。文字内のビットが何であるかは関係ありません。
受信側プログラムが NUL を「データなし」と解釈した場合、それは受信側プログラムの問題ですが、これはアプリケーション層の問題です。
たとえば、受信プログラムが端末エミュレーターである場合、NUL を受信しても何もしない可能性があります (実際の端末のほとんどがそうするため)。シリアル ポート API は、NUL 文字の受信を登録し、それをプログラムに渡します。端末エミュレーターは、「ああ、これは無視しよう」と判断します。
非同期シリアル回線を介して「バイナリ」データを送信するアプリケーションは数多くありますが、NUL がまったく送受信されていなかったら、これらのアプリケーションは失敗していたでしょう。
答え2
シリアル プロトコルにはスタート ビットおよびストップ ビットがあり、データはそれらの範囲内で区切られます - N81 (パリティなし、8 ビット、1 つのストップ ビットで任意の ASCII 文字を送信でき、1 つの共通エンコーディング)。したがって、スタート ビットを送信するか送信しないかによって、何も送信しないことと null を区別できます。