OS_EnterCriticalSection ()
Вход в критическую секцию. При этом запрещаются все прерывания (в системной переменной сохраняется текущее значение флагов GIEx) и блокируются все задачи, кроме вызвавшей этот сервис, вне зависимости от приоритетов и готовности. Внутри критической секции допускается передача управления планировщику.
Только из задачи
Нет
Нет
const char * TestString = "We are in Critical Section now.\n"; void Task (void) { static const char * str; for (;;) { /*...*/ OS_EnterCriticalSection (); // Теперь мы можем отправлять данные через USART, не опасаясь, // что какая-нибудь задача попытается захватить этот ресурс str = TestString; while (*str) { OS_Cond_Wait(TRMT); // Ждем освобождения передатчика USART TXREG = *str++; } OS_LeaveCriticalSection (); /*...*/ } }