printfデバッグに使うシリアルポート
printfデバッグをおこなうためにはマイコンボードの情報をPCに出力する仕組みが必要となります。
マイコンカーラリーに使うボードにはプログラム書き込みのためのシリアルコネクタがあり、そのシリアル経由で通信することが出来ます。
ボード上のprintfサポートライブラリ
PC上で走るアプリケーションの場合何も考えなくてもprintfの結果は画面に表示されますがボードで走るプログラムの場合はprintfの結果をシリアルポートから出力する機能をライブラリがサポートしていることが必要です。
マイコンカーラリーのライブラリにprintf_lib.cが用意されていてこの中に書き込みコネクタのUART0からデータを出力する機能がサポートされています。
通信速度について
printfデバッグで情報を取り出すときにまず考えておかなければならないのはシリアル送信に要する時間です。
シリアル通信ではスタートビット+8ビットデータ+ストップビットの10ビットでアルファベット一文字(1バイト)が送信できます。
例えば通信速度が9600bpsでは1秒に 最大(9600/10)=960文字送ることが出来ます。
マイコンカーラリーのプログラムは1ms毎の制御をしていますが1msに一文字も送ることが出来ないので9600bpsでは1ms毎の割り込みには対応できません。
マイコンカーラリーで使うR8C/38Aに設定できる最大通信速度は1250000bpsで、この場合1秒間に1250000/10=125000文字、1msあたり125文字の送信が可能です。
例えばデータとして次のように10個の16ビットデータを16進数で送る例では
1A80,334B,F7C3,78EF,224A,68C1,FF00,DE0A,1322,98B3[cr]
50文字の送信となり送信に必要な時間は1ms/125*50=0.4msで、プログラムループで送信待ちを行うと0.4msの間プログラムの処理時間を占有されてしまいます。
マイコンカーラリー用のライブラリでは送信割り込みを使った通信がサポートされていて、通信処理のプログラム占有時間を大幅に削減できるのでこれを使うことにします。
PC用のターミナルソフト
PC用ターミナルソフトとしては定番のTeraTermという良くできたソフトがあるのですが、私はDelphiで開発したJTW32という自作のソフトを使っています。
もとはH8シリーズのプログラム書き込みツールとして作ったものですが今ではデバッグ用ターミナルとして機能拡張して使っています。
(ここからJTW32がダウンロード出来ます)※インストーラはありません、任意のフォルダに解凍して実行するだけで使えます。
第一の理由は1.25Mbps,3Mbpsという通信速度をサポートしているターミナルソフトが無いことです。
最近のPCでは無くなったRS232Cポートは物理的にサポートされている最大速度が115200bps程度でしたが、USBシリアルコンバータを使う場合はFTDIのICを使ったもので最大3Mbpsの通信をおこなうことが出来ます。
第二の理由は例えばカンマ区切りデータをグラフ表示して簡易オシロスコープ的な使い方をするなど自分が欲しいと思う機能を追加して作業能率を上げることが出来るからです。
そのかわり機能がごちゃごちゃし過ぎて取っつきの悪いソフトになっていることは否めません。
サポートしている通信速度
カンマ区切りデータのグラフ化