书城网站开发,电影资源分享网站怎么做的,wordpress最新版爆破,绍兴网站建设价格目录 四、队列2.1 概念2.2 创建队列2.3 写队列2.4 读队列2.5 队列集#xff08;可跳过#xff09; 四、队列 该部分在上份代码基础上修改得来#xff0c;代码下载链接#xff1a; https://wwzr.lanzout.com/iBNAS1l75bvc 密码:7xy2 该代码尽量做到最简#xff0c;不添加多… 目录 四、队列2.1 概念2.2 创建队列2.3 写队列2.4 读队列2.5 队列集可跳过 四、队列 该部分在上份代码基础上修改得来代码下载链接 https://wwzr.lanzout.com/iBNAS1l75bvc 密码:7xy2 该代码尽量做到最简不添加多余的、不规范的代码。 内容主要包括
1队列的概念、创建、写队列、读队列
2队列集可跳过
最终实现效果
1任务1写队列任务2读队列。
2任务1、任务2 写队列并使用队列集任务3读队列集可跳过 2.1 概念
队列是一种用于在任务之间传递数据的强大机制。队列提供了一种安全且高效的方式允许一个任务将数据发送到队列而另一个任务则从队列中接收数据。
使用场景
任务间通信 通过队列一个任务可以将数据发送给另一个任务实现任务间的通信。生产者-消费者模型 队列常用于生产者任务生成数据然后通过队列传递给消费者任务进行处理。实现有限缓冲区 队列可以用于实现有限的缓冲区限制生产者和消费者的速度。
2.2 创建队列
使用xQueueCreate函数来创建一个队列。函数原型如下
QueueHandle_t xQueueCreate(UBaseType_t uxQueueLength, UBaseType_t uxItemSize);
/*
uxQueueLength队列的长度表示队列中可以存储的元素个数。
uxItemSize每个队列元素的大小以字节为单位。
*/示例
// 定义队列句柄
QueueHandle_t g_xQueueTest;// 创建队列大小为5个int元素
g_xQueueTest xQueueCreate(5, sizeof(int));这将创建一个能够存储5个int类型元素的队列。
2.3 写队列
使用xQueueSend函数向队列发送数据。函数原型如下
BaseType_t xQueueSend(QueueHandle_t xQueue, const void *pvItemToQueue, TickType_t xTicksToWait);
/*
xQueue目标队列的句柄。
pvItemToQueue指向要发送的数据的指针。
xTicksToWait发送超时时间若为0则一直等待若为portMAX_DELAY则无限等待其他情况表示等待的时钟节拍数。
*/示例
int data 42;
// 发送数据到队列,如果队列已满则阻塞
xQueueSend(g_xQueueTest, data, portMAX_DELAY);2.4 读队列
使用xQueueReceive函数从队列接收数据。函数原型如下
BaseType_t xQueueReceive(QueueHandle_t xQueue, void *pvBuffer, TickType_t xTicksToWait);
/*
xQueue目标队列的句柄。
pvBuffer接收数据的缓冲区指针。
xTicksToWait接收超时时间若为0则立即返回若为portMAX_DELAY则无限等待其他情况表示等待的时钟节拍数。
*/示例
int receivedData;
// 从队列接收数据如果为空则阻塞
xQueueReceive(g_xQueueTest, receivedData, portMAX_DELAY);实例
创建队列、创建任务12 任务1写队列如果满了就阻塞。
任务2读队列如果空了就阻塞。
现象是代码设置的是任务1 写队列较快所以现象是任务1 的cnt很快的加到2020为我们创建的队列最大长度然后阻塞等任务2 去读队列任务2每次读一个数据队列就变为非空任务1就被唤醒cnt就。 2.5 队列集可跳过
队列集需要改FreeRTOSConfig.h