一、队列管理函数
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 */
}
三、运行结果
以上就是简单的验证。