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建立工程:
CMSIS_OS的消息队列(基于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 */
}

三、运行结果
CMSIS_OS的消息队列(基于cubemx)
以上就是简单的验证。

上一篇:嵌入式新闻早班车-第28期


下一篇:TinyML-TVM如何驯服TinyML