2005-02 << 2005-03 >> 2005-04

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なので,今のバージョンでは直ってるのかもしれません.

夕食後,無性にクッキーが食べたくなったので,作って食べる.

2005-02 << 2005-03 >> 2005-04