FreeRTOS 队列例程Demo

来源:互联网 发布:卖家如何查看淘宝客 编辑:程序博客网 时间:2024/05/24 06:37
//说明:通过队列API传输一个结构体数据

typedef struct AdData_STRUCT

{
     unsigned int xVal;
     unsigned int yVal;
     unsigned int zVal;
}AdData;

#define ADVAL_QUEUE_LEN      10 
QueueHandle_t AdValQueue; 


//task0  添加结构体数据到队列中去
void ADTask(void const * agrv)
{
     AdData AdVal;
     //创建一个队列
     AdValQueue = xQueueCreate( ADVAL_QUEUE_LEN, sizeof(struct AdData_STRUCT * ));
     if( AdValQueue == 0 )
     {
         // Queue was not created and must not be used.
         //创建队列失败
     }
     for(;;)
     {
          struct AdData_STRUCT *pTmp; 
         
          AdVal.xVal = 0;
          AdVal.yVal = 1;
          AdVal.zVal = 2;

          pTmp=&AdVal;//传递地址
          
          xQueueSend( AdValQueue, (void*)&pTmp, ( TickType_t ) 0);
          
         osDelay(1000);
       }
}
//task1 接收一个结构体中的数据
void StartDefaultTask(void const * argument)
{
       for(;;)
       {
          struct AdData_STRUCT *pTmp;

          if( AdValQueue != 0 )
          {
               // Receive a message on the created queue.  Block for 10 ticks if a
               // message is not immediately available.
               if( xQueueReceive( AdValQueue, &pTmp, ( TickType_t )10 ))
               {
                    printf("%u %u %u\r\n",pTmp->xVal,pTmp->yVal,pTmp->zVal);
               }
          }
          osDelay(1000);
       }
     }
}

参考:FreeRTOS中的Queue.h的Demo

0 0
原创粉丝点击