anka120 发表于 2018-5-27 09:57:42

Freertos 队列项字节长度问题

最近刚学Freertos, 看到可以获取Freertos队列长度,但是队列项里的字节长度是否可以获取?

因为项目中队列中会存放不定长字节,需要对队列中的数据分拣,每次分拣的时候遍历所有队列项长度,有点浪费,请教了

feixiang20 发表于 2018-5-28 03:15:45

本帖最后由 feixiang20 于 2018-5-28 03:16 编辑

所读取的数据长度是创建队列的时候所设定的每个队列项目的长度
一个使用结构体例子:

struct AMessage
{
      portCHAR ucMessageID;
      portCHAR ucData[ 20 ];
}xMessage;
unsigned portLONG ulVar = 10UL;
void vATask( voidvoid *pvParameters )
{
   xQueueHandle xQueue1, xQueue2;
   struct AMessage *pxMessage;
   /*创建一个队列,队列能包含10个unsigned long类型的值。*/
   xQueue1 = xQueueCreate( 10, sizeof( unsigned portLONG ) );
   /* 创建一个队列,队列能包含10个 Amessage结构体指针类型的值。
       这样可以通过传递指针变量来包含大量数据。*/
   xQueue2 = xQueueCreate( 10, sizeof( struct AMessage * ) );
   // ...
   if( xQueue1 != 0 )
   {
          /*1个unsigned long型数据入队.如果需要等待队列空间变的有效,
         会最多等待10个系统节拍周期*/
          if( xQueueSend( xQueue1, ( voidvoid * ) &ulVar, ( portTickType ) 10 ) !=pdPASS )
          {
               /*消息入队失败*/
          }
    }
    if( xQueue2 != 0 )
    {
         /* 发送一个指向结构体Amessage的对象,如果队列满也不等待 */
         pxMessage = & xMessage;
         xQueueSend( xQueue2, ( voidvoid * ) &pxMessage, ( portTickType ) 0 );
    }
         //... 任务其余代码.
}

anka120 发表于 2018-5-28 15:14:33

feixiang20 发表于 2018-5-28 03:15
所读取的数据长度是创建队列的时候所设定的每个队列项目的长度
一个使用结构体例子:



谢谢,
这是,在队列里发送结构体示例吧
页: [1]
查看完整版本: Freertos 队列项字节长度问题