トラ技別冊MARY基板のデバッグ
CPU内部にアクセスし、レジスタやメモリ(変数)の内容をチェックするためのデバッグ用ハードウェアインタフェースとしてJTAGがよく使われます。トラ技増刊MARY基板(超小型ARM基板)基板で採用しているLPC1114は、ARM社が提唱するSWD (Serial Wire Debug)と呼ばれるJTAGと同様のデバッグインタフェースを提供しています。
JTAGやSWDを使ってデバッグを行うためには、ターゲット基板と開発環境(PCなど)の間に入って両者のインタフェースを取るJTAGデバッガが必要となるのですが、1万円前後の代物となるためこれまでは手が手が出ませんでした。そこでLPCXpressoの登場です。こいつのLPC Link部分を使えば、JTAG/SWD用のデバッガが3千円弱で購入できるということなので、これはもう試してみるしかありません。ということで今回は、MARY基板ををLPCXpressoを使ってデバッグする方法のお試し結果を記載します。
MARY基板とLPCXpressoの接続
基板が入っている増刊号のP27に示すとおり、LPCXpressoのLPC Link部分とMARY基板を接続します。LPC Link部分とターゲット基板の間に半田ジャンパが乗っているので、半田を取り除いてピンヘッダを取り付け、写真のようにMARY基板に接続します。
このやり方は、CuBeatSystemsさんの「LPCXpressoを切り離さないで賢く使う方法」を拝借させていただきました。LPCXpressoのターゲット基板 (LPC1769など)を使いたくなった場合はピンヘッダにジャンパピンを挿入すればよいという優れもののアイデアです。
デバッグの開始
IDEのQuickstart viewにあるDebugボタンを押すとプログラムをターゲットにダウンロードしデバッグが始まります。ブレークポイントをあらかじめ指定しない場合、main()関数の最初の行でブレーク(一時停止)します。あらかじめブレークポイントを設定しておけば、以下の画面キャプチャーに示すように、main関数の前にシステム初期化のために実行するsystem_LPC11xx.c内でもプログラムをブレークすることができます。
画面のコードはシステムクロックを設定する箇所で、まだI/Oが動いてない段階のため、printfデバッグでは手が出ない部分です。このようなコードが正しく動作するかを確認するためには、JTAG/SWDを使ったデバッグ環境が必須となります。
418行や423行目のような、ループをまわしている行をステップオーバー(行単位に実行)すると固まってしまうことがあるのですが、チェックを行いたい箇所ブレークポイントを仕掛けて必要な箇所でプログラムを一時停止するようにすれば途中で固まるようなことはありませんでした。
初期化コードを抜けると以下のキャプチャー画面のようにmain関数の実行が始まりますが、ここでも任意の箇所でブレークが可能です。
おわりに
このように安価な環境で、ソースレベルのブレーク・トレースや変数・レジスタ値のワッチなど強力なデバッグ機能が使えます。LPCXpresso 1769はmbedとI/Oピン収容の互換性があるため、DMAなどmbedライブラリがサポートしていないI/Oをたたくプログラムを開発する際は、LPCXpresso + SWDデバッグで動くコードを作ってからmbedに持っていくと効率がよさそうです。
« LPCXpresso LPC1769でCoreMarkを動かす | トップページ | LPCXpressoでCMSIS Peripheral Libraryを使う »
「NXP-ARM」カテゴリの記事
- LPCXpresso IDEでのC++コードサイズ肥大化の対策(2011.10.15)
- XBee APIモードライブラリのLPCXpressoへの移植(2011.10.09)
- LPCXpresso LPC1769でFree RTOSを使う(2011.07.27)
- LPCXpresso LPC1769でFatFsを動かす–USB Host編(2011.07.19)
- LPCXpresso LPC1769でFatFsを動かす - DMA編(2011.05.14)
この記事へのコメントは終了しました。
コメント