猫はシリアルポートデータを破損します。

猫はシリアルポートデータを破損します。

シリアルポートにいくつかのバイトを書き込むアプリケーションがあります。cat /dev/ttyS0送信された内容を調べると、データがコマンドによって破損していることがわかりましたcat。シリアルポートで送信される内容を確認する他の方法はありますか?

catなぜデータが変更されるのかを知っている人はいますか?

編集する:反対側に別のアプリケーションがあり、データを傍受して内容を確認したいのですが、アプリケーションは引き続き機能するはずです。

答え1

端末(またはcatが表示する場所)でデータが破損していませんか? catデータが破損する可能性が低いです。

(octaldump)を使用してシリアルポートからデータをダンプするとod(印刷可能性に依存せず)、発生した内容を正確に確認できます。od -cASCIIデータが必要な場合に使用します。

それでも破損が発生した場合、シリアルポートが誤って設定されている可能性がありますか?より適切に設定できることをsetserial確認してください。stty

答え2

catデータは変更されません。 NULLバイトを含む行を切り捨てる古いUnixシステムがあるかもしれませんが、Linuxはそうではなく、現代のUnixに似たシステムはないと思います。

一方、バイナリデータを端末に直接表示しようとすると、端末は制御文字を表示を制御するコマンドとして解釈します。これが制御文字の目的です。生データの印刷可能な表現を表示するには、次のようないくつかの解決策があります。

  • Runcat -Aは読み取ることができますが、制御文字のあいまいな表現を印刷します(たとえば、^Aバイト0x01または2バイトシーケンス0x5e 0x41)。
  • を実行するhexdump -Cか、od -t x1別の16進ダンププログラム(または必要に応じて8進ダンプ)を実行してください。
  • 実行して押すless /dev/ttyS0と、F一部のデータを読み込んでCtrl+C閲覧できます。 Less内で入力すると、-r制御文字の元の表示と印刷可能な表示が切り替わります。

読み取りには、/dev/ttyS0シリアルポートを介して送信された内容ではなく、シリアルポートで受信された内容が表示されます。これを行うには、たとえばstraceデバッガを使用して作成中のアプリケーションを監視します。

答え3

破損していません。何が起こっているかは、コマンドがいくつかのcatバイトを取得し、アプリケーションがそのバイトの一部を取得することです。したがって、実行すると、catアプリケーションは読み取ったバイトの両方を見逃し、catアプリケーションとアプリケーションの両方がストリームの(他の)部分が破損しているように見えます。

関連情報