其他分享
首页 > 其他分享> > CMSIS_OS的消息队列(基于cubemx)

CMSIS_OS的消息队列(基于cubemx)

作者:互联网

一、队列管理函数
osMessageQDef(name, queue_sz, type) //参数二:队列size 参数三:成员size 作用:定义os_messageQ_def_##name结构体
osMessageQ(name) //宏函数 作用:定义os_messageQ_def_##name结构体的指针
osMessageQId osMessageCreate (const osMessageQDef_t *queue_def, osThreadId thread_id); //创建队列
osStatus osMessagePut (osMessageQId queue_id, uint32_t info, uint32_t millisec); //向队列中放入消息
osEvent osMessageGet (osMessageQId queue_id, uint32_t millisec); //从队列中获取消息

二、工程创建
利用Cubemx建立工程:
在这里插入图片描述
打开工程,可以找到一个已经创建好的队列,如下:

osMessageQId myQueue01Handle;
osMessageQDef(myQueue01, 16, uint16_t);
myQueue01Handle = osMessageCreate(osMessageQ(myQueue01), NULL);

接下来在任务三中向队列中放入消息,并在任务四中获取队列中的数:

void StartTask03(void const * argument)
{
  /* USER CODE BEGIN StartTask03 */
  /* Infinite loop */
	uint32_t buff[2];
	uint32_t buf[]={3,2,1,4};
	uint8_t put[]="";
  for(;;)
  {
    osDelay(1000);
		//队列
		
		osMessagePut(myQueue01Handle,buf[0],0xffff);
  }
  /* USER CODE END StartTask03 */
}

/* USER CODE BEGIN Header_StartTask04 */
/**
* @brief Function implementing the myTask04 thread.
* @param argument: Not used
* @retval None
*/
/* USER CODE END Header_StartTask04 */
void StartTask04(void const * argument)
{
  /* USER CODE BEGIN StartTask04 */
  /* Infinite loop */
	uint32_t getMQ;
  for(;;)
  {
    osDelay(1000);
		//队列
		getMQ=osMessageGet(myQueue01Handle,0xffff).value.v;
		printf("%d\r\n",getMQ);
		
  }
  /* USER CODE END StartTask04 */
}

三、运行结果
在这里插入图片描述
以上就是简单的验证。

标签:CODE,队列,CMSIS,StartTask04,USER,cubemx,void,OS,uint32
来源: https://blog.csdn.net/weixin_44007438/article/details/114376218