# OS_SetAlarm

## 構文

      #include <nitro/os.h>

      void OS_SetAlarm(
                   OSAlarm*       alarm,
                   OSTick         tick,
                   OSAlarmHandler handler,
                   void*          arg );

## 引数

alarm | アラームを設定するアラーム構造体へのポインタ
tick | アラームが発動する(handler が呼ばれる)までのチックカウント
handler | アラームハンドラ
arg | アラームハンドラが呼ばれるときの引数

## 返り値

なし。

## 説明

ワンショットのアラームを設定します。

tick で指定したチックカウント後、handler が呼び出されます。handler は、

> `typedef void (*OSAlarmHandler)( void* );`

で定義された `OSAlarmHandler` 型の関数です。handler が呼び出されるとき、arg を引数に取ります。handler は OS のタイマ割り込みのハンドラから呼び出されます。従って割り込みは禁止状態となっています。

チックカウントの1単位はハードウェアのシステムクロックの64分周です。

すでにアラームがセットされている OSAlarm構造体へのポインタを alarm に指定した場合、OS_Panic() で停止します。

下の例では、アラームを設定することで 0.5秒後に`handler()` が呼び出され、"handler called. arg=0x12345678" と表示されます。

> (例)
> `#define COUNT 　OS_MilliSecondsToTicks( 500 )
> #define ARG　0x12345678
> OSAlarm 　alarm;
> main()
> {
> ：
> OS_InitTick();
> OS_InitAlarm();
> ：
> OS_CreateAlarm( &alarm );
> OS_SetAlarm( &alarm, COUNT, handler, (void*)ARG );
> ：
> }
> void handler( void* arg )
> {
> OS_Printf( "handler called. arg=0x%x\n", arg );
> }`

## 参照

`OS_InitAlarm, OS_CancelAlarm, OS_SetPeriodicAlarm, OS_SetAlarmTag
OS_*SecondsToTicks
`

## 履歴

2005/03/08 用語統一 [割込み] → [割り込み]
2004/12/22 アラームハンドラはタイマ割り込みのハンドラから呼び出される記述を追加
2004/08/30 セットされているアラーム構造体は使用できない記述を追加
2004/02/25 systemClock→tick に
2004/02/04 初版