mbed-KL25Z で MTB (Micro Trace Buffer) を使う

Freescale 製の FRDM-KL25Z が新しいmbedとして使用できるようになりました。Cortex-M0+としては、初めての mbed ファミリーになります。 CMSIS-DAPの対応も行われているので、オフラインコンパイラとデバッガを使用してみました。

事前準備

FRDM-KL25Z 用のファームウェアの更新手順等は Tedd OKANO さんの notebook を参照しましょう(とても分かりやすく記載されています)。
http://mbed.org/users/okano/notebook/mbed-kl25z/

他の mbed と同様に、簡単な手順でオフラインのデバッグ環境を用意することが出来ます。基本的には、以前にまとめた手順と同じです。
http://mbed.org/users/MACRUM/notebook/uvision4_debug/

Warning

MDK-ARM Lite(無償評価版)は必ず、v4.70a 以降のバージョンを使用してください。v4.60 同梱のサンプルでは、MTBの設定に一部不具合があり、正常に動作しません。

オフライン環境でビルド&デバッグ

ターゲットを Freescale KL25Z に設定し、念のためビルドして動作を確認する。
/media/uploads/MACRUM/target_select.png

Keil uVision4 用にプロジェクトをエクスポートする。
/media/uploads/MACRUM/export.png

ダウンロードした ZIP ファイルを展開して、プロジェクトファイルをダブルクリックして uVision4 を起動します。

MTB用に設定を変更する

メモリマップ

KL25Zのメモリマップは、以下のようになっています。

Information

Flash: 128kB
0x00000000 - 0x0001FFFF

RAM: 16kB
0x1FFFF000 - 0x20002FFF

RAM領域が少し変わったマッピングになっています。

mbedのプロジェクトを EXPORTして生成された scatterファイルの RAM領域のマッピングを見てみると・・・

  ; 8_byte_aligned(48 vect * 4 bytes) =  8_byte_aligned(0xC0) = 0xC0
  ; 0x4000 - 0xC0 = 0x3F40
  RW_IRAM1 0x1FFFF0C0 0x3F40 {
   .ANY (+RW +ZI)
  }

となっており、先頭の 0xC0 バイト分は割り当て不可になっています。 Cortex-M0+は、M3等と同様にベクタテーブルのオフセットを設定することが出来るので、Ticker 等の割り込み処理を行うライブラリを使用した場合には、ここにベクタテーブルをリマップしています。

MTB は、内蔵 RAM領域にトレース用のバッファをマッピングして使用します。先頭アドレスはバッファサイズの整数倍にアラインメントされている必要があります。

mbed用に生成されたバイナリのベクタテーブルをデバッガで読むと、mbed KL25Zのスタックポインタ初期値は scatterファイル内の RW_IRAM1リージョンの設定領域に関係なく 0x20003000(RAMの最後)固定に設定されているようです。

という事で、以上の条件を考慮して MTB を使用する場合のコンフィグレーションを考えてみました。

RAM: 16kB
  0x1FFFF000 - 0x1FFFF0BF ; ベクタ領域
  0x1FFFF0C0 - 0x20000FFF ; ユーザが使用するDATA領域
  0x20001000 - 0x20001FFF ; MTB用バッファ領域 (4kB)
  0x20002000 - 0x20002FFF ; スタック領域

スタック領域はもう少し小さくても良いような気がしますが、MTB用のバッファ領域のアラインメントもあるので、とりあえずこんな感じで。

以下のように scatter ファイルの RW_IRAM1 リージョンを変更します。

  RW_IRAM1 0x1FFFF0C0 0x1F40 {
   .ANY (+RW +ZI)
  }

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

Freescale FRDM-KL25Z のサンプルに設定例があるので、これを利用します。以下のファイルを、プロジェクトファイルのディレクトリにコピーします。

{install}\ARM\Boards\Freescale\FRDM-KL25Z\Blinky_MTB\DBG_MTB.ini

ターゲット設定の Debug タブで、この .ini ファイルを Initialization File に設定します。 /media/uploads/MACRUM/mtb_config.png

Edit ボタンを押して編集します。テキストファイルなので、このまま編集しても良いのですが uVision4 IDEからGUI が使えるので、ウィンドウ下の Configuration Wizard をクリックして、設定値を入力します。

/media/uploads/MACRUM/mtb_config_1.png

この設定は、デバッグセッション起動時にデバッグ関数として実行されます。Ctrl+S でセーブするのを忘れずに!

トレースビューの表示

デバッグセッションを開始し、メニュー [View] - [Trace] - [Trace Data] でMTBトレース情報が表示されるのを確認します。 /media/uploads/MACRUM/mtb_view.png

以上です。


Please log in to post comments.