μVision4でデバッグ!

mbedでCMSIS-DAPに対応したファームウェアのリリースが始まりました。

実際に使ってみたので、簡単に操作手順をまとめてみました。 デバッガは、CMSIS-DAP対応済みの Keil MDK-ARM v4.54 μVision4 を使用しました。

1. CMSIS-DAPって?

CMSIS-DAPは、標準化されたデバッグユニット用のオープンな規格で、ターゲットのデバッグポートとホストのUSBを介して、実行制御やメモリのリードライトなどのデバッグ処理を行うものです。

詳細はこちら:

http://www.keil.com/support/man/docs/dapdebug/dapdebug_introduction.htm

要は、ホスト側で動作するデバッガからの制御が標準化されるので、デバッガベンダの開発が楽になる仕組みです(個々のデバッグユニットに個別対応しなくてよい)。

私は、CMSIS-DAPが直接エンドユーザ(この場合はターゲット用のソフトウェア開発者)に対して大きな利点になるとは思っていなかったのですが、mbedのファームウェアがこの仕様に対応した事で、かなり驚かされました。

簡単に言うと、mbed interface(mbed基板の裏に実装されているあの地味なやつ)がデバッグユニット(例えば、LPCXpressoのLPC-Link, ULINK2, J-Link)の代わりにデバッグ制御を行ってくれます。こちらにも技術解説があります。

https://mbed.org/handbook/CMSIS-DAP

坪井さん(@ytsuboi)が翻訳してくれたページは、こちら。

https://mbed.org/users/ytsuboi/notebook/ja-cmsis-dap/

追加ハードウェアは一切必要ないし、デバッガも無償の評価版が使えます。

2. ファームウェアのアップデート

以下のサイトから、CMSIS-DAPに対応したファームウェアを入手します。

http://mbed.org/handbook/CMSIS-DAP-MDK

ファームウェアのアップデート方法は通常と同じなので、ここでは説明しません。詳細は以下を参照してください。

http://mbed.org/handbook/Firmware

あと、ここにある最新のシリアルドライバをインストールしないと、CMSIS-DAPが見えませんのでご注意ください。

http://mbed.org/media/downloads/drivers/mbedWinSerial_16466.exe

CMSIS-DAP-MDKのページでは、一度デバイスマネージャから "mbed composite" を削除しろと記載してありますが、私の環境では削除しなくても問題なくインストールできました。

3. Keil MDK-ARM の入手とインストール

以下のリンクから、無償評価版をダウンロード可能です。

https://www.keil.com/demo/eval/arm.htm

評価版(Lite edition)は、作成できるオブジェクトサイズが32kバイトに制限されています。

評価版の制限事項は、以下に記載されています。試用期間の制限なども特にありません。

http://www.keil.com/demo/limits.asp

ダウンロードした mdk454.exe をダブルクリックしてインストールします。

4. テスト用プロジェクトの作成とエクスポート

mbedのオンライン環境で、テスト用のプロジェクトファイルを作成します。もちろん既存プロジェクトでも問題ありません。

/media/uploads/MACRUM/1_new.png

Program Workspace で該当するプロジェクトアイコンを右クリックして、"Export Program ..." を選択します。

/media/uploads/MACRUM/2_export.png

Export Program ダイアログが表示されるので、以下のように設定します(デフォルト設定)。

Export To     : Keil uVision4
Export Target : mbed NXP LPC1768

/media/uploads/MACRUM/3_exporting.png

Export Program ボタンを押すと、ブラウザによってzipファイルがダウンロードされます。zipファイルは、作業用に適当なディレクトリに展開しましょう。

5. Keil uVision4 によるプロジェクトのインポート

インポートと言っても特に難しいことはありません。拡張子「.uvproj」が uVision4 のプロジェクトファイルなので、ダブルクリックします。

uVision4 IDE が起動され、オンライン環境で作成したプロジェクトファイルが、オフライン環境で使用できるようになりました。

/media/uploads/MACRUM/4_import.png

6. プロジェクトの設定とビルド

このままプロジェクトをビルドしても良いのですが、mbed デバイスが接続されているUSBドライブに直接バイナリを書き込めると便利なので、その設定を行います。

[Project] -> [Options for Target ...] で設定ダイアログを開きます。 User タブの Run #1 フィールドに以下にあるテキストを以下のように修正します。

【変更前】
fromelf --bin -o build\test_LPC1768.bin build\test.axf

【変更後】
fromelf --bin -o e:\test_LPC1768.bin build\test.axf

/media/uploads/MACRUM/5_fromelf.png

