[NXP マイコン初心者ガイド 5] へ | |||
NXP マイコン初心者ガイド まとめサイト |
もくじ
- はじめに
- 1. Break Points と Watch Points
- 2. Core Registers
- 3. Peripherals
- 4. Heap and Stack View
- 5. Faults View
- まとめ
はじめに
このコンテンツでは MCUXpresso IDE に付属されている Debug 機能を紹介します。MCUXpresso IDE でどのような Debug 機能があるのか事前に把握しておくことは効率的に開発を進める手助けになると思いますので、是非一読ください。
User Guide も併せてご参照ください。(このコンテンツには記載していない "Memory view"、"Disassembly view"、"Live Global Variable Plotting" なども User Guide に記載されています)
-
参考:MCUXpresso IDE User Guide > Debugging a Project
-
注記:このコンテンツでは Linker Serever を使用した場合の Debug 画面を使用しており、PEmicro や SEGGER J-Link を使用している場合は仕様が異なることがございます。その際は User Guide の解説をご覧ください。
ポイント:開発画面と Debug 画面の切り替えは、MCUXpresso IDE の 右上にある【図1】のボタンを押すことで可能です。開発画面のことを Develop perspective、Debug 画面のことを Debug perspectiveと呼んでいます。
【図1】開発画面と Debug 画面の切り替えボタン
1. Breakpoints と Watchpoints
Breakpoints は一番利用される Debug 手法です。ソースコードの行番号にトリガーを設定してその行の処理が実行される前に MCU を Break させることができます。
一方 Watchpoints は馴染みのない方もいらっしゃるかと思いますが、別名 Data Breakpoints と呼ばれています。グローバル変数や Memory 領域への Data の Read/Write をトリガーにすることができ、Memory 領域へのアクセスを監視することができます。条件の設定方法を工夫することで不正アクセスが発生していないか Debug することも可能になります。
【表1】に Breakpoints と Watchpoints の違いについて記載します。
項目 | Breakpoints | Watchpoints (別名 Data Breakpoints) |
監視 Point | ソースコードやアセンブラーの行 | グローバル変数、Peripheral へのアクセス、使用されているスタックの深さ |
設定数*1 |
Hardware:ARM Core の種類に依存 Software:実質的には無限 |
MCU ファミリーによって異なる |
設定方法 | Source View の左側の列をダブルクリック | Outline View で設定したい変数などを右クリックして Toggle Watchpoint をクリック |
トリガー 条件 |
ソースコードの指定した行が実行された時 | Watchepoints の設定で条件を指定し、その条件がそろった時 |
*1:Hardware Breakpoints と Watchpoints の設定できる数は Arm Core の種類によって異なります。
Cortex-M0/M0+ (LPC) - 4 breakpoints, 2 watchpoints
Cortex-M0/M0+ (Kinetis) - 2 breakpoints, 1 watchpoints
Cortex-M3/M4/M7 - 6 breakpoints, 4 watchpoints
設定数を超えた場合、Linker Serever では下記のようなエラー文を出力します。
15: Target error from Set break/watch
Unable to set an execution break - no resource available.
-
参考:MCUXpresso IDE User Guide > Breakpoints
設定方法を【図2】【図3】で補足します。
Breakpoints は Source View で左列(行数列の左)をダブルクリックすると設定することができます。設定した Breakpoints は Breakpoints View で 追加/削除/有効化/無効化 などを管理することができます。
【図2】Breakpoints 設定方法
Watchpoints は 【図2】で示した Breakpoints View でも 追加/削除 が可能で、【図3】に示すように、Outline View で変数に対して直接設定することも可能です。
【図3】Watchpoints 設定方法 (グローバル変数に設定した例)
2. Core Registers
Arm Core には 16個の Registers (r0~r15) とその他 Status Registers があり、Debug を実行中に Debug perspective の中【図4】のように Registers View で表示されます。
特に、①、②を確認することで Arm Core の状態を把握することができますし、④の情報を確認すると CPU が起動してからどのくらい Clock を消費しているのか確認することができます。
-
注記:④の情報は Arm Core の種類によっては存在しない場合があります。
Cortex-M3、M4、M7 には実装されています。
- ①:r0 ~ r12 までは Arm Core の基本 Register を表示
- ②:sp(r13)、lr(r14)、pc(15)、xpsr は Arm Core の特殊 Register を表示
-
- sp:Stack Pointer:スタック上の最後のエントリーアドレスを格納
- lr:Link Register :BL命令の戻りアドレスを格納
- pc:Program Couner :実行される命令のアドレスを格納
- xpsr:Program Status Register:③の情報をまとめて格納
-
- ③:CPU の状態を表す Flag 情報を格納
- ④:Core Closk の刻みごとにインクリメントされた値を格納
-
- Cycles :CPU が起動してからどのくらい Tick が経過しているか確認可能
- Cycles Delta:前回停止した Break Point からどのくらい Tick が経過しているか確認可能
-
- ⑤:選択した Register の値を様々なフォーマットで表示
-
参考:MCUXpresso IDE User Guide > Registers
【図4】Registers View
3. Peripherals
Peripherals View では、MCU に内蔵されている各 Peripheral の Register を表示させることができます。Debug 中に確認する方法(Online Peripherals と表記します)と、Debug 実行前に確認する方法(Offline Peripherals と表記します)があります。それぞれできる事を下記に記載します。
- Online Peripherals
- Project に登録した SVD File (SDK には通常設定済み)に記載の情報を元に、Register Name と Value 、Access 属性、Location (アドレス値)、簡単な概要文を Debug 中に表示できます
- Debug 中に Register に対して値を Write し Value 値を変更できます。
- Project にカスタム SVD をインポートして Debug 中に表示できます。
- Offline Peripherals
- 指定した SVD File に記載の情報を元に、Register Name と Reset Value 、Access 属性、Location (アドレス値)、簡単な概要文を Debug せずに確認できます。
- SVD File 指定方法は3種類サポートしています。
- Project に既にインポートされている SVD を表示
- MCUXpresso IDE にインストールされている SDK から IC 名を選択して表示
- カスタム SVD をインポートして表示
-
参考:MCUXpresso IDE User Guide > Peripherals
【図5】【図6】に表示方法を補足します。
Online Peripherals は Debug を実行中に Debug perspective の左下に【図5】のように表示されます。
【図5】Online Peripherals View
Offline Peripherals は Debug 中に使用するものではないですが、Develop perspective と Debug perspective 両方ともに表示されています。画面中央下に【図6】のように表示されます。先ほど解説した通りインポート方法は3種類あります。
【図6】Offline Peripherals View
注記:
Peripherals を Debug 中に表示するためには、各 Peripheral に Clock や電源が供給されている必要があります。通常、起動直後は Clock などの初期化が実行されていないため、設定が完了してから Peripherals View の表示を行うようにしてください。そういった動作中にアクセスできない領域を表示した場合、赤色に表示されたり、接続が切れたりします。
4. Heap and Stack View
組み込み MCU の開発で気にしないといけない点として Heap と Stack の容量があると思います。ソフトウェアが動く事によって Heap と Stack の消費量が常に変動し、足りなくなったときに Stack Overflow が発生して誤動作を引き起こす可能性があります。また、限られたリソースの中で開発を行わないといけないマイコンでは、Heap と Stack を意識したソフトウェア開発も必要になってきます。
Heap and Stack View は実際に Debug を実行すると Debug perspective の中【図7】のように表示されます。使用量が 50% 以下の場合、緑色、それ以上は 黄色から赤色に変化していきます。
Heap and Stack View では、どのくらい Heap と Stack が使用されているか監視することが可能となっており、特に Heap は リアルタイムに監視することができます。Stack 情報は Processr Register 内に保持されるため、一時停止されたときのみ更新されます。
-
参考:MCUXpresso IDE User Guide > Heap and Stack View
【図7】Heap and Stack View
ポイント:Stack をリアルタイムに監視することは出来ませんが、Watch Point で監視したい Stack 領域を登録しておくことでその領域へアクセスが発生した時に強制的に Break させることができます。
ポイント:Develop perspective では Image Info タブが用意されており、その中の Call Graph を押すと、Build した結果から Software の Call Stack 静的解析(Debug を実行しないで Stack 使用量の解析)を行うことができます。
デフォルトで有効になっていますが、GCC の -fstack-usage オプションが有効になっていることが前提となります。下記 User Guide に設定方法が記載されています。
-
参考:[NXP マイコン初心者ガイド 3] i.MXRT1050 でプロジェクトのメモリー配置を変えてみる(リンカーの設定変更)> 1-1. Image Info ビューによる確認
-
参考:MCUXpresso IDE User Guide > Call Graph
5. Faults View
アプリケーション開発を行っていると、下記に示すような Hard Fault というプログラムやアルゴリズムでの処理内容が原因でエラーが発生し CPU の動作に障害が発生することがあります。
- <Hard fault の例>
-
- usage fault:ゼロ除算のようなソフトウェア処理による障害
- bus fault:メモリコントローラによって引き起こされるアボートなどの Bus 障害
- mem manage:メモリ保護ユニットによって引き起こされる Memory 管理障害
これらの発生要因や発生アドレスなどを特定することは一般的に難しいですが MCUXpresso には Faults View があり、そういった障害が発生した際の原因調査を手助けしてくれます。
Link Server の場合、Fauls が発生すると自動的に Faults View が表示され下記情報を表示してくれます。
- 発生した Fault の種類
- Fault を発生させたコードの Address 、Fault 関数を呼び出した関数の Address
- Fault Status Registers
詳しくは、下記 User Guide をご覧ください。
-
参考:MCUXpresso IDE User Guide > Faults
まとめ
今回は MCUXpresso に搭載されている Debug 機能について紹介しました。Eclipse の基本的な機能に加えて MCUXpresso 独特の機能である Heap and Stack View や Faults View などが用意されていることを確認できたかと思います。実際の Debug 作業に活用いただければと思います。
次回は、MCUXpresso Config Tools を紹介します。
[NXP マイコン初心者ガイド 5] へ | |||
NXP マイコン初心者ガイド まとめサイト |