スタック使用とスタック使用解析制御ファイル

テクニカル・ノート 61385

アーキテクチャ:

Arm, RX

コンポーネント:

general

更新日:

2018/01/19 9:06

はじめに

スタックについては、 "IAR C/C++ 開発ガイド"の "自動変数とパラメータの記憶領域" 章に記載があります。このテクニカルノートは、アプリケーションからスタック使用状況の統計情報を取得する方法と、スタック使用量制御ファイル(.suc)の構文を説明します。

サンプルプロジェクト

サンプルプロジェクトを次のリンクからダウンロードして開いてください: Example project for IAR Embedded Workbench for ARM 7.20.1.zip.

解説

シンプルなサンプルプロジェクトには、'main' と 'test_func' 関数が含まれています。 スタック使用量解析を有効にするためには、次のプロジェクトオプションを有効にします:

プロジェクト > オプション > リンカ > アドバンスト > スタック使用量解析を有効化

 

リンカマップファイルに、"STACK USAGE"というセクションにスタック使用情報が含まれるようになります。例えば:

Maximum call chain 20 bytes

"__iar_program_start" 0
"__cmain" 0
"main" 16
"test_func" 4

サンプルプロジェクトには、 'SysTick_Handler'と 'UsageFault_Handler'の2つの割り込みハンドラも含まれています。またOSタスク: 'test_task'も含まれます。 これらの関数は他から直接コールされないので スタック使用量制御ファイル(.suc)では、以下を指定する必要があります:

call graph root [task] : test_task;
call graph root [interrupt] : SysTick_Handler, UsageFault_Handler;

上記により、スタック使用量解析は、これらの(コールされない)関数が "call graph roots"であることを知ります。 (制御ファイルを使用する代わりに、 #pragma call_graph_rootをコード内で直接使用することも可能です。)

追加情報

"IAR C/C++ 開発ガイド"の "スタック使用量解析" 章を参照してください。
スタック使用量制御ファイルに関しては、 "スタック使用量制御ファイル" 章を参照してください。

C-SPYでデバッグ中にランタイムでのスタック使用情報を取得するには、ツール > オプション > スタック > 'グラフィカルスタック表示とスタック使用トラッキングを有効にする' を有効にしてください。C-SPYを起動して 表示 > スタックウィンドウ を開いてください。

 

全ての製品名は、それぞれの所有者の商標または登録商標です

申し訳ございませんが、弊社サイトではInternet Explorerをサポートしていません。サイトをより快適にご利用いただくために、Chrome、Edge、Firefoxなどの最新ブラウザをお使いいただきますようお願いいたします。