2016/09/15

[c/c++]私のC言語 (17) - printfデバッグ

もう、C言語と関係なくなってきたが、気にしないでおくれ。。。

組み込み開発で、新しい開発環境が提供されたとする。
マイコン自体初めてだったり、ARMだけどメーカーが初めてだったり、コンパイル環境が初めてだったりするのは珍しくないだろう。
ドキュメントを読みながら環境を作って、ビルドして、何だかわからないけどサンプルも動いた!

その次にどこからやっていこうか?となる。
マイコンのことを調べたり、OSが載っていたらそれを調べたりするのだけど、私はサンプルの動きを追うことが多い。
せっかく動いたのだから、もう少し見ておこうか、というわけだ。

このとき、ブレークポイントで止めながら調べるのもよいだろうけど、無線を使う場合だと止められなかったり、止めると意味が無くなったりするので、動かしながらトレースしたいと思う。
そうなると、高級なデバッガだとトレース機能がついているものもあるだろうが、手軽なのはデバッグ出力を追加することだと思う。

printfデバッグ、と呼ばれることもある、よくある方法だ。
ソースを変更することになるので、副作用が発生する場合もあるのだが、容易なのでしばしば使う。


printf、といっても、別にprintfじゃなくてもよい。
組み込み環境では標準出力がない場合も多いので、どこかに何かを出力する、くらいのイメージだ。

一番楽なのは、UARTだと思う。
UARTに文字列を取得して、電圧変換してパソコンのシリアルポートとつなげれば、TeraTermなどで出力を目で見ることができる。
sprintfなんかが使えるなら、変数の値を見るのも楽にできて、お手軽だ。

 

ただ、UARTは他の用途で使われて、空いていないこともある。
そうなったときにどうするか、というのが、あまり私は手段を持っていない。

I2CはSPIが同じシリアル系列でよいのだけど、それをどうやって見える形にするかが悩ましい。
UARTに変換するチップもあるから持っていればよいのだが、今は手持ちがない。
単発でよければロジアナで足をつかむという手もあるが、トレースしてみたいときだとちょっと足りない。
それに、最近は足がつかめないマイコンも多いので、そもそも出力できないということもあろう。

そういう点で、JTAGデバッガから直接出力できる場合はありがたい。
SEGGERのRTTみたいな機能だ。
Semi Hostingは同様の機能かと思っていたけど、今使ってるやつは出力先をUARTにしか割り振れないようなことが書かれていて、意味が無い。。

 

ともかく、何かしらトレースする手段を持っておくと、デバッグ効率が上がることもあるのでよいのではなかろうか。

0 件のコメント:

コメントを投稿

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。