これによって、オフラインツールで生成されたバイナリが USB ドライブにマップされているmbedに直接書き込まれます(ドライブ名は、ご使用の環境に応じて変更してください)。

因みに、fromelf は、リンカによって生成された ELF ファイルの情報を表示したり、様々なフォーマットに変換したりするユーティリティです。上記コマンドは、bin オプションで plain binary に変換しています。

リビルドを選択し、エラーがなければ成功です。

Rebuild target 'mbed NXP LPC1768'
compiling main.cpp...
linking...
Program Size: Code=3400 RO-data=324 RW-data=36 ZI-data=40  
User command #1: fromelf --bin -o e:\test_LPC1768.bin build\test.axf
".\build\test.axf" - 0 Error(s), 0 Warning(s).

mbed のリセットボタンを押して、プログラムが正常に書き込まれて動作しているのを確認します。

実はここまでの操作手順は、mbed のファームウェアをアップデートしていなくても可能ですので、オフラインコンパイラに興味がある方は是非お試しください。

7. デバッグ!

念のため、デバッグ接続の設定を確認します。 [Options for Target ...] の debug タブの Use (ダイアログの右上)ラジオボタンが選択され、接続先が "CMSIS-DAP Debugger" になっている事を確認します。

/media/uploads/MACRUM/6_dap.png

さて、いよいよデバッグですが、"Start/Stop debug session" ボタンを押すだけです。

評価版の場合は、ここでダイアログが表示されます。

/media/uploads/MACRUM/7_eval.png

バイナリが mbed にダウンロードされ(Flashメモリへの書き込み)、実にあっけなくデバッグセッションが開始されます。

/media/uploads/MACRUM/8_debug.png

ブレークポイントの設定や、レジスタ、メモリ、変数の参照や変更が可能です。 追加ハードウェアなしで、ここまでのデバッグ環境が用意されているのは、なかなかお得ではないでしょうか。

8. シミュレーション環境

「でも、未だ CMSIS-DAP 対応のファームウェア持ってない」という方向けには、シミュレータの使用がお勧めです。

[Options for Target ...] の debug タブ左上の "Use Simulator" ラジオボタンでデバッグターゲットがソフトウェアシミュレータになります。実ハードウェアを使用しないシミュレータなので、ハードウェアに依存した部分のデバッグは制限されますが、デバッガの機能を試すには十分だと思います。

/media/uploads/MACRUM/9_sim.png

以上です。


3 comments on μVision4でデバッグ!:

15 Dec 2012

Mooと申します。 普段はSHとPalmiceを使ってますが、仕事でmbedを使う必要に迫られ、今更printfでデバッグしたくないので、大変助かりました。

とても分かりやすく要点を説明して頂き、ほんの1時間ほどで環境を構築することが出来ました。 どうも有り難うございました。

15 Dec 2012

Mooさん。

コメントありがとうございます! 環境構築のお役に立てたようで、嬉しいです。

やっぱり、ソースコードレベルのデバッグが出来ないと苦しいですよね(特にお仕事だと)。 デバッグアダプタ無しのデバッグは非常にお手軽だし、お財布にも優しいので、mbedの ユーザーが増えるのではないかと期待しています。

16 Dec 2012

 どもども。  おかげさまでした。  Wataraiさまの記事がなかったら、printfとLEDでブツブツウンウン言いながらやってることと思います。  実はブレッドボードとSHボードを組み合わせ、HEWで開発、PalmIceでデバッグして動いたのをmbedに移して動作実験とかやってました。  「なんで今更こんなことをせにゃならんねん!ぶ~ぶ~ぶ~!」と(笑)

 それがuVersion4を使えばICEライクにデバッグ出来るし、日本語でコメントを入れられるし、タブも綺麗に揃うし、これなら「人間の世界」です(;

 初めてmbedを使ったんですが、main()に来るまでのことをなにも考えなくて良いって、かなり楽チンですね。  CPUのクロック設定、メモリのアクセス設定、ポートの入出力方向の設定や、周辺デバイスの初期化も不要。  それでICEライクなデバッグ環境・・・もしかしたらクセになってしまうかもです。

>mbedの ユーザーが増えるのではないかと期待しています。  本当にそうですね。  Arduinoよりハイパワー、AVRより簡単、ルネサス系よりチョー簡単。  使い途がかなり有ると思います。  今回の仕事では、LPC1768一台ではI/Oが足りなくて二台使ってますが、もう少しピン数の多いボードが出てきてくれれば有り難いかも・・・でもI2Cが有るから複数台の連結もOKな感じだし。

 「mbedを仕事に使える」と言う実感が湧きました。  本当におかげさまです。  またよろしくお願いいたします。

Please log in to post comments.