1

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])
4

1 に答える 1

2

バイトは 8 ビットで、それ以上のものはありません。それ自体は署名されていないか、署名されていません。違いを生むのは算術演算です。単純に異なる算術演算があるからです。したがって、Java は整数演算のみに署名していますが、C には両方があります。バイトは RS232 経由で送信されますが、操作はありません。Java によってバイトが損なわれることはありません。

于 2012-11-23T18:32:37.620 に答える