組み込みプログラムデバッグ【おすすめ:シリアルモニター】
動作チェックとしてのデバッグ
プログラム転送も無事完了したところで組み込みシステムとしてハードウェアで構成した実機でプログラム動作をチェックします。プログラミングに精通しているひとにとっては改めて解説する必要はないと思いますが、デバッグというものです。あまりプログラムサイズが大きくなるとデバッグも大変であることから区切りのよいところで行うようにするのがよいです。
単機能で単純なプログラムであればこの段階でほぼ完成なのですが、ある程度多機能で複雑なアプリケーションにおいては設計で想定した機能が正常に実施されているかを確認する作業が必要です。この作業がいわゆるデバッグ作業と呼ばれるものです。
デバッグはとても地味で繊細で根気がいる作業です。自分との戦いでもあります。一つを解決するのに数日かかることもあります。プログラムは論理的に構成するデジタル技術なのでたった1文字の間違いでも正常に動作しません。バグには必ず原因がありますので頑張って追求してください。
組み込みシステムの場合はハードウェアの動作を伴うデバッグが要求されますので、ハードウェアの知識もフル活用しながら行います。
組み込みシステムではPCプログラミングと違って表示モニターがないため、いわゆるWindows等OS向けのprintf文によるデバッグができません。とはいっても、なんとかして演算結果を収めた変数の中身を確認したいことがあります。
これを実現するには総合開発環境付属のデバッガを使用する場合もありますが、組み込みでよく使用される割り込み処理では使いにくいか使えないなど制約があるのが難点です。
このデバッガは通常プログラムのフローや変数内容の確認するときには有用です。ツールは書き込みのときに使用していたものと同じです。
シリアルモニター
そこで筆者がデバッグ時にもっとも頼る方法はシリアルモニターと呼ばれるものです。これはUSARTシリアル通信が使用できるマイコンであれば簡単に実現できます。
シリアルモニター用にペリフェラルUARTを準備して、プログラム内でチェックしたい数値や文字などの情報をシリアル通信でPCへ出力して表示させるものです。この方法を使用するためにシリアル通信の使い方については慣れておく必要はありますが、結構重宝します。
ハードウェアで準備するのはマイコンとPCとをつなぐUART-USB変換ケーブルだけです。ケーブルUART側をマイコンに直結するので3.3V仕様のものです。PC側では汎用ターミナルソフトを準備しておき、シリアル通信でマイコンから送信した文字を表示させます。
その他、まとめ
他に、プログラムが正常に想定通りに進行しているかどうかを調べるために、ある条件分岐直後に何らかの出力(例えばLEDを点灯させるなど)を挿入して確認することも有効な手段です。
プログラムは絶対に記述したとおりにしか動作しないのですが、いろいろな条件の付け方が甘かったり、標準関数の使い方そのものの解釈が不十分であったりすることで想定通りに動作しないことも多々あります。
デバッグに行き詰まることもあるとは思いますが、原因は必ずあることを信じて妥協しないでください。
現在はインターネットで取得できない情報はないのですが、他人の情報を理解しないままに採用してはいけません。情報はあくまでヒントとして利用し、必ず自分で理解して改良して使用するくらいになってください。
ブラックボックスのままで残しておくと、後々思わぬ落とし穴にはまらないとも限りません。常に自分の頭で考える習慣を見に付けていくといろいろ知恵もチカラもついてきます。スキルアップとはそういうことです。