リポート依頼

がた老さんからAVR Dragonデバッグのリポートを依頼さてれてた。がた老さんもAVR Dragonを購入された時にリポートを依頼されてたはずであるが、なぜかこちらにお鉢が回ってきたのだ。 😆
AVR DragonのデバッグとはAVRISP mkIIのようなシミュレータではない実機を使ったいわゆるICEとして動作するのである。従ってセンサなどの周辺機器からのデータを受け取りながらデバックできるのである。別次元の開発環境なのだ。
ネットではAVR Dragonを使ってる方は幾つか発見できるが、デバッグのことを書かれた文書が意外とすくないので、メモを残すことにする。

印象

Atmel Studio6環境下でAVR Dragonのデバックを使ってみたところの印象は以下の通り

良い点

  1. VC++などのマイクロソフトの開発環境と同一なので慣れてる方なら入りやすい。
  2. AVRというマイコンなのであるが、ソースコードレベルのデバッグができる。
  3. ブレークポイントは問題なく止まる
  4. スコープ内の変数の中身を確認できる。
  5. リアルタイムのレジスタの値やRAMやROMの値が確認できる

悪い点

  1. 起動が遅い
  2. 操作も重い

という感じであるが、実用に耐えうるレベルだと思う。

実際のデバッグ

デバッグはハードウェアだけでできる訳ではなくソフトウェアとの組み合わせで使えるか使えないかが決まってくる。ATmel Studio6は、よくできた統合環境でこれを介したデバッグは快適であると言える。
今回のデバッグのターゲットは大気圧計である。バグの内容は気圧の変化によりLCDに▲▼のマークを出すつもりが、気圧の変化に関わらず写真にあるような感じで▼のマークが出ているのだ。

▼が表示されてる

▼が表示されてる

バグの原因は色々と考えられるが、AVR Dragonでデバックして確認してみたのがこれである。

LCD表示箇所でブレイクしたものである。デバッガからは12時間分の気圧データ配列trend_dataが覗くことができる。今のアルゴリズムなら12時間分まるまるデータが入ってきたらtrendという変数に有効な気圧偏差が入ってるはずである。
デバッガ開始直後では有効な気圧データが貯まってなので▲▼のマークを出すことができない。そこで以下の様にソースを変更してテストを続けてみた。気圧偏差を格納してるtrend変数は0、それに対して意図通りに分岐して▲▼のマークを表示させている。

配列のデータを確認

配列のデータを確認

しかし現実は▼のマークだけ表示される。データ処理の問題というより表示に問題があるのが分かった。

正常な分岐

正常な分岐

バグの原因はこうであった。気圧偏差の表現にLCDのアイコンを利用したのであるが、▲▼のマークと電池残量のアイコンはだけは同じアドレスに書き込むのである。つまり同時に▲▼を表示させようとするとデータをORしないといけないのであるが、そうは作ってなかったのである。だから▲の後に▼を表示させたので▼マークだけが表示された訳である。

今回のバグは、ばんとさんの物忘れが原因だった。LCDドライバを書いて挙動を決定したのは、ばんとさんなんだが、この件をすっかり忘れてた。 😳

修正したのがこれである。

修正

修正

これでバグがとれて、期待通りの動きになった。

ソフトは書いたようにしか動かない。ばんとさんにとっては経験とか知識とかはつまり思い込みなのだ。思い込みが現実(ハードウェア)と違うことが、いわゆるバグなのである。デバックとは思い込みと現実とすり合わせなのである。

評価

このように変数に格納されてるデータもスコープ内だったら覗くことができるしウォッチ式も設定できるのである。十分に使える道具であるのは確かである。

自分の知識と経験に揺るぎない自信がある方なら兎も角、ばんとさんのように粗忽者にとっては便利な道具になるであろう。ただし剥き出し基板のAVR Dragonを万人に薦めることはできない。AVRに慣れててAVR Dragonにバッファを入れたりケースに入れたりと飼い慣らすことができる方に向けである。