如您所知,事件标志非常有用(例如让任务运行),但不幸的是它们的控制功能(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。
答案 0 :(得分:0)
您不能在ISR中使用以os_为前缀的函数。来自RTX文档的使用提示:
此代码可以使用:
Interrupt_Handler() {
if(xxxx) {
isr_evt_set (0x0001, Primary_Task_ID);
}
}
//--------------------------
Primary_Task() {
Result = os_evt_wait_or (0x0001, 0xFFFF);
//Task's body
os_evt_clr (0x0001, Primary_Task_ID);
}