ご存じのように、イベント フラグは非常に便利です (例: タスクの実行を許可する) が、残念ながらそれらの制御関数 (os_evt_clr/set/wait) はタスク本体の外 (例: 割り込み処理関数) で正しく機能しません。別の方法として、変数を使用し、必要に応じて割り込みハンドラーで初期化し、別のタスクでそれを使用して os_evt_set() 関数を実行し、MCU がタスクに入るようにしました。
bool Instance_Variable;
Interrupt_Handler()
{
if(xxxx)
Instance_Variable=1
}
//--------------------------
Secondary_Task()
{
//This is frequently run task
if(Instance_Variable==1)
{
os_evt_set (0x0001, Primary_Task_ID);
Instance_Variable=0;
}
}
//--------------------------
Primary_Task()
{
Result = os_evt_wait_or (0x0001, 0xFFFF);
//Task's body
os_evt_clr (0x0001, Primary_Task_ID);
}
より良いアプローチはありますか?WBR。