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


Take — эквивалентен функции wait()



Pdf көрінісі
бет60/129
Дата28.09.2023
өлшемі4.1 Mb.
#478975
1   ...   56   57   58   59   60   61   62   63   ...   129
Kurniz

Take — эквивалентен функции wait(), то есть 
захват двоичного семафора, и Give — экви-
валентен функции signal(), то есть означает 
выдачу семафора.
На рис. 2 показано, как обработчик пре-
рывания отдает семафор, вне зависимости 
от того, был ли он захвачен до этого. Задача-
обработчик в свою очередь захватывает сема-
фор, но никогда не отдает его обратно. Такой 
сценарий еще раз подчеркивает сходство ра-
боты двоичного семафора с очередью. Стоит 
отметить, что одна из частых причин ошибок 
в программе, связанных с семафорами, заклю-
чается в том, что в других сценариях задача 
после захвата семафора должна его отдать.
работа с двоичными семафорами
Во FreeRTOS механизм семафоров основан 
на механизме очередей. По большому счету 
API-функции для работы с семафорами пред-
ставляют собой макросы — «обертки» других 
API-функций для работы с очередями. Здесь 
и далее для простоты будем называть их API-
функциями для работы с семафорами.
рис. 1. Отложенная обработка прерывания с использованием двоичного семафора
рис. 2. Синхронизация прерывания и задачи-обработчика с помощью двоичного семафора
а
б
в
г
д


25
КОМПОНЕНТЫ И ТЕХНОЛОГИИ • № 7 '2011
www.kite.ru
микроконтроллеры
Все API-функции работы с семафора-
ми сосредоточены в заголовочном файле 
/Source/Include/semphr.h, поэтому следует 
убедиться, что этот файл находится в списке 
включенных (#include) в проект.
Доступ ко всем семафорам во FreeRTOS 
(а не только к двоичным) осуществляется 
с помощью дескриптора (идентификато-
ра) — переменной типа xSemaphoreHandle.


Достарыңызбен бөлісу:
1   ...   56   57   58   59   60   61   62   63   ...   129




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

    Басты бет