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. В противном случае значение
Достарыңызбен бөлісу: |