スタックオーバーフローのワーニング
テクニカル・ノート 57348
アーキテクチャ:
All
コンポーネント:
debugger
更新日:
2018/09/18 9:32
はじめに
スタックは十分余裕があるのに、C-SPY が以下のようなワーニングを表示することがあります。
The stack 'CSTACK' is filled to 100% (4096 bytes used out of 4096). The warning threshold is set to 90%
背景
プロジェクトを作成した直後は、オプションはデフォルトの値になり、 Cスタックチェック も有効になります。
通常の組み込みアプリケーションを書いたりデバッグする時、Cスタックチェックは、良い機能です。
一方、RTOSを使用する場合、Cスタックチェックは意図されたように動作しません。Cスタックチェックは、スタックポインタが、デフォルトのスタック領域外にある理由を"理解"できません。 このような状況の理由はRTOSがタスクごとに異なるスタック領域に切り替えるからです。
Cスタックチェック機能は、IAR Embedded Workbenchに組み込まれています。(以前のバージョンでは、CスタックチェックはC-SPYプラグインにより行われていました。)
解決策
Tools > Options... > Stack> 'Warn when stack pointer is out of bounds'
のチェックマークを外すことでワーニングメッセージを無効にすることができます。
C-SPYプラグインを使っている古いバージョンのIAR Embedded Workbench の場合、Project > Options > Debugger > Plugins > Stack
のチェックマークを外してプラグインを無効にしてください。
RTOSを使用する時は、Cスタックチェックを無効にしてください。 使用しているRTOS専用に作成されたプラグインを用いれば、スタックチェックは可能の場合もあります。
他のシチュエーション
アプリケーションがRTOSを使用していない場合は、ワーニングの原因は以下のいずれかかもしれません。
- ワーニングは正しく、アプリケーションの修正が必要である。
- アプリケーション (の少なくとも一部) がデバック情報を含めずにビルドされている。Cスタックチェックはデバッグ情報なしで動作させることを前提としてないので、この場合Cスタックチェックは無効にしてください。
全ての製品名は、それぞれの所有者の商標または登録商標です