esp32 xQueueReceiveFromISR
时间: 2023-09-15 19:15:25 浏览: 36
`xQueueReceiveFromISR` 是一个 FreeRTOS API,用于在中断服务例程(ISR)中接收消息队列中的数据。它与 `xQueueReceive` 的作用类似,但是它可以安全地从 ISR 中执行。
函数原型如下:
```c
BaseType_t xQueueReceiveFromISR( QueueHandle_t xQueue,
void *pvBuffer,
BaseType_t *pxHigherPriorityTaskWoken );
```
其中,参数含义如下:
- `xQueue`:要接收数据的消息队列句柄。
- `pvBuffer`:指向接收缓冲区的指针,即接收到的数据将被存储在该缓冲区中。
- `pxHigherPriorityTaskWoken`:一个指向 BaseType_t 类型变量的指针,用于指示是否唤醒了比当前任务优先级更高的任务。如果传入的指针不为 NULL,且在调用 `xQueueReceiveFromISR` 后确实唤醒了更高优先级的任务,则该变量将被设置为 pdTRUE,否则为 pdFALSE。
需要注意的是,在 ISR 中调用 `xQueueReceiveFromISR` 函数时,必须将 `pxHigherPriorityTaskWoken` 参数初始化为 pdFALSE。此外,由于 ISR 中不能阻塞,因此如果消息队列中没有可用的数据,则 `xQueueReceiveFromISR` 函数会立即返回 pdFALSE。