1. スタック・オーバーフローの概要
Nios® II の開発において、実行メモリー内で使用されない領域は スタックとヒープとして使用することができます。
どのくらいスタックとヒープが用意されているかは、Nios® II SBT for Eclipse (以下 Nios® II SBT)にて、ソフトウェアをコンパイルするとコンソール画面で 図 1 のように確認できます。
図 1:スタックとヒープの合計サイズ
また、各関数がどのくらいスタックを使用するかは、下記コンテンツで紹介している方法で確認できます。
各関数の処理で必要となるスタックサイズが用意されているスタックサイズを超えてしまった時に、メモリー上のプログラム領域の破壊が発生し、Nios® II が止まってしまうことがあります。
これをスタック・オーバーフローと言います。
今回は、このスタック・オーバーフローを Nios® II SBT のデバッグで検出する機能をご紹介いたします。
2. スタック・オーバーフロー検出機能の設定
スタック・オーバーフローの検出機能を有効にするには 図 2 のように、BSP Editor の Main タブの Advanced にある enable_runtime_stack_checking を ON にしてください。
図 2:BSP-Editor の設定
3. デバッグ実⾏においてスタック・オーバーフローが発生したときの状態
enable_runtime_stack_checking が有効になっている状態で、デバッグを実行してスタック・オーバーフローが発生した場合、図 3 のように Break 3 でデバッグが停止します。
図 3:スタック・オーバーフローの検出時の挙動
下記ユーザーガイドに記載されているとおり、Break 3 で停止した状態がスタック・オーバーフローの発生を検出したことを意味しています。
スタック・オーバーフローが発生してしまう場合は、実行メモリーサイズを増やすか、スタックが小さくなるようにソフトウェアを書き換えることで回避することができます。
おすすめページ
弊社では Nios® II に関する各種情報とまとめた「Nios® II まとめページ」をご用意しております。本記事以外にも有用な情報が満載ですのでこちらも併せてご確認ください。