マイコンの動作で以下のような場合は、その時のレジスタ値やプログラムカウンタ値などを
メモリ領域(通常はRAM領域)に退避します。
① 割込み処理などの ”例外処理” の発生で、実行中のプログラムを中断して “例外処理” を実行
② 関数/サブルーチンコールを実行
この退避に使用するメモリ領域を「スタック」や「スタック領域」と呼びます。
スタック領域へ退避したデータは、”例外処理” や “関数/サブルーチンコール” が終了して、
“中断した処理の再開” や “関数/サブルーチンコール元の処理へもどる” タイミングで復帰します。
下図のように、スタック領域外まで退避を
行うことをスタックオーバーフローといいます。
スタックオーバーフローが発生すると
予期しない不具合の原因となる可能性があります。
よって、プログラムの開発中はスタックの最大使用量を
把握しておき、スタック領域サイズを超える場合は
領域を大きくするなどの対策が必要です。