2017年1月14日土曜日

「あれっ? このプログラム動作変わってなくね?俺はそもそもちゃんと書き込んだのか」現象の対策

はじめに


ロボットの作成中は次の3つのステップを何回もたどります。

   プログラム修正  --> ロボットへ書き込み --> ロボットの動作が変わったことを確認

この3つは省略することができない動作です。


ロボットを長時間調整していて意識が朦朧としてくると、

「プログラムを修正したつもりでいるのにロボットの動作が変わらないぞ?」

となり、

「あれっ? このプログラム動作変わってなくね?俺はそもそもちゃんと書き込んだのか?」現象

に遭遇することが多々あります。


筆者はこの現象に長年悩まされていましたが、ついに重い腰を上げこの現象の対策に乗り出すことにしました。

対策(視覚的に)


とつぜんですが、皆さんはC++の__TIME__、__DATE__、__FILE__というマクロはご存知でしょうか。
これらのマクロはコンパイル時にその環境に応じて"文字列"に置換されます。

まず、対策としてこれらのマクロをロボット起動時に文字列として出力するようにしました。

myprintf3()関数はコンソール出力用の関数です。(適宜自分の環境のコンソール出力用関数に読み替えて下さい。)

compile_hashという変数は__TIME__を文字列ではなく、整数として見て各文字毎に和を取った値です。コンパイルを行う度に値が変わります。

ソース例










しかし、この対策は文字列が出力されるコンソールを見るという視覚的な要素が絡むので、調整に疲れた極限状態の際には効果をあまり発揮しません。

対策(聴覚的に)


視覚的な対策を行う際にcompile_hashというコンパイルの度に代わる変数を用意していました。
これを使って以下のような処理をマイコンの起動時に走らせています。

    compile_hashの値に応じた音程で音を鳴らす。

これにより、筆者は「あれっ? このプログラム動作変わってなくね?俺はそもそもちゃんと書き込んだのか?」現象を完全に撃退することに成功しました。

おわりに


ほんとに些細な工夫ですが、プログラムのデバッグ時の無駄時間を少し減らすことに成功しました。個人でのロボット制作の醍醐味の一つが自分を自分のためのSEとして使うことだと思います。こういう工夫するのって結構楽しくないですか。














0 件のコメント:

コメントを投稿