2017-07-18 53 views
-1

我正在使用2臺配備有限unix工具的小型機器。兩者都通過串聯相互連接。我正在傳輸二進制數據,因此設備處於raw模式。發送機器正在將文件發送到另一個文件,並且延遲X ms(指定爲參數)。我想知道是否有可能在目標機器上測量這些延遲,以確定有多少文件即將到來。直到現在我正在使用cat < /dev/ttyS5,但這不是我的目的選項。如何知道什麼時候串行端口上沒有數據unix

有什麼想法?

感謝

+0

Atmel USART已添加硬件來檢測接收器超時。但總的來說,尤其是來自用戶空間,您無法準確測量角色的「到達」時間。試圖衡量角色之間的延遲是愚蠢的錯誤;當「下一個」角色從未到達時,你如何處理案件?此外,你正在問一個XY問題。如果您有適當的消息協議來識別數據報/數據包中的數據並確保數據完整性,則甚至不需要依賴於無法獲得的測量值。 – sawdust

+0

我仍然想知道爲什麼人們不堅持這個問題,而不是質疑爲什麼我會這樣做而不是他們喜歡它。 – Lomezno

回答

0

恕我直言,最簡單的方法就是寫正等待字節串行線上一個小程序。 每次到達某個角色都會重置某種計時器/時間戳。 另一個線程可以在循環中評估此計時器/時間戳,並在計數器大於定義值時遞增計數器。

但請注意,您可能會遇到來自串行線路的延遲,因爲內核及其調度程序在「之間」。此外,你需要適當的鎖定當然!

+0

是的,我有同樣的想法。我遇到的問題是如何測量以毫秒爲單位的時間。我試着用'date +%s%N'在nano秒內得到它,但我的機器不能用'%N'工作。 – Lomezno

+0

在C中,我使用https://linux.die.net/man/2/gettimeofday。它在相對時間內運行得非常好! – g0hl1n

+0

不能使用C ...只有bash/sh,相當有限。大概我不得不使用'time'或'times',還不知道...... – Lomezno

相關問題