FreeRTOS队列管理

队列管理

核心功能

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。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值