計算歩行モーションを実行できるようにデバッグ

Posted at 06/08/01 Comment(2)»

私が今使用しているRoboShellではパラパラ漫画方式のモーション再生を支援してくれる仕組みは入っているのですが、計算歩行などを使ったオリジナルモーションを実行できる仕組みはありません。まずは簡単にこのパラパラ漫画方式のテーブルを書き換えるやり方で計算歩行をさせようと考えて実装してみたのですが、どっぷりはまってしまって実行するとリセットがかかったり暴走したりするバグに悩まされていました。

コンパイルするたびに挙動が変わり2週間近くぼちぼちと調査をいていたのですが、先日ようやくその対処ができてオリジナルモーションを作成するメドが立ってきました。

とりあえず作ったのは現状を維持するために今のPWMの値を読み出してそのまま設定するといったものだったのですが、これがいけなかったようです。つまりモーション実行をしてもなんにも動作しないはずだったのですがこうすることによって暴走が引き起こされていました。

PWM_Value()という関数で現状のPWM値を読み出すのですが PWMの割り込みルーチンであるPWM_SDC_ISR()でも同じ変数を同じ関数で参照しており、割り込みが発生していたときに割り込み関数内で割り込み前にアクセスしていた変数(もしくは関数)にアクセスすると正しく割り込みが処理されないのではないかと推測しています。割り込み後に正常に割り込み前の状態に戻れないために暴走していたのではないかというわけです。とにかく割り込みで使用する変数には同じ値が入っている専用の変数を用意しお互いが別々の関数および変数を参照するようにすると暴走は発生しなくりました。

JTAGデバッガを使っても暴走していたのですが、JTAGデバッグで根気良くソースを追いかけていき暴走直前の位置がわかり解決に至りました。これ以外にも機能を大きく削減してみたり、ポートをON・OFFさせるルーチンを随所にいれてオシロで観測しながら怪しいところをしぼりこんでいってこの変数がどうも問題らしいということを突き止めました。それにしてもかなり時間がかかってしまいました。

仕事であればどうにか調べて裏を取るところなのですが現状ではモーション再生を優先して後で調べたいと思います。TamKNOxさんならわかるかもしれませんね。これが動かないことには計算歩行ができなかったので、出鼻をくじかれた感じですがなんとかモーション作りに入っていけそうです。

"計算歩行モーションを実行できるようにデバッグ"へのコメント

CommentData » Posted by TeamKNOx at 06/08/01

こんばんは

 ご迷惑をおかけしました。
 もう少し、落ち着いたら対応させていただきます。

以上、よろしくお願いいたします。

CommentData » Posted by りおーじあ at 06/08/01

TeamKNOxさん、こんばんは。
コメントありがとうございます。

>ご迷惑をおかけしました。

いえいえ、Roboshellのままで使用する分には
正常に動作していたと思いますので
仕方がないと思います。

実際に対処したソースがいる場合は別途連絡してください。

それでは。

"計算歩行モーションを実行できるようにデバッグ"へコメントを投稿

(運営者が承認するまではコメントは表示されません。しばらくお待ちください。)

上の情報を保存する場合はチェック

スポンサードリンク