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



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

xTicksToWait не равен 0 или portMAX_
DELAY), то возврат значения pdFALSE 
говорит о том, что время тайм-аута ис-
текло, а семафор так и не стал доступен.
Выдача семафора
из обработчика прерывания
Все типы семафоров во FreeRTOS, исклю-
чая рекурсивные, могут быть выданы из тела 
обработчика прерывания при помощи API-
функции xSemaphoreGiveFromISR().
API-функция xSemaphoreGiveFromISR() 
представляет собой специальную версию 
API-функции xSemaphoreGive(), которая 
предназначена для вызова из тела обработчи-
ка прерывания.
П р о т о т и п A P I - ф у н к ц и и 
xSemaphoreGiveFromISR():
portBASE_TYPE xSemaphoreGiveFromISR( xSemaphoreHandle 
xSemaphore, portBASE_TYPE *pxHigherPriorityTaskWoken );
Назначение параметров и возвращаемое 
значение:
1. xSemaphore — дескриптор семафора, ко-
торый должен быть в явном виде создан 
до первого использования.
2. pxHigherPriorityTaskWoken — значение 
по адресу pxHigherPriorityTaskWoken 
у с т а н а в л и в а е т с а м а A P I - ф у н к ц и я 
xSemaphoreGiveFromISR() в зависимости 
от того, разблокирована ли более высоко-
приоритетная задача в результате выдачи 
семафора. Подробнее об этом будет сказа-
но далее.
3. Возвращаемое значение — возможны два 
варианта:
pdPASS — вызов xSemaphoreGiveFromISR() 
был успешным, семафор отдан.
pdFAIL — означает, что семафор в мо-
мент вызова xSemaphoreGiveFromISR() 
уже был доступен, то есть ранее отдан 
другой задачей или прерыванием.
Если после выдачи семафора в теле обра-
ботчика прерывания была разблокирована 
более высокоприоритетная задача, чем та, что 
была прервана обработчиком прерывания, 
то API-функция xSemaphoreGiveFromISR() 
установит *pxHigherPriorityTaskWoken рав-
ным pdTRUE. В противном случае значение 


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




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

    Басты бет