bool OS_IsInCriticalSection ()
Возвращает true
, если одна из задач находится в критической секции.
Везде
Нет
false |
Критическая секция не активна |
true |
Одна из задач находится в критической секции |
void interrupt isr (void) { if (TMR2IF) { TMR2IF = 0; OS_Timer(); } } void main (void) { /*...*/ for (;;) { OS_Sched(); if (OS_IsInCriticalSection () && TMR2IF) { TMR2IF = 0; OS_Timer(); // Т.к. в критической секции прерывания запрещены, // мы таймер обрабатываем отдельно }; /*...*/ } }