Scribbler 2 ロボットとFluke 2ボードを使用し、Java の Myro を介して Fluke と通信しています。Fluke ボードは、Scribbler と Java で記述されたデスクトップ クライアント間の Bluetooth 通信ブリッジです。RS232 シリアル ポートを介して Scribbler と通信します。
これはばかげた質問かもしれませんし、上記のシステムは複雑なので、うまく説明できなくてもご容赦ください。
私の質問の背景: Java は符号付きバイトを使用します。Fluke は (私が思うに) C で書かれているので、符号なしバイトを使用します。Scribbler のファームウェアは、同じく符号なしバイトを使用するSpinで書かれています。Scribbler ファームウェアのコマンド バイトコードの一部は 127 より大きい値を使用しているため、Java クライアントから送信されると負の数値として送信されます。ロボットはこれらの 127 個を超えるコマンドに応答しません。その理由を理解しようとしています。
私の質問の要点: Java から 162 を送信すると、-94 と表示されます (コンソールで「print」を使用してこれを確認します)。バイトはバイトであるため、Spin ファームウェアはこれを 162 と見なしますか、それとも別のものと見なしますか?
Spin コードは、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])