freeRTOS中文实用教程3--中断管理之中断服务例程中使用队列

1.前言

 消息队列不仅可以用于事件通信,还可以用来传递数据

2.实例说明消息队列的执行过程

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()的中断安全
版本,专门用于中断服务例程中

原文地址:https://www.cnblogs.com/smartjourneys/p/7932260.html