前回(LPCXpressoでセミホスティング - 滴了庵日録)はセミホスティングによるprintfデバッグについて説明した。しかしセミホスティングは速度がものすごく遅く、またデバッガを接続していないときにはprintf関数でスタックしてしまうという問題があった。そこで今回はセミホスティングより高速なITM printfについて説明する。
ITM printfとは?
ITM printfは、SWDのトレース機能を利用してprintf関数の出力をSWO端子からデバッガに送る。セミホスティングよりも桁違いに高速であり、またデバッガを接続していないときにもスタックが発生しない。
いっぽうで、セミホスティングはSWCLKとSWDIOの接続のみで利用できるが、ITM printfはSWOの接続が必要となる。また、ITM printfはCortex-M3以上で利用できるが、Cortex-M0/M0+は対応していない。
LPC XpressoでITM printfの設定
(1) 標準入出力をUARTへリダイレクトしない
ボードライブラリのプロジェクトのboard.c内の #include "retarget.h" をコメントアウトする。
#include <string.h> #include "board.h" // #include "retarget.h"
(2) 標準入出力をITMへリダイレクトする
アプリケーションのプロジェクトに下記のretarget_itm.cを追加する。
このソースファイルはNXPのサポートサイトで公開されていたものだが、同社のサイトはしばしばリンク切れになるので、ここに退避した。ライセンス的に再配布はOKのはず。