uc-sdk
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
xQueueSend

queue. h

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

This is a macro that calls xQueueGenericSend().

Post an item to the front of a queue. The item is queued by copy, not by reference. This function must not be called from an interrupt service routine. See xQueueSendFromISR () for an alternative which may be used in an ISR.

Parameters
xQueueThe handle to the queue on which the item is to be posted.
pvItemToQueueA pointer to the item that is to be placed on the queue. The size of the items the queue will hold was defined when the queue was created, so this many bytes will be copied from pvItemToQueue into the queue storage area.
xTicksToWaitThe maximum amount of time the task should block waiting for space to become available on the queue, should it already be full. The call will return immediately if this is set to 0 and the queue is full. The time is defined in tick periods so the constant portTICK_RATE_MS should be used to convert to real time if this is required.
Returns
pdTRUE if the item was successfully posted, otherwise errQUEUE_FULL.

Example usage:

 struct AMessage
 {
    char ucMessageID;
    char ucData[ 20 ];
 } xMessage;
 unsigned long 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 long ) );
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( xQueueSendToFront( 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;
        xQueueSendToFront( xQueue2, ( void * ) &pxMessage, ( portTickType ) 0 );
    }
... Rest of task code.
 }
 

queue. h

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

This is a macro that calls xQueueGenericSend().

Post an item to the back of a queue. The item is queued by copy, not by reference. This function must not be called from an interrupt service routine. See xQueueSendFromISR () for an alternative which may be used in an ISR.

Parameters
xQueueThe handle to the queue on which the item is to be posted.
pvItemToQueueA pointer to the item that is to be placed on the queue. The size of the items the queue will hold was defined when the queue was created, so this many bytes will be copied from pvItemToQueue into the queue storage area.
xTicksToWaitThe maximum amount of time the task should block waiting for space to become available on the queue, should it already be full. The call will return immediately if this is set to 0 and the queue is full. The time is defined in tick periods so the constant portTICK_RATE_MS should be used to convert to real time if this is required.
Returns
pdTRUE if the item was successfully posted, otherwise errQUEUE_FULL.

Example usage:

 struct AMessage
 {
    char ucMessageID;
    char ucData[ 20 ];
 } xMessage;
 unsigned long 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 long ) );
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( xQueueSendToBack( 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;
        xQueueSendToBack( xQueue2, ( void * ) &pxMessage, ( portTickType ) 0 );
    }
... Rest of task code.
 }
 

queue. h

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

This is a macro that calls xQueueGenericSend(). It is included for backward compatibility with versions of FreeRTOS.org that did not include the xQueueSendToFront() and xQueueSendToBack() macros. It is equivalent to xQueueSendToBack().

Post an item on a queue. The item is queued by copy, not by reference. This function must not be called from an interrupt service routine. See xQueueSendFromISR () for an alternative which may be used in an ISR.

Parameters
xQueueThe handle to the queue on which the item is to be posted.
pvItemToQueueA pointer to the item that is to be placed on the queue. The size of the items the queue will hold was defined when the queue was created, so this many bytes will be copied from pvItemToQueue into the queue storage area.
xTicksToWaitThe maximum amount of time the task should block waiting for space to become available on the queue, should it already be full. The call will return immediately if this is set to 0 and the queue is full. The time is defined in tick periods so the constant portTICK_RATE_MS should be used to convert to real time if this is required.
Returns
pdTRUE if the item was successfully posted, otherwise errQUEUE_FULL.

Example usage:

 struct AMessage
 {
    char ucMessageID;
    char ucData[ 20 ];
 } xMessage;
 unsigned long 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 long ) );
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.
 }
 

queue. h

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

It is preferred that the macros xQueueSend(), xQueueSendToFront() and xQueueSendToBack() are used in place of calling this function directly.

Post an item on a queue. The item is queued by copy, not by reference. This function must not be called from an interrupt service routine. See xQueueSendFromISR () for an alternative which may be used in an ISR.

Parameters
xQueueThe handle to the queue on which the item is to be posted.
pvItemToQueueA pointer to the item that is to be placed on the queue. The size of the items the queue will hold was defined when the queue was created, so this many bytes will be copied from pvItemToQueue into the queue storage area.
xTicksToWaitThe maximum amount of time the task should block waiting for space to become available on the queue, should it already be full. The call will return immediately if this is set to 0 and the queue is full. The time is defined in tick periods so the constant portTICK_RATE_MS should be used to convert to real time if this is required.
xCopyPositionCan take the value queueSEND_TO_BACK to place the item at the back of the queue, or queueSEND_TO_FRONT to place the item at the front of the queue (for high priority messages).
Returns
pdTRUE if the item was successfully posted, otherwise errQUEUE_FULL.

Example usage:

 struct AMessage
 {
    char ucMessageID;
    char ucData[ 20 ];
 } xMessage;
 unsigned long 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 long ) );
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( xQueueGenericSend( xQueue1, ( void * ) &ulVar, ( portTickType ) 10, queueSEND_TO_BACK ) != 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;
        xQueueGenericSend( xQueue2, ( void * ) &pxMessage, ( portTickType ) 0, queueSEND_TO_BACK );
    }
... Rest of task code.
 }