title: FreeRTOS: How could xSemaphoreTakeFromISR wake any Task
body: <p>New to FreeRTOS and trying to understand it in detail.</p>
  <p>According to the manual here...:
  <a href="https://www.freertos.org/xSemaphoreTakeFromISR.html" rel="nofollow noreferrer">https://www.freertos.org/xSemaphoreTakeFromISR.html</a></p>
  <p>... it is possible that calling <strong>xSemaphoreTakeFromISR</strong> can cause waking up some Task from blocked state.</p>
  <p>How is this possible ?</p>
  <p>How could some task get to the blocked state by calling <strong>xSemaphoreGive</strong> in the first place ?</p>
  <p>I understand, that semaphores and mutex are implemented by Queues and <strong>xQueueSend</strong> has a parameter xTicksToWait (which set to value portMAX_DELAY can cause this function to get to blocked state).
  But all inner implementations of <strong>xSemaphoreGive</strong> set this parameter (xTicksToWait) to zero.</p>
  <p>Please explain, why should I check the parameter <strong>pxHigherPriorityTaskWoken</strong> in <strong>xSemaphoreTakeFromISR</strong>, and in which rare occasion it can be set to pdTRUE ?</p>