1、简介
消息队列常用于任务间的通信,或者是数据传递,以下将介绍消息队列的创建及使用
2、CubeMX配置
创建消息队列,队列大小为4,数据类型为uint16_t。同时RTOS已创建任务1和任务2,任务2用于消息队列发送
任务1处理消息队列接收
以下为cubemx自动创建的队列myQueue01
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、实验结果