2017-07-18 11 views
-1

私は限られたunixツールを持つ2台の小さなマシンで作業しています。両者はシリアルで相互に接続されています。バイナリデータを転送しているので、デバイスはrawモードです。送信側のマシンから別のマシンにファイルが送信され、その間にX ms(パラメータとして指定)の遅延があります。どのくらいのファイルが来るのかを特定するために、宛先マシン上の遅延を測定することが可能かどうかを知りたいと思います。今まで私はcat < /dev/ttyS5を使っていましたが、これは私の目的にとっては選択肢ではありません。シリアルポートunixでデータが到着しないときを知る方法

おかげ

+0

Atmel USARTには受信機のタイムアウトを検出するためのハードウェアが追加されています。しかし、一般的には、特にユーザー空間からは、文字の「到着」時間を正確に測定することはできません。文字間の遅延を測定しようとするのは愚かなことです。 「次の」キャラクターが決して到着しない場合、あなたはどのようにこのケースを扱いますか?また、あなたはXY質問をしています。データグラム/パケットのデータを識別するための適切なメッセージプロトコルがあり、データの完全性を保証する場合は、入手不可能な測定値に依存する必要はありません。 – sawdust

+0

私はなぜ人々がなぜそれを好きなのかというより、私がどのようにして行うのか、質問するのではなく、質問に固執していないのだろうかと疑問に思います。 – Lomezno

答えて

0

最も簡単な方法は、シリアル回線上のバイトを待っている小さなプログラムを書くことです私見。 文字が到着するたびに、ある種のタイマー/タイムスタンプがリセットされます。 別のスレッドは、このタイマー/タイムスタンプをループ内で評価し、カウンタが定義された値より大きい場合はカウンタをインクリメントすることができます。

ただし、カーネルとそのスケジューラが「間にある」ため、シリアル回線からの遅延が発生する可能性があることに注意してください。さらに、コースの適切なロックが必要です!

+0

はい、私は同じアイデアを持っています。私が持っている問題は、時間をミリ秒単位で測定する方法です。私は 'date +%s%N'でナノ秒で取得しようとしましたが、マシンは'%N 'で動作しませんでした。 – Lomezno

+0

Cではhttps://linux.die.net/man/2/gettimeofdayを使用しています。それは相対的な時間のためにかなりよく働く! – g0hl1n

+0

Cを使用できません... bash/shのみですが、かなり制限があります。おそらく、私は 'time'や' times'を使わなければならないでしょう... – Lomezno

関連する問題