付録D スタック使用量の算出
- システム・スタック
各種ハンドラとカーネルが共通に使用するスタックで,システムにひとつだけ存在します。システム・スタック・サイズは,システム情報(system)のシステム・スタック・サイズ(stack_size)に指定します。システム・スタックのセクション名はSIです。
各種ハンドラとカーネルが共通に使用するスタックで,システムにひとつだけ存在します。システム・スタック・サイズは,システム情報(system)のシステム・スタック・サイズ(stack_size)に指定します。システム・スタックのセクション名はSIです。
- ctxtsz
タスクのコンテキスト・レジスタのサイズです。このサイズは,システム情報(system)のタスク・コンテキスト・レジスタ(context)の設定によって異なります。表D-1を参照してください。
タスクのコンテキスト・レジスタのサイズです。このサイズは,システム情報(system)のタスク・コンテキスト・レジスタ(context)の設定によって異なります。表D-1を参照してください。
システム・スタックを最も多く消費するのは,サービス・コール処理中 に割り込みが発生,さらに多重割り込みが発生した場合です。すなわち,システム・スタックの必要量 (最大サイズ)は以下の計算式で算出することができます。
システム・スタックの使用量 = | svcsz | ||
15 | |||
+ | ∑ | inthdrsz k | |
k = 1 | |||
+ sysdwnsz |
- inthdrsz
各割り込みハンドラ開始関数を起点とする関数ツリーで消費されるサイズ(Call Walker表示サイズ)です。
kは,割り込み優先レベルです。同じ優先レベルの割り込みが複数ある場合は,それらのハンドラの中で最大のサイズをinthdrsz kとしてください。
なお,基本クロック用割り込みハンドラ(割り込み優先レベルは基本クロック割り込み情報(clock)の基本クロック割り込み優先レベル(IPL)で指定します)の使用量は,以下の3つのサイズの最大値となります。clocksz1,clocksz2,clocksz3については,リリースノートを参照してください。
なお,基本クロック用タイマを使用しない場合(clock.timer=NOTIMER)は,基本クロック用割り込みハンドラが使用するサイズを加算する必要はありません。
各割り込みハンドラ開始関数を起点とする関数ツリーで消費されるサイズ(Call Walker表示サイズ)です。
kは,割り込み優先レベルです。同じ優先レベルの割り込みが複数ある場合は,それらのハンドラの中で最大のサイズをinthdrsz kとしてください。
なお,基本クロック用割り込みハンドラ(割り込み優先レベルは基本クロック割り込み情報(clock)の基本クロック割り込み優先レベル(IPL)で指定します)の使用量は,以下の3つのサイズの最大値となります。clocksz1,clocksz2,clocksz3については,リリースノートを参照してください。
なお,基本クロック用タイマを使用しない場合(clock.timer=NOTIMER)は,基本クロック用割り込みハンドラが使用するサイズを加算する必要はありません。
- cycsz
周期ハンドラ開始関数を起点とする関数ツリーで消費されるサイズ(Call Walker表示サイズ)です。周期ハンドラが複数ある場合は,それらのハンドラの中で最大のサイズをcycszとしてください。
周期ハンドラ開始関数を起点とする関数ツリーで消費されるサイズ(Call Walker表示サイズ)です。周期ハンドラが複数ある場合は,それらのハンドラの中で最大のサイズをcycszとしてください。