「12ステップで作る 組込みOS自作入門」という本の中のコードについて質問です。
以下のコードにて static int setintr(softvec_type_t type, kz_handler_t handler) 内で
static void thread_intr(softvec_type_t type, unsigned long sp) が宣言されているのですが、
この関数はコードにあるように、すぐ下で定義されています。
なぜ static int setintr(softvec_type_t type, kz_handler_t handler) 内で宣言されているのでしょうか?
該当のソースコード
/* 割込みハンドラの登録 */ static int setintr(softvec_type_t type, kz_handler_t handler) { static void thread_intr(softvec_type_t type, unsigned long sp); /* * 割込みを受け付けるために,ソフトウエア・割込みベクタに * OSの割込み処理の入口となる関数を登録する. */ softvec_setintr(type, thread_intr); handlers[type] = handler; /* OS側から呼び出す割込みハンドラを登録 */ return 0; } /* 割込み処理の入口関数 */ static void thread_intr(softvec_type_t type, unsigned long sp) { /* カレント・スレッドのコンテキストを保存する */ current->context.sp = sp; /* * 割込みごとの処理を実行する. * SOFTVEC_TYPE_SYSCALL, SOFTVEC_TYPE_SOFTERR の場合は * syscall_intr(), softerr_intr() がハンドラに登録されているので, * それらが実行される. */ if (handlers[type]) handlers[type](); schedule(); /* スレッドのスケジューリング */ /* * スレッドのディスパッチ * (dispatch()関数の本体はstartup.sにあり,アセンブラで記述されている) */ dispatch(¤t->context); /* ここには返ってこない */ }

0 コメント