付録D スタック使用量の算出
- ユーザ・スタック
タスクのスタックを,ユーザ・スタックと呼びます。
システム・コンフィギュレーション・ファイルのタスク情報(task[])でタスクを生成するときには,サイズとユーザ・スタック領域を割り当てるセクションを指定します。
cre_tskまたはacre_tskでタスクを生成するときには,サイズとユーザ・スタック領域の先頭アドレスを指定します。
タスクのスタックを,ユーザ・スタックと呼びます。
システム・コンフィギュレーション・ファイルのタスク情報(task[])でタスクを生成するときには,サイズとユーザ・スタック領域を割り当てるセクションを指定します。
cre_tskまたはacre_tskでタスクを生成するときには,サイズとユーザ・スタック領域の先頭アドレスを指定します。
- システム・スタック
各種ハンドラとカーネルが共通に使用するスタックで,システムにひとつだけ存在します。システム・スタック・サイズは,システム情報(system)のシステム・スタック・サイズ(stack_size)に指定します。システム・スタックのセクション名はSIです。
各種ハンドラとカーネルが共通に使用するスタックで,システムにひとつだけ存在します。システム・スタック・サイズは,システム情報(system)のシステム・スタック・サイズ(stack_size)に指定します。システム・スタックのセクション名はSIです。
- treesz_tex
タスク例外処理ルーチン開始関数を起点とする関数ツリーで消費されるサイズ(Call Walker表示サイズ)です。タスク例外処理ルーチンを使用しない場合は,treesz_texは0です。
タスク例外処理ルーチン開始関数を起点とする関数ツリーで消費されるサイズ(Call Walker表示サイズ)です。タスク例外処理ルーチンを使用しない場合は,treesz_texは0です。
- ctxtsz_task,ctxsz_tex
タスクのコンテキスト・レジスタのサイズです。ctxtsz_taskはタスク用,ctxsz_texはタスク例外処理ルーチン用です。
タスク例外処理ルーチンを使用しない場合は,ctxsz_texは0です。
タスクのコンテキスト・レジスタのサイズは,システム情報(system)のタスク・コンテキスト・レジスタ(context)の設定によって異なります。表D-1を参照してください。
タスクのコンテキスト・レジスタのサイズです。ctxtsz_taskはタスク用,ctxsz_texはタスク例外処理ルーチン用です。
タスク例外処理ルーチンを使用しない場合は,ctxsz_texは0です。
タスクのコンテキスト・レジスタのサイズは,システム情報(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としてください。