カスタマーサポートセンター

FAQ~よくある質問~ | FAQマスタ詳細表示

FAQ詳細情報

ID 10810872
FAQカテゴリ(大) リンカ
最終更新日 2015-12-13

質問内容

TN61385: スタック使用量とスタック使用量制御ファイル

回答内容

ターゲット:  ARM, RX 
コンポーネント  一般 
公開  2014/06/11 12:20 

 

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

 

サンプルプロジェクト
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;

 

上記により、スタック解析はこれら (呼ばれていない) の関数が "コールグラフルート" であることを知ります。(制御ファイルを使用する代わりに、以下のように記述することも可能です。)

 #pragma call_graph_root directly in the code).

 

追加の情報
C/C++ 開発ガイド「スタック使用量解析」を、スタック使用量解析ファイルの構文については「スタック使用量解析ファイル」を参照してください。

記事: IAR Embedded Workbench for RX でのスタック使用量解析も参照してください。

 

C-SPYでデバッグ中の、ランタイムでのスタック情報を得るには「ツールメニュー > オプション > スタック > グラフィカルスタック表示とスタック使用トラッキングを有効にする」を有効にします。C-SPYを起動したら「表示 > スタックウィンドウ」を開きます。

 

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


参考資料URL