这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » FreeRTOS消息队列使用

共1条 1/1 1 跳转至

FreeRTOS消息队列使用

工程师
2025-05-18 23:44:15     打赏

1、简介

消息队列常用于任务间的通信,或者是数据传递,以下将介绍消息队列的创建及使用

2CubeMX配置

创建消息队列,队列大小为4,数据类型为uint16_t。同时RTOS已创建任务1和任务2,任务2用于消息队列发送

任务1处理消息队列接收

image.png

以下为cubemx自动创建的队列myQueue01

image.png

3、队列收发测试

 消息队列接收任务

void StartDefaultTask(void *argument)
{
  /* USER CODE BEGIN StartDefaultTask */
	osStatus_t xReturn = osOK;
	uint16_t r_queue; /* 接收消息变量 */
  /* Infinite loop */
  for(;;)
  {
    osDelay(200);
   xReturn = osMessageQueueGet( myQueue01Handle, /* 消息队列句柄 */
                           &r_queue,		/* 消息内容存放地址 */
                           0,             
                           osWaitForever); 
   if(osOK == xReturn)
      printf("本次接收到的数据为0x%X\n",r_queue);
   else
      printf("数据接收出错,错误代码0x%lx\n",xReturn);
  }
  /* USER CODE END StartDefaultTask */
}

 消息队列发送任务

/* USER CODE END Header_StartTask02 */
void StartTask02(void *argument)
{
  /* USER CODE BEGIN StartTask02 */
	osStatus_t xReturn = osOK;
	int16_t task2_data=0xc001;
  /* Infinite loop */
  for(;;)
  {
		task2_data++;
		xReturn = osMessageQueuePut( myQueue01Handle, /* 消息队列句柄*/
                        &task2_data,			     /* 发送消息内容 */
                        0,                  
                        0 ); 
    osDelay(500);
		
  }
  /* USER CODE END StartTask02 */
}

4、实验结果

1747583607562.png





关键词: 消息队列    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]