# 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` はリセットか例外かを表します。例外の場合は０で、リセットの場合は非０が格納されます。

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 初版