UdonLibrary 1.0.0
機械システム研究部 C++ ライブラリ
読み取り中…
検索中…
一致する文字列を見つけられません
割り込み禁止制御

ScopedInterruptLocker クラスを用いてインスタンスが存在する間割り込みを禁止します。主に通信クラス内で使用されます。

// 割り込み許可
{
// 割り込み禁止
}
// 割り込み許可
割り込みロック、アンロックをスコープの範囲で制御するクラス
Definition ScopedInterruptLocker.hpp:11

割り込み禁止の解除忘れを防止できるため、割り込み関数内で使用するリソースを返す関数などに有用です。

‍割り込み関数内で使用するリソースにアクセスする時、同タイミングで割り込みが起こることが考えられ、この時アクセスによって得られた値は不正な値となることがあります。そのため割り込み禁止期間にアクセスする必要があります。

ScopedInterruptLocker を使わない場合

int value; // 割り込み関数内で使用するリソース
// 割り込みハンドラ
void onReceive()
{
value = read();
}
int getValue()
{
noInterrupts();
const int copy = value;
interrupts();
return copy;
}

ScopedInterruptLocker を使う場合

int value; // 割り込み関数内で使用するリソース
// 割り込みハンドラ
void onReceive()
{
value = read();
}
int getValue()
{
return value;
}