ミューテックス
API
ミューテックス関連のAPIの定義は、 solid_mutex.h
にあります。
#include "solid_mutex.h"
SOLID_MUTEX_DisInt
-
void SOLID_MUTEX_DisInt(void)
IRQ割り込みを禁止します。
SOLID_MUTEX_EnaInt
-
void SOLID_MUTEX_EnaInt(void)
IRQ割り込みを許可します。
SOLID_MUTEX_PushInt
-
SOLID_REGISTER SOLID_MUTEX_PushInt(void)
IRQ割り込みを禁止にします。
この関数は割り込み禁止の処理のネストを許可するため、現在の状態を返り値として 戻します。
SOLID_MUTEX_PopInt
と対にして使用してください。- 戻り値
現在の状態(CPSR(AArch32), PSTATE(AArch64))
SOLID_MUTEX_PopInt
-
void SOLID_MUTEX_PopInt(SOLID_REGISTER status)
statusが割り込み許可状態だった場合、IRQ割り込みを許可します。
SOLID_MUTEX_PushInt
と対にして使用してください。- パラメータ
status --
SOLID_MUTEX_PushInt
の返り値
SOLID_MUTEX_DisFIQ
-
void SOLID_MUTEX_DisFIQ(void)
FIQ割り込みを禁止します。
SOLID_MUTEX_EnaFIQ
-
void SOLID_MUTEX_EnaFIQ(void)
FIQ割り込みを許可します。
SOLID_CRITICALSECTION_T
-
typedef struct _SOLID_CRITICALSECTION_T SOLID_CRITICALSECTION_T
-
struct _SOLID_CRITICALSECTION_T
説明
クリティカルセクション用構造体
定義
typedef struct _SOLID_CRITICALSECTION_T { uint32_t lock; uint32_t count; SOLID_REGISTER status; void *reserved; } SOLID_CRITICALSECTION_T;
メンバー
-
uint32_t lock
コアサービス内で使用: 占有CPU(SMP時のみ)
-
uint32_t count
コアサービス内で使用: ネスト回数(SMP時のみ)
-
SOLID_REGISTER status
コアサービス内で使用: ロック時の状態(CPSR)
-
void *reserved
コアサービス内で使用: 予約領域
-
uint32_t lock
SOLID_InitializeCriticalSection
-
int SOLID_InitializeCriticalSection(SOLID_CRITICALSECTION_T *t)
クリティカルセクション用変数を初期化します。
- パラメータ
t -- 初期化する変数へのアドレス
- 戻り値
SOLID_ERR_OK
: 正常終了それ以外: エラー
SOLID_EnterCriticalSection
-
int SOLID_EnterCriticalSection(SOLID_CRITICALSECTION_T *t)
クリティカルセクションに入ります。
他のコンテキストがクリティカルセクションに入っている場合、開放されるまで 待ち状態になります。
排他制御が必要な処理が終了したら、すぐに
SOLID_LeaveCriticalSection
を呼んで クリティカルセクションを開放してください。- パラメータ
t -- クリティカルセクション用変数へのアドレス
- 戻り値
SOLID_ERR_OK
: クリティカルセクションに入った。それ以外: エラー
SOLID_TryEnterCriticalSection
-
int SOLID_TryEnterCriticalSection(SOLID_CRITICALSECTION_T *t)
クリティカルセクションに入ります。
他のコンテキストがクリティカルセクションに入っている場合、クリティカルセクション に入らず即時戻ります。
排他制御が必要な処理が終了したら、すぐに
SOLID_LeaveCriticalSection
を呼んで クリティカルセクションを開放してください。- パラメータ
t -- クリティカルセクション用変数へのアドレス
- 戻り値
SOLID_ERR_OK
: クリティカルセクションに入った。SOLID_ERR_BUSY
: 他のコンテキストがクリティカルセクションに入っている。それ以外: エラー
SOLID_LeaveCriticalSection
-
int SOLID_LeaveCriticalSection(SOLID_CRITICALSECTION_T *t)
クリティカルセクションを開放します。
- パラメータ
t -- クリティカルセクション用変数へのアドレス
- 戻り値
SOLID_ERR_OK
: クリティカルセクションを開放した。SOLID_ERR_NOTUSED
: クリティカルセクションに入っていない。それ以外: エラー