LPC810でMTB(Micro Trace Buffer)を使う
.
「ドングリ」という名称で巷では大人気のNXP製LPC810は、8ピンDIPと小型パッケージながら、Cortex-M0+のデバッグ機能とMTBに対応しています。 FRDM-KL25Zと同様に、MDK-ARM Lite版でMTBを使用する手順をまとめてみました。
無理矢理mbedネタにするために、mbed-LinkとMDK-ARMを使ってみますが、ULINK-MEやツボLinkなどの他のデバッグアダプタでも設定方法はほぼ同じです。
MTBとは?
Cortex-Mシリーズのデバイスは、以下のトレースをサポートしています(但し、チップベンダーのコンフィグレーションに依存します)。
- 4-pin ETM Trace
- ETB (Embedded Trace Buffer)
- Serial Wire Trace
- MTB Trace
LPC810等のCortex-M0+デバイスで使用することの出来るMTB (Micro Trace Buffer)は、シンプルなインストラクショントレースです。
トレースデータ取得用のピンが必要ないので使い方としてはETBと似ていますが、最大の特徴はトレースデータ格納用のバッファとして専用メモリではなく、内蔵SRAMの領域の一部を使用することです。 設定可能なバッファサイズは、内蔵SRAM容量とプログラムで使用する領域から制限を受けますが、トレースが必要ない場合には全てプログラム側から使用できるので、ハードウェアのリソースを有効活用する事ができます。
MDK-ARMを使ってLPC800のMTBを設定する手順はこちらのアプリケーションノートに記載されています。
http://www.keil.com/appnotes/docs/apnt_237.asp
code_redのRed TraceでもMTBがサポートされている様ですが、私は使ったことないので設定方法などはよく分かりません(すみません)。
http://www.code-red-tech.com/news.php
MTBのProgrammers Modelに興味がある方は、この辺に情報があります(トレース制御レジスタの詳細等)。
http://infocenter.arm.com/help/topic/com.arm.doc.ddi0486b/CHDDCFBJ.html http://infocenter.arm.com/help/topic/com.arm.doc.ddi0486b/CHDFCIFD.html
事前準備
MDK-ARM Lite版のインストール方法は、こちらを参照して下さい。
http://mbed.org/users/MACRUM/notebook/uvision4_debug/
Warning
MDK-ARM Lite(無償評価版)は必ず、最新版 v4.70a を使用してください。古いバージョンでは、LPC800シリーズのデバイスデータベースが含まれていません。
デバイスの入手方法
マルツパーツ館WebShopで取り扱いが始まったそうです。
http://www.marutsu.co.jp/shohin_211674/
MDK-ARM uVison4 の設定
プロジェクトの作成
LPC810用のプロジェクト作成方法は、こちらを参照してください。これをベースにMTBの設定を追加します。
http://mbed.org/users/MACRUM/notebook/mbed-link/
MTB用に設定を追加する
LPC810のメモリマップは、以下のようになっています。
Information
Flash: 4kByte
0x00000000 - 0x00001000
RAM: 1kByte
0x10000000 - 0x10000400
MTB用に使用可能なRAMは、領域をそれほど大きくとれないので、ユーザープログラムで使用しているRAM領域を正しく把握する必要があります。
Project view内のアクティブターゲットをダブルクリックすると、作成されたターゲット用の MAP ファイルがオープンされます。 この MAP ファイル内の、 RW_IRAM1 実行リージョンの内容を確認します。
Execution Region RW_IRAM1 (Base: 0x10000000, Size: 0x00000200, Max: 0x00000400, ABSOLUTE) Base Addr Size Type Attr Idx E Section Name Object 0x10000000 0x00000200 Zero RW 1 STACK startup_lpc8xx.o
上の例では、アドレス 0x10000000 から 0x100001FF (0x200バイト分)までが使用されています。 プログラム内で使用するRWデータが増えると、この部分のサイズは大きくなるため、重ならないように少し余裕を考えて、MTBで使用するバッファは以下の領域に設定します(先頭アドレスはバッファサイズの整数倍にアラインメントされている必要があります)。
Information
RAM(MTB): 256Byte
0x10000300 - 0x10000400
Warning
有効なデータが存在するRWデータ領域とMTBのバッファ領域が重なると、ターゲット側で実行されるプログラムはほぼ間違いなく正しい動作になりませんので、ご注意ください。
MTBの設定は、Initialization file にデバッガコマンドを定義して使用します。
http://www.keil.com/support/man/docs/uv4/uv4_dg_debug.htm http://www.keil.com/support/man/docs/uv4/uv4_debug_functions.htm
Embedded Artists LPCXpresso LPC800 のサンプルに設定例があるので、これを利用します。以下のファイルを、プロジェクトファイルのディレクトリにコピーします。
{install}\ARM\Boards\Embedded Artists\LPCXpresso LPC800\Blinky_MTB\Dbg_MTB.ini
ターゲット設定の Debug タブで、この .ini ファイルを Initialization File に設定します。
Edit ボタンを押して編集します。テキストファイルなので、このまま編集しても良いのですが GUI が使えるので、ウィンドウ下の Configuration Wizard をクリックして、設定値を入力します。
この設定は、デバッグセッション起動時にデバッグ関数として実行されます。Ctrl+S でセーブするのを忘れずに。
トレースビューの表示
デバッグセッションを開始し、メニュー [View] - [Trace] - [Trace Data] でMTBトレース情報が表示されるのを確認します。
その他
コンパイル時にRAM領域と(実行時に使用する)MTB用のバッファ領域の重複チェックは基本的に出来ないのですが、設定でRAM領域の一部の定義を削除することによって、MTB用バッファの安全な範囲指定が可能になります(使用しないときは戻すのを忘れずに)。
なお、MTBに格納されたトレース情報は通常のメモリアクセスで読み込める値なので、MTB非対応のデバッガを使用している場合でもデバッガスクリプトなどの対応があれば適切な形式で表示できるかも知れません。トレースパケットの情報は、ここで公開されています。
http://infocenter.arm.com/help/topic/com.arm.doc.ddi0486b/CJHIJBAB.html
以上です。
Please log in to post comments.