FreeRTOS学习——FreeRTOS队列(下)之队列创建

本篇文章记录我学习FreeRTOS队列创建的知识。主要分享队列创建需要使用的初始化函数、队列复位函数。

需要进一步了解FreeRTOS队列的相关知识,读者可以参考以下文章:

FreeRTOS学习——FreeRTOS队列(上)_freertos 单元素队列-CSDN博客

FreeRTOS学习——FreeR TOS队列——队列创建(中)-CSDN博客

一、队列初始化函数

队列初始化函数prvInitialiseNewQueue()用于队列的初始化,此函数在文件queue.c中有定义,函数代码如下:

(1)、队列结构体中的成员变量pcHead指向队列存储区中首地址。
(2)、初始化队列结构体中的成员变量
uxQueueLength和uxItemSize,这两个成员变量保存队列的最大队列项目和每个队列项大小。
(3)、调用函数xQueueGenericReset()复位队列。PS:发一句牢骚,绕来绕去的,函数调了一个又一个的。

二、队列复位函数

队列初始化函数 prvInitialiseNewQueue()中调用了函数xQueueGenericReset()来复位队列,函数xQueueGenericReset()代码如下:

(1)、初始化队列中的相关成员变量。
(2)、根据参数xNewQueue确定要复位的队列是否是新创建的队列,如果不是的话还需要做其他的处理
(3)、初始化队列中的列表xTasksWaitingToSend和 xTasksWaitingToReceive。

至此,队列创建成功,比如我们创建一个有4个队列项,每个队列项长度为32个字节的队列TestQueue,创建成功的队列如下:

  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
要在 STM32 的 FreeRTOS创建和删除队列,需要使用以下 API: 1. `xQueueCreate()`:用于创建一个队列。该函数需要传入队列的长度和每个队列元素的大小,返回一个 `QueueHandle_t` 类型的队列句柄,用于后续操作。 2. `xQueueSend()`:用于向队列发送数据。该函数需要传入队列句柄、要发送的数据、阻塞时间(如果队列已满则等待的时间,单位为 tick),返回一个 `BaseType_t` 类型的值,表示是否发送成功。 3. `xQueueReceive()`:用于从队列接收数据。该函数需要传入队列句柄、接收数据的指针、阻塞时间,返回一个 `BaseType_t` 类型的值,表示是否接收成功。 4. `vQueueDelete()`:用于删除队列。该函数需要传入队列句柄。 以下是一个示例代码,用于创建一个长度为 10,每个元素大小为 4 字节的队列,并向其中发送和接收数据: ```c #include "FreeRTOS.h" #include "task.h" #include "queue.h" void task1(void *pvParameters) { QueueHandle_t xQueue; int data; // 创建队列 xQueue = xQueueCreate(10, sizeof(int)); // 向队列发送数据 for (int i = 0; i < 10; i++) { xQueueSend(xQueue, &i, portMAX_DELAY); } // 从队列接收数据 for (int i = 0; i < 10; i++) { xQueueReceive(xQueue, &data, portMAX_DELAY); printf("Received data: %d\n", data); } // 删除队列 vQueueDelete(xQueue); while (1) {} } int main(void) { xTaskCreate(task1, "Task 1", configMINIMAL_STACK_SIZE, NULL, 1, NULL); vTaskStartScheduler(); return 0; } ``` 该示例中,任务 `task1` 创建了一个长度为 10 的队列,并向其中发送了 10 个整数,然后接收了这些整数并打印出来,最后删除了队列

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小小_扫地僧

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值