xQueueSendToFront

[Queue Management]

FreeRTOS.org V4.5.0 以降利用可能

queue.h

portBASE_TYPE xQueueSendToToFront( xQueueHandle xQueue, const void * pvItemToQueue, portTickType xTicksToWait );

これは xQueueGenericSend () を呼び出すマクロです。

待ち行列の前部にアイテムをポストする。
アイテムは、リファレンスによってではなく、コピーによって待ち行列に入れます。この関数は割り込みサービスルーチンからの呼び出しは禁止です。ISR で使用にはxQueueSendToFrontFromISR ()を参照してください。
xQueueSendToFront()は、フル機能のタスク間通信APIの一部です。 代替の同等のAPIはxQueueAltSendToFront()です。両方のバージョンが同じパラメータを必要として、そして同じ値を返します。

パラメータ:
xQueue   アイテムがポストされるべき待ち行列へのハンドル。

pvItemToQueue   待ち行列の上に置かれるはずである項目へのポインタ。
待ち行列の上に置くべきアイテムへのポインタ。 待ち行列が作成したとき、待ち行列が持つアイテムの大きさは定義された、そのバイト数 pvItemToQueue から待ち行列格納エリアへコピーされる。

xTicksToWait   もしスペースが満杯であったなら、タスクは待ち行列の利用可能なスペースが空くのを待つ、このブロック時間の最大数。もしこれが0にセットされるなら、コールはすぐに戻るでしょう。時間はチック(システムクロック)ピリオドで定義されます、定数portTICK_RATE_MS は必要ならチック数をリアルタイムに変換するのに使用する。もし INCLUDE_vTaskSuspend が「1」にセットするなら、ブロックタイムを portMAX_DELAY として明示することでタスクを(タイムアウトなしで)いつまでもブロックします。

リターン: もしアイテムのポストが成功にであったならpdTRUE戻る、さもなければerrQUEUE_FULL が戻る

使用例:

struct AMessage 
{ 
        portCHAR ucMessageID; 
        portCHAR ucData[ 20 ]; 
} xMessage;

unsigned portLONG ulVar = 10UL;

void vATask( void *pvParameters ) {
        xQueueHandle xQueue1, xQueue2; 
        struct AMessage *pxMessage;

        // Create a queue capable of containing 10 unsigned long values. 
        xQueue1 = xQueueCreate( 10, sizeof( unsigned portLONG ) );

        // Create a queue capable of containing 10 pointers to AMessage structures. 
        // These should be passed by pointer as they contain a lot of data. 
        xQueue2 = xQueueCreate( 10, sizeof( struct AMessage * ) );

        // ...

        if( xQueue1 != 0 ) { 
                // Send an unsigned long. Wait for 10 ticks for space to become 
                // available if necessary. 
                if( xQueueSend( xQueue1, ( void * ) &ulVar, ( portTickType ) 10 ) != pdPASS ) { 
                        // Failed to post the message, even after 10 ticks. 
                } 
        }

        if( xQueue2 != 0 ) { 
                // Send a pointer to a struct AMessage object. Don't block if the 
                // queue is already full. 
                pxMessage = & xMessage; 
                xQueueSend( xQueue2, ( void * ) &pxMessage, ( portTickType ) 0 ); 
        }

        // ... Rest of task code. 
}