2005-03-29 (火)
*ロボ研
なぜかライントレースが計算したより大きく蛇行するので原因を調べる.シリアルポート経由で動作を読み取ったり,デバッガで処理を追ってみたりした結果,どうもsigned longの計算が怪しい.色々試すと,
unsigned int a; signed long b; // func_return_1()は1を返す. a=func_return_1(); // a=1;ならOK b=-a; // b=-(long)a;ならOK
の結果,aが0xffになってる….どうも結果を代入する変数がlongでもビット数は自動で拡張されないようです.以前から,signed longの除算がおかしい気がしてたのも,これが原因.でも,a=1;と定数を書いたときは,コンパイラの最適化で,意図したとおりに動作するコードが生成されることを考えると変だなぁ.バージョンの古いPCMなので,今のバージョンでは直ってるのかもしれません.
夕食後,無性にクッキーが食べたくなったので,作って食べる.