

#include <nitro/os.h>
void OS_SetThreadStackWarningOffset( OSThread* thread, u32 offset );
| thread | 警告水準をセットするスレッド |
| offset | 警告水準のオフセット |
なし。
指定のスレッドに対し、スタック溢れチェック用のための警戒水準を設定します。
このチェック機構は、デフォルトでスタックの最上位と最下位にあらかじめマジックナンバーを書き込みそれが書き換えられたかどうかで調べるというものです。OS_SetThreadStackWarningOffset() は、最上位と最下位に加えその途中に警戒水準を設定し、その部分が書き換えられたどうかのチェックのためにマジックナンバーを書き込むための関数です。(スタックの最上位と最下位のマジックナンバーはスレッドを作成した際にすでに書き込まれています。)
このようにスタックの途中にマジックコードを設定するのは、スタックを最下位まで使い切ってしまい動作が不定になる前にスタック溢れが起きそうであることを検知するためです。
offset はスタックの最下位からのバイト数で、4の倍数である必要があります。0 を設定すると設定を解除します。
スタックの途中にマジックナンバーを書き込みますので、そこが現在使われていると動作が不定になるおそれがあります。従って、通常はスレッドを作成した直後、スタックの確実にまだ使用されていない部分に対し設定を行なうようにして下さい。
(例)
:
OS_CreateThread( &thread, … );
OS_SetThreadStackWarningOffset( &thread, 0x100 );
:
OS_CheckStack( &thread );
OS_CreateThread, OS_CheckStack
2004/04/29 文面修正
2004/01/21 初版