queue.h
portBASE_TYPE xQueueSend( xQueueHandle xQueue, const void * pvItemToQueue, portTickType xTicksToWait );
これは xQueueGenericSend () を呼び出すマクロです。 xQueueSendToFront () と xQueueSendToBack () マクロを含まれなかった FreeRTOS.org バージョンとの互換性のために含まれます。 これは xQueueSendToBack () と同等です。
待ち行列の上にアイテムをポストしてください。
アイテムは、リファレンスではなく、コピーによって待ち行列に入れます。 この関数は割り込みサービスルーチンからの呼び出しは禁止です。 ISR
での使用は代わりにxQueueSendFromISR () を参照してください。xQueueSend()は、フル機能のタスク間通信APIの一部です。
代替の同等APIはxQueueAltSend()です。 両方のバージョンが同じパラメータを必要として、そして同じ値を返します。
パラメータ:
xQueue アイテムをポストする待ち行列へのハンドル。
pvItemToQueue 待ち行列の上に送られるアイテムへのポインタ。 待ち行列が作成したとき、待ち行列が持つアイテムの大きさは定義された、そのバイト数
pvItemToQueue から待ち行列格納エリアへコピーされる。
xTicksToWait もしスペースが満杯であったなら、タスクは待ち行列の利用可能なスペースが空くのを待つ、このブロック時間の最大数。
もし待ち行列が満杯、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. }