先恭喜大家新年快樂、鴻「兔」大展,已經接連好幾個禮拜談論通訊問題,不過這主題還有一些應用層面問題可以再深入討論,今天的主題就鎖定在指令型資料合併傳輸。
有時候控制需要傳送很多資料,如何能夠快速有效率傳遞資料,資料合併傳輸是常用的方法之一,它的優點是為了降低確認回應次數。一般應用於工業控制場合,為了確認接收端是否收到資料,每傳送一筆資料後,接收端要回應一次,至於回應的內容為何?由設計者自行定義。請注意要降低資料遺失的風險,關鍵在於
雙向通訊有回應確認機制,而非資料合併。
以 Android 手機傳送方位感應器資料為例,若有 XYZ 軸三筆資料要傳,為了確保傳送成功,也為了避免後面的資料覆蓋前面資料,每傳出一筆後,手機就等待 NXT 回應,有正確回應後再傳下一筆,因此傳這三筆資料就要等三次回應,是不是浪費時間?如果這三筆資料合併成一組資料傳送,那只要等一次回應就好。
雖然合併成一組資料字串比較長,藍芽會分段傳送,但是這個字串只要一個結尾字元,接收端以這個結尾字元當結束,因此接收端通常會設置緩衝器 (buffer),先把資料接收,一直等收到結尾字元再處理這個長字串,並回應發射端處理情形。如果你少了接收緩衝器,那也會發生資料覆蓋情形,還好 NXT 每個信箱可接收最長 58 字元,這就是它的資料緩衝區大小。這意思說一般NXT 可一次最多接收 5 (控制字元) + 58 (資料) + 1 (結束字元) = 64 字元。當超過 64 字元會發生甚麼事?我不清楚,有興趣的朋友試看看,我的猜測會蓋到下一個信箱。
當然,手機程式可以採用信箱法(以指令型模擬信箱型)將資料傳給一般 NXT,使用三個信箱分別傳送三種不同軸向資料,若是不在意資料覆蓋,那是可以省略回應機制,只是同軸向資料,會被最新資料覆蓋。
新ubuntu2404,新尹倉1120
-
Ubuntu24.04
每次ubuntu系統出新版本,我的更新都是滯後的。最新的ubuntu2404.iso已經超過6G,估計是因為加入了大量中文字體致使體積大增。我十多年來一直當作系統盤的4個G的U盤再也裝不下了,最終我決定把一個32G的U盤當系統安裝盤。
昨晚研究了multibootUSB好久,最終引導不...
1 天前
沒有留言:
張貼留言