(日々の記録)デジタルオシロを買った。(金)Xbee電力ロガー親機のAPIフレーム表示に苦労するプログラムは考えたようには動かない(10/27/09)プログラムは考えたようには動かない、書いたようにしか動かないというのは言い古されたプログラミングの格言だが、まさしくこれを地で行くデバッグだった。ステップ、APIフレームの表示にえらい時間を食ってしまった。たいした開発量でないからと、簡単なメモを書くくらいでコーディングに入ると大抵うまくいかないものである。Xbeeから送られたAPIフレームを一旦バッファーに溜めて、画面に人間が見てすぐわかるAPIデータを表示するのが第二ステップの目的である。前の第一ステップのPCのUART画面に同時にデータを表示するより構造的には、はるかに簡単だ。フレームが送り終わるのを待って、フレームフォーマットに従って、送信モジュールアドレスや、受信サンプル数、データを表示していく。ところがこれがうまく動かないのである。コーディングを楽にするため、バッファーを文字配列にし、添字を使ってフレームからデータを抜き出すのだが、書式付の出力関数が思ったような数値を出してくれない。16進でだしたり、2バイトの整数で出したり、ビット表示だったりするので結構やっかいなのだが、出力されるのが、これが全くでたらめの値である。ChaNさんの書式付出力関数xprintfはprintfのサブセットで軽いので愛用させてもらっている。慣れているはずなのにどうしてだろう。おかしいので、元に戻って、送られてきたフレームを16進表示してみた。うひゃあ、これが全く似ても似つかぬAPIフレームが出力された。リセットしたり電源を入り切りすると、時々元の見慣れたAPIフレームが表示される時がある。ハードは何もいじっていないぞ。おかしなデータに戻る。元のデータがこれでは、xprintfの書式どころではない。X-CTUを取り出してXbeeを確かめる。いつものデータを間違いなくはきだしている。Mega128のVccを3.3Vに落とした副作用だろうか。いや、もうひとつのファイルモニター機能は何事もなく動く、ハードの問題ではない。新しくUARTを追加したMega128のPE0,PE1ピンに何か特殊な機能があるのだろうか。いやデータシートには何もない。