Как вы знаете, флаги событий очень полезны (например, запуск задачи), но, к сожалению, их функции управления (os_evt_clr/set/wait) не работают за пределами объектов задач правильно (например, в функциях обработки прерываний). Для альтернативы я использовал переменную, я инициализировал ее в обработчике прерываний, когда это необходимо, а затем использовал ее в другой задаче для запуска функции os_evt_set(), чтобы MCU мог ввести задание.Почему функции флага, связанные с флагом, не работают корректно за пределами заданий в keil rtx?
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.