Компоненты и технологии • №2 '2011 компоненты



Pdf көрінісі
бет80/129
Дата28.09.2023
өлшемі4.1 Mb.
#478975
1   ...   76   77   78   79   80   81   82   83   ...   129
Kurniz

taskENTER_CRITICAL() — вход в критиче-
скую секцию и taskEXIT_CRITICAL() — вы-
ход из критической секции.
Переключение контекста при вытесняю-
щей многозадачности происходит по преры-
ванию (обычно от таймера), поэтому задача, 
которая вызвала taskENTER_CRITICAL(), бу-
дет оставаться в состоянии выполнения, пока 
не вызовет taskEXIT_CRITICAL().


134
КОМПОНЕНТЫ И ТЕХНОЛОГИИ • № 8 '2011
компоненты
микроконтроллеры
Участки кода, находящиеся внутри кри-
тической секции, должны быть как можно 
короче и выполняться как можно быстрее. 
Иначе использование критических сек-
ций негативно скажется на времени реакции 
системы на прерывания.
FreeRTOS допускает вложенный вызов ма-
кросов taskENTER_CRITICAL() и taskEXIT_
CRITICAL(), их реализация позволяет со-
хранять глубину вложенности. Выход про-
граммы из критической секции происходит, 
только если глубина вложенности станет 
равной нулю. Каждому вызову taskENTER_
CRITICAL() должен соответствовать вызов 
taskEXIT_CRITICAL().
Пример использования критической секции:
/* Чтобы доступ к порту PORTA не был прерван никакой другой 
задачей, входим в критическую секцию. */
taskENTER_CRITICAL();
/* Переключение на другую задачу не может произойти, когда 
выполняется код, окруженный вызовом taskENTER_CRITICAL()
и taskEXIT_CRITICAL().
Прерывания здесь могут происходить, только если микро-
контроллер допускает вложение прерываний. Прерывание 
выполнится, если его приоритет выше константы configMAX_
SYSCALL_INTERRUPT_PRIORITY. Однако такие прерывания не 
могут вызывать FreeRTOS API-функции. */
PORTA |= 0x01;
/* Неатомарная операция чтение/модификация/запись завершена. 
Сразу после этого выходим из критической секции. */
taskEXIT_CRITICAL();
Рассматривая пример выше, следует от-
метить, что если внутри критической сек-
ции произойдет прерывание с приоритетом 
выше configMAX_SYSCALL_INTERRUPT_
PRIORITY, которое, в свою очередь, обратит-
ся к порту PORTA, то принцип взаимного ис-
ключения доступа к ресурсу будет нарушен.


Достарыңызбен бөлісу:
1   ...   76   77   78   79   80   81   82   83   ...   129




©dereksiz.org 2024
әкімшілігінің қараңыз

    Басты бет