EWARMを いたCortex-M デバッグテクニック

EWARMを⽤いたCortex-M
デバッグテクニック
April 2015
IAR Systems K.K.
FAE Team
本ドキュメントについて
⽬的
 Cortex-Mシリーズには優れたデバッグ機能が搭載されている。各機能を理
解し、ARM⽤統合開発環境、ARM⽤IAR Embedded Workbench
(EWARM)を⽤いて、効率的なデバッグテクニックを習得する。
内容
 ARM Cortex-MのCoreSight
 Cortex-Mの基本的なデバッグ機能
 Cortex-M3/4、M7のSWOトレース機能
 Cortex-M3/4、M7のETMトレース機能
※コネクタ詳細は、「STM32デバッグのためのICE・コネクタガイド」を参照
※本ドキュメントは、2015年4⽉現在のIARシステムズWebサイト、ST社Webサイト、
およびEWARMバージョン7.40.2を元に作成しています。
2
IAR SYSTEMS— A LEADING GLOBAL VENDOR
168 Employees with HQ in Uppsala, Sweden
Listed in Stockholm/Nasdaq
R&D investment 32% of revenue
32 years in the industry
24 hour technical support in
13 languages
Uppsala
Munich
Sao Paulo
Tokyo
Seoul
Shanghai
London
Paris
San Francisco
Dallas
Boston
Los Angeles
+Distributor representation in
43 countries
Stability and growth
Licenses
# (000’s)
2010 - 2013
Operating
Margin %
20
20
15
15
10
10
5
5
0
0
2010
2011
License #
2012
2013
Operating Margin
ARM Cortex-MのCoreSight
Cortex-MのCoreSightテクノロジ
Cortex-Mマイコンには、様々なデバッグ機能とインタフェースが搭載
FPB
DWT
6 breakpoints
4 watchpoints
PC sampler
ETM trigger
ITM
DAP
live
core access
software trace
32 channels
JTAG
time stamping
SWD/SWO
interrupt trace
CPU statistics
ETM
trace port
instruction trace
5
Cortex-MのCoreSightテクノロジ
Cortex-Mのデバッグピンは、デバッグ制御⽤とトレース⽤がある
名称
デバッグ
制御
接続
基本機能
JTAG
TMS
TCK
TDO
TDI
nRESET
SWDIO
SWDCLK
SWO
nRESET
I-jet
I-jet Trace
ST-LINK
○
SWDIO
SWDCLK
SWO
nRESET
I-jet
I-jet Trace
ST-LINK
○
SWD
TMS
TCK
TDO
TDI
nRESET
名称
トレース
機能
ICE
SWV
ETM
接続
TMS
TCK
TDO
TDI
nRESET
CLK
D0
D1
D2
D3
ICE
SWDIO
SWDCLK
SWO
nRESET
1,2,4本
から選択
特徴
・ディジーチェーン可能
・(低速)printfデバッグ
・必要PIN数:最⼩(2本)
・(低速)printfデバッグ
・SWVトレースが可能
Cortex-MではSWDが主流
サンプリング
I-jet Trace
分岐トレース
(実⾏)
M0,M3/4,M7
特徴
⽅式
I-jet
I-jet Trace
ST-LINK
M0,M3/4,M7
・パソコンにリアルタイム転送
・(⾼速)prinfデバッグ
・ピン数:1
・データ⽋落可能性→⼤
・様々なデータ出⼒
M3/4,M7
・ICEのメモリに保存→ブレーク時にパ
ソコンに転送
・対応しているかはCPU依存
M3/4,M7
・データ⽋落可能性→⼩
※データ線の本数に依存する
(注意点)実装により機能が外されることがあります。
6
JTAG/SWD接続で実現する基本デバッグ
JTAG/SWD接続で実現する基本デバッグ
CoreSightテクノロジを活⽤し、様々なデバッグが実現可能
• 実⾏制御
• 停⽌
• 実⾏
• ステップ実⾏
• ブレークポイント
• コードブレークポイント
• データブレークポイント
• ベクタキャッチ
接続⽅式はソフト的に
切り替え可能
• 表⽰
• 変数
• メモリ
• レジスタ
8
基本デバッグ:実⾏制御
デバッグ画⾯のアイコンあるいは、メニュー、ショートカットで制御
デバッグの終了
実⾏
カーソルまで実⾏
次のステートメント
ステップアウト
ステップイン
ステップオーバ
ブレーク
リセット
9
基本デバッグ:ブレークポイント
ブレークポイントはコアにより、対応する数が異なる。
Flashメモリに対しコー
ドブレークを設定
RAMメモリに対し
コードブレークを設定
静的変数のアドレスア
クセスに対し、ブレー
クを設定
ハードウェア
ブレークポイント
ソフトウェア
ブレークポイント
データ
ブレーク
Cortex-M0/M0+
2
∞
2
Cortex-M3/M4
6
∞
4
Cortex-M7
8
∞
4
クリックで設置
もう⼀度クリックで解除
10
基本デバッグ:ブレークポイント
データブレークポイントで、データ異常を検知
静的変数を右クリックし、データブレークポイントを
設定。
変数へのアクセスでブレーク
表⽰>ブレークポイントで
右クリック>編集
リード、ライトアクセス指定可能
11
基本デバッグ:ブレークポイント
ICEによっては、ベクタテーブルにブレークポイントを設置できる
リセットイベント発⽣
12
基本デバッグ:表⽰機能
基本的な変数ウォッチ以外にも多くの表⽰機能を使⽤可能
ウィンドウ
更新タイミング
観測対象
の選択
観測可能なもの
オート
C-SPY停⽌時
⾃動
実⾏近くの⽂や式にある変数や式
ローカル
C-SPY停⽌時
⾃動
現在の関数のローカル変数および引数
静的
C-SPY停⽌時
⾃動
静的変数 ただし、volatile変数は除く
ウォッチ
C-SPY停⽌時
⼈⼿
C-SPY式や変数値をモニタ可能。配列/構造体/共⽤体は展
開可能。
シンボル
C-SPY停⽌時
⾃動
静的な位置情報を持つ変数、関数などすべて表⽰
メモリ
C-SPY停⽌時or
今すぐ更新orラ
イブ更新
⾃動
メモリ上の値
スタック
C-SPY停⽌時
⾃動
スタック
レジスタ
C-SPY停⽌時
⾃動
CPUレジスタ/周辺レジスタ
クイック
再評価ボタンor
式の⼊⼒
⼈⼿
C-SPYマクロ、関数、C-SPY式や変数や式などを評価可能。
ライブ
実⾏時(サンプ
リング*1)
⼈⼿
特定のアドレスに配置された変数(ローカル変数のように
スタック上の変数は観測不可)
13
基本デバッグ:表⽰機能
ライブウォッチやメモリは、実⾏を停めずに更新可能
変数値を実⾏しながら
観測可能
メモリ画⾯でも
ライブ機能が利⽤可能
ツール>オプション
デバッガ から更新間隔を設定
※デフォルト 1000m秒
14
基本デバッグ:表⽰機能
レジスタからサイクルカウンタの確認可能
→ニ点間処理速度計測
表⽰>レジスタ>CPUレジスタ
CYCLECOUNTER
64bitの起動からのサイクル数
※書き込み可能
CCTIMER1 / CCTIMER2
CYCLECOUNTERのソフト拡張
任意に書き込み可能
2,742,812,247 + 126 = 2,742,812,373
前回CYCLECOUNTER
CCSTEP
CCSTEP
前回表⽰(ブレーク)時からの
経過サイクル数。
現在CYCLECOUNTER
15
Cortex-M3/4、M7のSWOトレース機能
SWD+SWOを使⽤して、トレース実現
SWD経由で機能を有効にすることで、SWOから様々なデータを取得可能
※M3/M4,M7のみ対応
• SWOトレース
• 割込みログ
• データログ
• イベントログ
• ⾼速printf
JTAG接続では、SWOピンを他の⽤途で使
⽤するため、SWOは使えない
17
SWOトレース
定期的にプログラムカウンタを取得し、簡易トレース実現
[ICE] > SWOトレース
サイクルカウンタ
実⾏命令
実⾏アドレス
数百から数千サイクルに⼀度プログラムカウンタを取得
※CPUオーバヘッドなし
18
割込みログ
各種割込みの、開始、終了を⾃動的にログ収集
[ICE] > 割込みログ
発⽣時間
割込み名
In / Out
終了するまでの
処理時間
※CPUオーバヘッドなし
19
データログ
指定した静的変数(M3/M4は最⼤4つ)へのアクセスログを⽣成
[ICE] > データログ
発⽣時間
実⾏アドレス
データの値
変数のアドレス
表⽰ > ブレークポイントから
右クリック>編集 で設定可能
※CPUオーバヘッドなし
20
イベントログ (1/2)
専⽤コードを記述することで、コードの実⾏履歴を取得可能
arm_itm.hをインクルード
⼀つ⽬の引数:チャンネル(1-4)
⼆つ⽬の引数:任意の値(変数も可)
20-40サイクル程度のCPUオーバヘッド
21
イベントログ (2/2)
専⽤コードを記述することで、コードの実⾏履歴を取得可能
発⽣時間
実⾏アドレス
チャンネル1の
データの値
データの値
チャンネル2の
データの値
22
⾼速printf (1/2)
SWOのITMポート0を使って、printf出⼒可能
stdio.hをinclude
インタフェースは
SWD固定になる
stdoutをSWO経由
に指定
※printf⾃体のオーバヘッドは⼤きい
23
⾼速printf (2/2)
SWOのITMポート0を使って、printf出⼒可能
表⽰>ターミナルI/Oを開いて実⾏
stdoutをセミホスティング経由に指
定するとJTAG/SWDでprintf出⼒
JTAGも選択可能
24
Cortex-M3/4のETMトレース機能
Cortex-M3/4のETMトレース機能
JTAG/SWDとは別に、専⽤TRACEポートから実⾏履歴データを取得
※取得データを元に解析・表⽰
• ETMトレース
ETMトレース設定
• 関数トレース
• 関数プロファイラ
• コードカバレッジ
MCUからの出⼒
26
Cortex-M3/4のETMトレース機能
ETMトレース対応ICE(I-jet Traceなど)の内蔵メモリに
トレースデータを蓄積し、デバッグ停⽌時にPCに転送
ICE内蔵メモリに
トレースデータを蓄積
トレース
データ
27
ETMトレース
実⾏の開始から停⽌までのトレースデータを取得
有効化
アドレス
命令
命令モード
(Thumb固定)
28
関数トレース
ETMトレースの結果を、関数In/Outで解析表⽰
有効化
関数の開始
アドレス
関数の実⾏
命令モード
(Thumb固定)
29
関数プロファイラ
関数ごとの呼び出し回数および、コードの実⾏時間を表⽰
有効化
関数名
関数⾃体の
実⾏時間
関数の呼び出
し回数
関数から呼ぶ内部関数
も含めた実⾏時間
全トレース
データ内の割合
全トレース
データ内の割合
30
コードカバレッジ
アプリケーション内の各関数のコード実⾏率を表⽰
有効化
クリックで展開
緑:100%実⾏
⾚:0%実⾏
31
まとめ
まとめ

