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);
相关推荐
m0_7393128710 天前
一文带你深度了解FreeRTOS——互斥信号量
单片机·freertos
朱MK12 天前
FreeRTOS学习——Systick中断、SVC中断、PendSV中断
学习·freertos·systick·svc·pendsv
朱MK20 天前
FreeRTOS学习——链表list
学习·链表·list·freertos
Weird0_1 个月前
华大HC32F460移植FreeRTOS
freertos·hc32
Projectsauron1 个月前
FreeRTOS 列表 List 源码解析
数据结构·list·嵌入式·freertos
heater4041 个月前
【STM32 FreeRTOS】内存管理
stm32·单片机·freertos
爱学电子的刻刻帝1 个月前
基于FreeRTOS的STM32多功能手表
stm32·单片机·嵌入式硬件·freertos·智能手表
heater4041 个月前
【STM32 FreeRTOS】信号量与互斥锁
stm32·单片机·freertos
我想学LINUX1 个月前
FreeRTOS基础入门——FreeRTOS内核控制函数(十)
嵌入式硬件·内核·嵌入式·api·freertos·实时操作系统
heater4042 个月前
【STM32 FreeRTOS】软件定时器
stm32·单片机·freertos