队列管理
核心功能
QueueHandle_t xQueueCreate( UBaseType_t uxQueueLength,
UBaseType_t uxItemSize );
简介: 创建一个新的队列并返回可以引用队列的句柄。
注: 配置SUPPORT动态分配必须在FreeRTOSConfig.h中将其设置为1,
或者未定义(在这种情况下,它将默认为1),才能使RTOSAPI函数可用。
参数:
uxQueueLength 队列在任何时候可以容纳的最大项目数。
uxItemSize 保持队列中每个项所需的大小(以字节为单位)。
返回:
如果成功地创建了队列,则返回创建队列的句柄。如果创建队列所需的内存无法分配然后返回NULL。
QueueHandle_t xQueueCreateStatic(
UBaseType_t uxQueueLength,
UBaseType_t uxItemSize,
uint8_t *pucQueueStorageBuffer,
StaticQueue_t *pxQueueBuffer );
简介: 创建一个新的队列并返回可以引用队列的句柄。
注: 结构超静置分配必须在FreeRTOSConfig.h中将此RTOSAPI函数设置为1才能使用。
参数:
uxQueueLength 队列在任何时候可以容纳的最大项目数。
uxItemSize 保持队列中每个项所需的大小(以字节为单位)。
PucQueueStorageBuffer 如果uxItemSize不是零,那么pucQueueStorageBuffer必须指向一个uint 8_t数组,
该数组至少足够大,可以在任何时候容纳队列中的最大项数--即(uxQueueLength*uxItemSize)字节。
如果uxItemSize为零,则pucQueueStorageBuffer可以为空。
pxQueueBuffer 必须指向StaticQueue_t类型的变量,该变量将用于保存队列的数据结构。
返回:
如果成功地创建了队列,则返回创建队列的句柄。如果pxQueueBuffer为NULL,则返回NULL。
BaseType_t xQueueSend(
QueueHandle_t xQueue,
const void * pvItemToQueue,
TickType_t xTicksToWait
);
简介: 将一项投递到队列的后面。
注: 这是一个调用xQueueGenericSend()的宏。
它是为了与不包括xQueueSendToFront()和xQueueSendToBack()宏的FreeRTOS版本的向后兼容性而包含的。它相当于xQueueSendToBack()。
参数:
xQueue 要在其上发布项的队列的句柄。
pvItemToQueue 指向要放置在队列中的项的指针。
xTicksToWait 任务应该阻止等待队列上可用的空间的最大时间。
如果包含vTaskSuspend设置为‘1’,然后将块时间指定为portMAX_Delay将导致任务无限期地阻塞(没有超时)。
返回:如果项目已成功发布,则为errQUEUE_FULL。
BaseType_t xQueueSendFromISR
(
QueueHandle_t xQueue,
const void *pvItemToQueue,
BaseType_t *pxHigherPriorityTaskWoken
);
简介: 功能为将一项投递到队列的后面(ISR中使用)。
注: 这是一个调用xQueueGenericSendFromISR()的宏。
它是为了与不包括xQueueSendToBackFromISR()和xQueueSendToFrontFromISR()宏的FreeRTOS版本向后兼容的。
参数:
xQueue 要在其上发布项的队列的句柄。
pvItemToQueue 指向要放置在队列中的项的指针。
PxHigherPriorityTaskWoken 如果发送到队列导致任务解除阻塞,
如果xQueueSendFromISR()将此值设置为pdTRUE,则应该在中断退出之前请求上下文切换。
返回:如果数据已成功发送到队列,则为errQUEUE_FULL。
BaseType_t xQueueReceive(
QueueHandle_t xQueue,
void *pvBuffer,
TickType_t xTicksToWait
);
简介: 从队列接收项。
注: 该项目是通过副本收到的,因此必须提供足够大小的缓冲区。在创建队列时定义了复制到缓冲区的字节数。
参数:
xQueue 要从其中接收项目的队列的句柄。
pvBuffer 指向将接收到的项复制到其中的缓冲区的指针。
xTicksToWait 如果队列在调用时为空,则任务应阻止等待要接收的项的最大时间量。
返回: 如果从队列成功地接收到项,则为pdFALSE。
BaseType_t xQueueReceiveFromISR
(
QueueHandle_t xQueue,
void *pvBuffer,
BaseType_t *pxHigherPriorityTaskWoken
);
简介: 从队列接收项。在中断服务例程中使用此功能是安全的。
参数:
xQueue 要从其中接收项目的队列的句柄。
pvBuffer 指向将接收到的项复制到其中的缓冲区的指针。
PxHigherPriorityTaskWoken 任务可能会被阻塞,等待队列中可用的空间。
返回:
如果从队列成功地接收到项,则为pdFALSE。
辅助功能
UBaseType_t uxQueueMessagesWaiting( QueueHandle_t xQueue );
简介: 返回存储在队列中的消息数。
参数: xQueue 查询队列的句柄。
返回: 队列中可用的消息数。
UBaseType_t uxQueueSpacesAvailable( QueueHandle_t xQueue );
简介: 返回队列中的空闲空间数。
参数: xQueue 查询队列的句柄。
返回: 队列中可用的空闲空间数。
void vQueueDelete( QueueHandle_t xQueue );
简介: 删除队列-释放为存储放置在队列中的项而分配的所有内存。
参数: xQueue 要删除的队列的句柄。
BaseType_t xQueueReset( QueueHandle_t xQueue );
简介: 将队列重置为原始空状态。
参数: xQueue 正在重置的队列的句柄。
返回: 因为FreeRTOSV7.2.0xQueueReset()总是返回pdPASS。
BaseType_t xQueueIsQueueEmptyFromISR( const QueueHandle_t xQueue );
简介: 查询队列以确定队列是否为空。此函数只应在ISR中使用。
参数: 正在查询的队列的句柄。
返回: 如果队列不是空的,则为pdFALSE;如果队列为空,则为pdTRUE。
BaseType_t xQueueIsQueueFullFromISR( const QueueHandle_t xQueue );
简介: 查询队列以确定队列是否已满。此函数只应在ISR中使用。
参数: 正在查询的队列的句柄。
返回: 如果队列不满,则为pdFALSE,如果队列已满,则为pdTRUE。