2012-11-23 66 views
1

我正在使用Scribbler 2 robotFluke 2板卡,並通過Myro in Java與福祿克通信。 Fluke板是Scribbler和用Java編寫的桌面客戶端之間的藍牙通信橋。它通過一個RS232串行端口與Scribbler通信。有符號和無符號字節之間的自動轉換?

這可能是一個愚蠢的問題,上述系統很複雜,所以如果我沒有解釋清楚,請耐心等待。

我的問題的背景: Java使用帶符號的字節。福祿克是(我認爲)用C編寫的,以便使用無符號字節。 Scribbler上的固件寫入Spin,它也使用無符號字節。 Scribbler固件的一些命令字節碼使用大於127的值,因此當它們從我的Java客戶端發送時,它們將作爲負數發送。機器人沒有響應這些> 127命令,我試圖理解爲什麼。

我的問題的要點:如果我從Java發送162,它顯示爲-94(在我的控制檯中用'print'看到這一點)。 Spin固件是否將此視爲162,因爲一個字節是一個字節,還是會將其視爲其他內容?

我知道旋轉代碼正在爲params做一些移位操作,移動命令可以大於255,但它並不是針對特定命令執行的。

pub Move | x_coord, y_coord 
'  0 1  2  3  4  5 
'Format 162 type hXByte lXByte hYByte lYByte 
' type := indata[1] 
    x_coord := (indata[2]<<8 | indata[3]) 
    y_coord := (indata[4]<<8 | indata[5]) 
+0

番茄 - 你有一個Scribbler.java版本的move()實現,或者你自己實現它嗎?我有Scribbler.java的1.15版本,我即將實現Scribbler.cs中的新功能 - 這就是你在做什麼?有小費嗎? –

+0

@KevinMiller - 我有v 1.1.5 - 它有'void move(double translate,double rotate)'在裏面。自從我看了所有這些之後的幾年 - 我想我已將它更新爲IPRE Scribbler2 Firmware v1.1.2 –

+0

番茄 - 感謝您的回覆,但我可能會感到困惑 - 旋轉函數「pub Move」由代碼觸發162從串行端口,但162永遠不會被Scribbler.java發送。 Scribbler.java中的void move(double translate,double rotate)最終將代碼109發送到串行端口。旋轉移動()和java move()不相關。您是否能夠通過單個java命令讓機器人移動到(x,y)座標? –

回答

2

字節是8位,沒有更多。它本身沒有簽名或未簽名。算術運算有所作爲 - 僅僅因爲有不同的算術運算。所以Java只有整數運算符,而C有兩個運算符。當一個字節通過RS232發送時,它沒有任何操作。所以不用擔心,你的字節不會被Java破壞。

1

在有符號字節中的位是一樣的無符號字節位,它僅僅是一個解釋的運營商,如數學和顯示的目的的問題。如果將更改爲有符號字節的無符號字節發送給旋轉固件,該旋轉固件將其視爲無符號字節,則值將相同。要對無符號字節進行數學運算,通常將它們的值轉換爲一個int,該int具有足夠的帶符號範圍以包含無符號字節。不要問我用一個無符號long來做什麼;)

相關問題