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、实验结果

我要赚赏金