Cortex-Mベースのデバイスには、強⼒なデバッグモ
ジュールが搭載されている。
 CPU停⽌時の表⽰系には、解析につながる様々なウィン
ドウが⽤意されている。
 SWOトレースを応⽤することで、リアルタイム系の解析
が可能となる。
 クリティカルなトラブルや、統計にはETMトレースが有
効な解決⼿段となる。
33
本資料について
本資料取り扱い上の注意
本資料は2015年4⽉1⽇時点の情報を基に作成されており、将来変更の可能性
のあるものです。あわせてご紹介する設定や機能に関連して、動作保証をお約束す
るものではございませんので、ご了承ください
本資料で提供している情報は、ご利⽤されている⽅のご判断・責任においてご使⽤
ください。提供した情報に関連して、ご利⽤される⽅が不利益等を被る事態が⽣じ
たとしても、弊社及び執筆者は⼀切の責任を負いかねますので、ご了承ください。
本資料の内容に関する弊社または各社へのお問合せはご遠慮ください。
本資料及びデータの再配布・無断転⽤・転載等はご遠慮ください。
35
商標について
• IAR Systems, IAR Embedded Workbench, C-SPY, C-RUN, C-STAT,
visualSTATE, Focus on Your Code, IAR KickStart Kit, I-jet, I-scope, IAR, お
よび IAR Systems のロゴタイプはIAR Systems ABが所有する商標または登録
商標です。
• ARMおよびCortexは、ARM Limited(またはその⼦会社)のEUまたはその他の
国における登録商標です。CoreSightは、ARM Limited(またはその⼦会社)の
EUまたはその他の国における商標です。 All rights reserved.
• STM32は、STマイクロエレクトロニクスの登録商標です。
• その他、本資料中の製品名やサービス名は全てそれぞれの所有者に属する商標ま
たは登録商標です。
36