#semaphore #freertos
Вопрос:
Новичок в FreeRTOS и пытается понять это в деталях.
Согласно инструкции здесь…: https://www.freertos.org/xSemaphoreTakeFromISR.html
… возможно, что вызов xSemaphoreTakeFromISR может привести к выходу какой-либо задачи из заблокированного состояния.
Как это возможно ?
Как какая-то задача могла попасть в заблокированное состояние, вызвав xSemaphoreGive в первую очередь ?
Я понимаю, что семафоры и мьютекс реализуются очередями, и у xQueueSend есть параметр xTicksToWait (значение которого равно portMAX_DELAY может привести к тому, что эта функция перейдет в заблокированное состояние). Но все внутренние реализации xSemaphoreGive устанавливают этот параметр (xTicksToWait) равным нулю.
Пожалуйста, объясните, почему я должен проверять параметр pxHigherPriorityTaskWoken в xSemaphoreTakeFromISR и в каких редких случаях он может быть установлен в значение pdTRUE ?
Комментарии:
1. Я думаю, что API может быть таким, как есть, из-за соображений согласованности (в отношении функций FromISR). Я также думаю, что вы правы в том, что сигнализация семафора не может блокировать задачу, следовательно, ее использование не может разблокировать ее. Здесь есть больше шансов получить ответ forums.freertos.org