シリアルポートを介してデータを受信するときは、中断することなくクリーンな転送速度を強制します。

シリアルポートを介してデータを受信するときは、中断することなくクリーンな転送速度を強制します。

私は、データのサブニブルが常に同じ順序に従うPCにデータを送信できるマイクロコントローラを使用してプロジェクトを作成しました。たとえば、私のデータは次のように送信されます。

x0 x1 x2 x3 x4 ..... xE xF

ここで、xは0からFまでの16進値です。

最初は転送はうまくいきますが、PCからマイクロコントローラにデータを送信してからデータを返すと、常にまったく同じバイト位置をスキップしようとします。たとえば、代わりに...

x0 x1 x2 x3 x4......

私は得る:

x0 x2 x3 x4.....

コードとその効率を再確認してエンコードできないようにしました。特に、PCにデータを生成するのと同じ関数が毎回まったく同じであり、その関数がデータ型を指定しているため、低いニブルがシーケンス番号である場合にはさらにそうです。転送が完了するまで待ちます。

これにより、いくつかのUNIX設定を適用する必要があると思います。

setserialとsttyを見てみましたが、実際にどの設定が最善かを知りたいです。シリアルテストの実行中に、私のコンピュータが他のすべてのプロセスをロックしても構いません。

setserialでopening_waitとclose_delayオプションを調整しようとしています。 low_latencyを有効にし、アプリケーション(別名od)でNiceコマンドとioniceコマンドを使用してI / Oを監視することもできます。しかし、私が使用しているアプリが故障する可能性がありますか?これはデータの読み出しに使用するコマンドです。

od -t x1 -w16 -v /dev/ttyS0

それでは、シリアルポートで文字を失うことなくすべてのデータを取得できる最も便利なUNIXツールは何ですか?両方のデバイスのデータレートは57600bpsに設定されており、長さ1メートルのシリアルポートケーブルを使用しています。

ベストアンサー1

おすすめ記事