====== OSA : OS_EnterCriticalSection ======
<color blue>**OS_EnterCriticalSection ()**</color>\\ 
=== ===

{{osa:ref:attr_call_task.png|Разрешен вызов только в контексте задачи}}

Вход в критическую секцию. При этом запрещаются все прерывания (в системной переменной сохраняется текущее значение флагов GIEx) и блокируются все задачи, кроме вызвавшей этот сервис, вне зависимости от приоритетов и готовности. Внутри критической секции допускается передача управления планировщику.


=== Разрешен вызов: ===
Только из задачи


=== Параметры функции: ===
Нет

=== Возвращаемое значение: ===
Нет

=== Пример вызова: ===
<code cpp>

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 ();
        /*...*/
    }
}
</code>





=== См. также ===

----
  * [[osa:ref:services:alphabetical|Алфавитный указатель]]
  * [[osa:ref:services:brieflist|Все сервисы]]
~~UP~~