freeRTOS:消息队列的简单使用

当使用 FreeRTOS 中的消息队列时,可以按照以下步骤进行操作:

首先,在任务之间创建一个消息队列。可以使用 xQueueCreate() 函数来创建消息队列,并指定队列的长度和每个消息的大小。例如,创建一个最大长度为 5,每个消息大小为 sizeof(uint32_t) 的消息队列:

cpp 复制代码
QueueHandle_t xQueue = xQueueCreate(5, sizeof(uint32_t));

接下来,在发送消息的任务中调用 xQueueSend() 函数将消息发送到消息队列中。该函数接受消息队列句柄、要发送的消息和等待发送的时间(如果队列已满)。例如,发送一个 uint32_t 类型的消息到队列中,并在队列满时等待 10 个 FreeRTOS 时间单位:

cpp 复制代码
uint32_t message = 123;
BaseType_t xStatus = xQueueSend(xQueue, &message, 10);
if (xStatus != pdPASS) {
    // 处理发送失败的情况
}

在接收消息的任务中,调用 xQueueReceive() 函数从消息队列中接收消息。该函数接受消息队列句柄、接收消息的缓冲区以及等待接收的时间(如果队列为空)。例如,接收一个 uint32_t 类型的消息,并在队列为空时等待 10 个 FreeRTOS 时间单位:

cpp 复制代码
uint32_t receivedMessage;
BaseType_t xStatus = xQueueReceive(xQueue, &receivedMessage, 10);
if (xStatus == pdPASS) {
    // 处理接收到的消息
} else {
    // 处理超时或接收失败的情况
}

可以使用 uxQueueMessagesWaiting() 函数获取当前在消息队列中的消息数量。例如,获取消息队列中的消息数量:

cpp 复制代码
unsigned portBASE_TYPE messagesWaiting = uxQueueMessagesWaiting(xQueue);

最后,在不再需要使用消息队列时,可以调用 vQueueDelete() 函数删除消息队列以释放资源。例如,删除消息队列:

cpp 复制代码
vQueueDelete(xQueue);
相关推荐
天吾cc4 天前
FreeRTOS 列表和列表项
freertos
qq_401700415 天前
RTOS址与值 void*任务传参的坑 走void*万能转的天坑
freertos
天吾cc6 天前
FreeRTOS任务创建和删除
freertos
天吾cc6 天前
FreeRTOS中断管理
freertos
天吾cc6 天前
FreeRTOS任务挂起和恢复
freertos
中文英文-我选中文10 天前
8.2 学习探索
freertos
qq_4017004115 天前
FreeRTOS 堆内存管理源码剖析:释放一块内存,空闲块数量反而变少了?
单片机·freertos
List<String> error_P17 天前
使用FreeRTOS搭建工程项目(一)
freertos
@嵌入式扫地僧25 天前
RTOS 面试实战:任务状态切换原理
freertos·rtos·时间片轮转·任务状态切换·抢占式调度
WWJA王文举1 个月前
Bootloader、App 和升级分区之间是什么关系?
stm32·freertos·嵌入式开发·在线升级