1.前言
消息队列不仅可以用于事件通信,还可以用来传递数据
2.实例说明消息队列的执行过程
![](https://i-blog.csdnimg.cn/blog_migrate/8cf6bff4fd0e883eec2edae065867d05.png)
3.主要API
API名称 | 说明 | 参数 | 返回值 |
xQueueSendFromISR()完全等同于 xQueueSendToBackFromISR()
| | xQueue 目标队列的句柄。这个句柄即是调用 xQueueCreate() 创建该队列时的返回值。 pvItemToQueue 发送数据的指针。其指向将要复制到目标队列中的数据 单元。由于在创建队列时设置了队列中数据单元的长度,所以会从该指针指向的空间复制对应长度的数据到队列的 存储区域。
pxHigherPriorityTaskWoken 对某个队列而言,可能有不止一个任务处于阻塞态在等待其数据有效。调用 xQueueSendToFrontFromISR()或 xQueueSendToBackFromISR()会使得队列数据变为有效,所以会让其中一个等待任务切出阻塞态。如果调用这两个 API 函数使得一个任务解除阻塞,并且这个任务的优先级高于当前任务(也就是被中断的任务),那 么 API 会在函数内部将*pxHigherPriorityTaskWoken 设 为 pdTRUE。如果这两个 API 函数将此值设为 pdTRUE,则在中断退 出前应当进行一次上下文切换。这样才能保证中断直接 返回到就绪态任务中优先级最高的任务中。
| 1. pdPASS 返回 pdPASS 只会有一种情况, 那就是数据被成功发送 到队列中。 2. errQUEUE_FULL 如 果 由 于 队 列 已 满 而 无 法 将 数 据 写 入 , 则 将 返 回 errQUEUE_FULL
|
xQueueReceiveFromISR()
| | | |
注:xQueueSendToFrontFromISR(), xQueueSendToBackFromISR()与 xQueueReceiveFromISR()
分别是 xQueueSendToFront(), xQueueSendToBack()与 xQueueReceive()的中断安全
版本,专门用于中断服务例程中