如您所知,事件标志非常有用(例如让任务运行),但不幸的是,它们的控制功能(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。