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