移動運用レポート Feed

2006年7月 7日 (金)

ミニバスケ用電光スコアボード&タイマー(9)

<タイマー部>

ダンマリの原因は割り込みプロシジャだった。
間違いないと確信していたのに、やはり人間が考えるものには必ず誤りがある! ま、制御に使ったCPUは事故を起こしたエレベーターのと同じだけど、こっちはオモチャだから大丈夫。
写真は、5:31でゲームクロックが一時停止し、30秒ルールで11秒経過した状態。 明るい黄色がゲームクロックの一時停止表示、左の黄色は点滅していて30秒ルールのタイマー動作表示。

6m&ダウン コンテストから帰って来て移動の様子や釣り場のロケハンしてきた写真を別のブログにアップしてたのでプログラムの見直しが延び延びになっていたが、一応動作した。

割り込みプロシジャで四分の一秒の変数を更新し、主プログラム側(タイマー動作時)でポーリングして変数の変化が4回目を判断し(1秒経ったら)ゲームクロックや30秒タイマーを動かす仕組みにしている。
このため、スイッチのセンスが「4回目の判断」と重なって遅延され押されたという判定が遅れて、なんとなくギクシャクとのろまチックになるので改善した。

事故を起こしたエレベーターを例にすれば、籠を昇降させるモーターを動かす条件は…
(1)ドアが閉じてしまっている事
(2)行き先階が現在の階でない事
(3)地震センサーなどその他の条件がOKである事
他に条件はあるだろうけど、(1)はプログラムがバグってても守られなければならない事で、(3)の異常で籠の中に人が閉じ込められる「故障」とは全く質が異なる。
なんか話が逸れたがオレのようなシロウトでも、あのエレベーター事故は「とんでもなくおかしい」とわかる。

で、スイッチの反応は本家ウェブページにある,秋月のDDSキットの制御プログラムでも紹介した世界一速いスイッチ読み取りルーチン(自己申告)を割り込みプロシジャの中に埋め込んで、外部から参照する方式のため、早過ぎでオン/オフの状態継続回数判定の合間に100マイクロ秒のウェイトを入れた。ところが…
danger ゲームクロック動作中に「動作」スイッチを押しながら「一時停止」スイッチを押す。
一時停止中に「一時停止」スイッチを押しながら「動作」スイッチを押す。
このような同時押しでクロックがフリーズするバグ。

danger 30秒ルールの「開始」スイッチを押すとき、その「解除」スイッチを押しながらだとフリーズ。
その逆の30秒タイマーカウント中に「開始」スイッチを押しながら「解除」スイッチを押すとフリーズ。
このような同時押しでもフリーズ。

原因はクロック・タイマーの動作・停止の状態遷移のため必ず違うスイッチを使う事にしていたが、スイッチの反応を早める改善の影響で状態が遷移した後も1つ前の状態でのスイッチが押下されたまま突っ走っていた。 これは各状態の先頭にそれ以前の状態で押したスイッチが放されるまで待つ処理でバグを回避した。
「一時停止」を押したまま「動作」を押してもゲームクロックは「動作」だけを押した状態になるまで動かない。 ちょっと使い勝手が悪いが、普通にスイッチを押す分にはこんな事はあり得ない。
ただ小学生の悪ガキがいらうからネ、無茶苦茶押されたりして、フリーズすると喜ぶんだshock

ウェブページ

アクセスランキング

フォトアルバム

最近のコメント

更新ブログ

最近のトラックバック

プロフィール

フォトアルバム

白鳥飯店

Powered by Six Apart
Member since 12/2008