OS_SetUserExceptionHandler

構文

#include <nitro/os.h>
void OS_SetUserExceptionHandler(
            OSExceptionHandler  handler
            void*               arg );
  

引数

handler 例外発生時に呼ばれるユーザ関数
arg ユーザ関数を呼び出すときの引数

返り値

なし。

説明

例外発生時に呼ばれるユーザ関数を設定します。

ユーザ関数 handler は、

 typedef void (*OSExceptionHandler)( u32, void* );

で定義される、OSExceptionHandler 型の関数です。この関数は割り込み禁止状態で呼び出されます。

ユーザ関数を呼び出すときの、第一引数は例外発生時のコンテキストを格納した構造体へのポインタアドレス となっています。第二引数はOS_SetUserExceptionHandler() の第二引数で指定したarg がそのまま渡されます。



例外発生時のコンテキストについて

第一引数で指定された先のコンテキストは OSExcpContext 型の構造体へのポインタとなっています。


 typedef struct
 {
  OSContext context;
  u32 cp15;
  u32 spsr;
  u32 exinfo;
 } OSExcpContext;


context は OSContext 型構造体の値です
cp15 はコプロセッサの状態です。
spsr は、SPSR です。SPSR のないモードについては不定となります。
exinfo はリセットか例外かを表します。例外の場合は0で、リセットの場合は非0が格納されます。



IS-TWL-DEBUGGER での例外について

概要(例外) に記述してあるように、IS-TWL-DEBUGGER ではユーザの例外ハンドラの呼び出しを行うことが出来ません。IS-TWL-DEBUGGER 上で TWL モードで動作しているときも、NITRO モードで動作しているときも同様に出来ません。例外が発生したときはデバッガがそこでCPUを停止しますので、デバッガの表示するコンテキスト情報や、デバッガのコールスタックウィンドウなどの情報を元に調べるようにしてください。

参照

概要(例外)
OS_InitException, OS_InitContext

履歴

2009/07/01 IS-TWL-DEBUGGER でのデバッガ表示について修正
2008/04/18 例外時のコンテキストについての説明を追加
2005/03/08 用語統一 [割込み] → [割り込み]
2004/02/19 初版