# OS_SetIrqCheckFlag

## 構文

  `#include <nitro/os.h>`
  `void OS_SetIrqCheckFlag( OSIrqMask intr );`

## 引数

intr | チェックフラグをセットしたい IRQ割り込み要因を論理和で示したもの。 (通常、１要因しか扱わない)

## 返り値

なし。

## 説明

IRQ割り込みのチェックフラグをセットします。

このフラグは通常は各割り込みの割り込みハンドラで呼ばれます。個別の割り込み処理が終わったときに、その割り込みで呼ばれたことを示すためにチェックフラグをセットします。例えば、Ｖブランク割り込みで呼び出される関数では

> `OS_SetIrqCheckFlag( OS_IE_V_BLANK );`

のように呼んでチェックフラグをセットします。フラグについては下に表を記載します。

ここでセットしたフラグは、`OS_WaitIntr()` や `OS_WaitInterrupt()` や `SVC_WaitVBlankIntr()` で割り込みがあったかどうかをチェックするために使用されます。従って、それらの関数で待つことがない割り込みの場合、セットしてもどこからも使用されないので必ずしもセットする必要はありませんが、個別に対応していると実際に必要な個所でも書き忘れることもありますので、問題がなければ常に割り込みに対してはセットすることをお奨めします。

複数のスレッドで同じ割り込みに対して`OS_WaitIntr()` や `OS_WaitInterrupt()` や `SVC_WaitVBlankIntr()` を行なっている場合、1回の割り込みに対してはいずれか１つのスレッドでしか復帰出来ませんので、注意して下さい。

###
割り込みの種類

割り込みの種類については以下を参照してください。

→ 割り込みの種類

###
ユーザ用フラグ

またハードウェアの割り込み要因に対応するフラグ以外に以下のようなダミーのチェックフラグが用意されており、アプリケーション内で自由に使うことができます。これにより、コールバック関数との同期を取るために volatile 変数によるポーリングを行なっていた処理を `OS_WaitIrq()`, `OS_ClearIrqCheckFlag()`, `OS_SetIrqCheckFlag()` の組み合わせで置き換えることができます。

値 | 種類
--- | ---
OS_IE_USER_FLAG0 | アプリケーション内で自由に使えるチェックフラグ 0
OS_IE_USER_FLAG1 | アプリケーション内で自由に使えるチェックフラグ 1

## 参照

`OS_ClearIrqCheckFlag, OS_GetIrqCheckFlag
`

## 内部動作

ARM9では、DTCM内のあらかじめ決められた位置(DTCM_END - 8)がチェックフラグ用の領域と決められており、そこを操作します。ARM7では、ARM7専用WRAMの予め決められた位置(最上位アドレス - 8)がチェックフラグ用の領域と決められており、そこを操作します。

## 履歴

2005/03/08 用語統一 [割込み] → [割り込み]
2004/12/08 OS_IE_KEY についての注意を追加
2004/11/24 OS_IE_SIO を削除
2004/11/02 参照から `SVC_WaitIntr()` を削除
2004/09/01 「サブプロセッサ」を「ARM7」に、「サブプロセッサ間」を「ARM9・ARM7間」に変更
2004/04/22 複数スレッドで使用する場合の注意を追加
2003/01/09 初版