首页 > 解决方案 > FreeRTOS:xSemaphoreTakeFromISR 如何唤醒任何任务

问题描述

FreeRTOS 新手,并试图详细了解它。

根据这里的手册......: https ://www.freertos.org/xSemaphoreTakeFromISR.html

...调用xSemaphoreTakeFromISR可能会导致从阻塞状态唤醒某些任务。

这怎么可能 ?

某些任务如何通过首先调用xSemaphoreGive进入阻塞状态?

我知道,信号量和互斥锁是由队列实现的,并且xQueueSend有一个参数 xTicksToWait (设置为值 portMAX_DELAY 会导致此函数进入阻塞状态)。但是xSemaphoreGive的所有内部实现都将此参数 (xTicksToWait) 设置为零。

请解释一下,为什么我要检查xSemaphoreTakeFromISR中的参数pxHigherPriorityTaskWoken ,在什么情况下可以将其设置为 pdTRUE ?

标签: semaphorefreertos

解决方案


推荐阅读