RTOS Message Queue示例代码
时间: 2023-07-02 20:22:01 浏览: 53
以下是一个基于FreeRTOS的RTOS Message Queue示例代码:
```
#include "FreeRTOS.h"
#include "task.h"
#include "queue.h"
QueueHandle_t xQueue; // 定义一个消息队列句柄
void vSenderTask(void *pvParameters)
{
const TickType_t xDelay = pdMS_TO_TICKS(1000); // 定义发送任务的延迟时间为1000毫秒
const char *pcMessage = "Hello, world!"; // 定义要发送的消息内容
while (1)
{
xQueueSend(xQueue, pcMessage, 0); // 向消息队列发送消息
vTaskDelay(xDelay); // 延迟一段时间
}
}
void vReceiverTask(void *pvParameters)
{
char cReceivedMessage[20]; // 定义一个用于接收消息的缓冲区
while (1)
{
xQueueReceive(xQueue, cReceivedMessage, portMAX_DELAY); // 从消息队列接收消息
printf("Received message: %s\n", cReceivedMessage); // 输出接收到的消息
}
}
int main(void)
{
xQueue = xQueueCreate(5, sizeof(char) * 20); // 创建一个可以容纳5个消息,每个消息大小为20字节的消息队列
xTaskCreate(vSenderTask, "Sender", configMINIMAL_STACK_SIZE, NULL, 1, NULL); // 创建一个发送任务
xTaskCreate(vReceiverTask, "Receiver", configMINIMAL_STACK_SIZE, NULL, 2, NULL); // 创建一个接收任务
vTaskStartScheduler(); // 启动RTOS调度器
return 0;
}
```
以上代码中,vSenderTask任务会每隔一段时间向消息队列发送一条消息,而vReceiverTask任务会不断地从消息队列中读取消息并输出到控制台上。通过创建多个发送和接收任务,可以实现更复杂的任务协作和通信。