007_FreeROTS队列

(一)目的:进程间的通信

(二)队列创建

  1. 动态创建队列,函数 xQueueCreate()
QueueHandle_t xQueueCreate( UBaseType_t uxQueueLength,
                UBaseType_t uxItemSize)

参数:
uxQueueLength: 要创建的队列的队列长度,这里是队列的项目数。
uxItemSize: 队列中每个项目(消息)的长度,单位为字节
返回值:
其他值:  队列创捷成功以后返回的队列句柄!
NULL: 队列创建失败
  1. 静态创建队列, 函数 xQueueCreateStatic()
QueueHandle_t xQueueCreateStatic( UBaseType_t uxQueueLength,
                     UBaseType_t uxItemSize,
                     uint8_t *  pucQueueStorageBuffer,
                     StaticQueue_t *  pxQueueBuffer)

参数:
uxQueueLength: 要创建的队列的队列长度,这里是队列的项目数。
uxItemSize: 队列中每个项目(消息)的长度,单位为字节
pucQueueStorage: 指向队列项目的存储区,也就是消息的存储区,这个存储区需要用户自
行分配。此参数必须指向一个 uint8_t 类型的数组。这个存储区要大于等
于(uxQueueLength * uxItemsSize)字节。
pxQueueBuffer: 此参数指向一个 StaticQueue_t 类型的变量,用来保存队列结构体。
返回值:
其他值: 队列创捷成功以后的队列句柄!
NULL: 队列创建失败。
  1. 队列类型
队列类型,由于 FreeRTOS 中的信号量等也是通过队列来实现的,创建信号
量的函数最终也是使用此函数的,因此在创建的时候需要指定此队列的用途,
也就是队列类型,一共有六种类型:
queueQUEUE_TYPE_BASE 普通的消息队列
queueQUEUE_TYPE_SET 队列集
queueQUEUE_TYPE_MUTEX  互斥信号量
queueQUEUE_TYPE_COUNTING_SEMAPHORE 计数型信号量
queueQUEUE_TYPE_BINARY_SEMAPHORE 二值信号量
queueQUEUE_TYPE_RECURSIVE_MUTEX  递归互斥信号量
函 数 xQueueCreate() 创 建 队 列 的 时 候 此 参 数 默 认 选 择 的 就 是
queueQUEUE_TYPE_BASE。

动态创建函数:xQueueCreate()本质是 xQueueGenericCreate()函数
静态创建函数:xQueueCreateStatic()本质是 xQueueGenericCreateStatic()函数

(三)队列初始化,函数prvInitialiseNewQueue()

static void prvInitialiseNewQueue(   const UBaseType_t uxQueueLength, //队列长度
                      const UBaseType_t uxItemSize, //队列项目长度
                      uint8_t *  pucQueueStorage, //队列项目存储区
                      const uint8_t ucQueueType, //队列类型
                      Queue_t * pxNewQueue )  //队列结构体

(3.3)后面的具体查看freertos手册看参数

(四)向队列发送消息
在这里插入图片描述
(五)从队列 读取
在这里插入图片描述
(六)使用示例

、1. 定义

#define MESSAGE_Q_NUM 4 //发送数据的消息队列的数量 (2)
QueueHandle_t Message_Queue; //信息队列句柄
  1. 创建消息 Message_Queue,队列项长度是串口接收缓冲区长度
Message_Queue=xQueueCreate(MESSAGE_Q_NUM,USART_REC_LEN);  
  1. 终端中向队列中发送数据
xQueueSendFromISR(Message_Queue,USART_RX_BUF,&xHigherPriorityTaskWoken);
  1. 请求消息 Message_Queue
err=xQueueReceiveFromISR(Message_Queue,buffer,&xTaskWokenByReceive)

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值