⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 queue.h

📁 关于 modbus tcp 的一些源代码
💻 H
📖 第 1 页 / 共 2 页
字号:
/*

	FreeRTOS.org V4.1.1 - Copyright (C) 2003-2006 Richard Barry.



	This file is part of the FreeRTOS.org distribution.



	FreeRTOS.org is free software; you can redistribute it and/or modify

	it under the terms of the GNU General Public License as published by

	the Free Software Foundation; either version 2 of the License, or

	(at your option) any later version.



	FreeRTOS.org is distributed in the hope that it will be useful,

	but WITHOUT ANY WARRANTY; without even the implied warranty of

	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the

	GNU General Public License for more details.



	You should have received a copy of the GNU General Public License

	along with FreeRTOS.org; if not, write to the Free Software

	Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA



	A special exception to the GPL can be applied should you wish to distribute

	a combined work that includes FreeRTOS.org, without being obliged to provide

	the source code for any proprietary components.  See the licensing section 

	of http://www.FreeRTOS.org for full details of how and when the exception

	can be applied.



	***************************************************************************

	See http://www.FreeRTOS.org for documentation, latest information, license 

	and contact details.  Please ensure to read the configuration and relevant 

	port sections of the online documentation.

	***************************************************************************

*/



#ifndef QUEUE_H

#define QUEUE_H



typedef void * xQueueHandle;



/**

 * queue. h

 * <pre>

 xQueueHandle xQueueCreate( 

                              unsigned portBASE_TYPE uxQueueLength, 

                              unsigned portBASE_TYPE uxItemSize 

                          );

 * </pre>

 *

 * Creates a new queue instance.  This allocates the storage required by the

 * new queue and returns a handle for the queue.

 *

 * @param uxQueueLength The maximum number of items that the queue can contain.

 *

 * @param uxItemSize The number of bytes each item in the queue will require.  

 * Items are queued by copy, not by reference, so this is the number of bytes

 * that will be copied for each posted item.  Each item on the queue must be

 * the same size.

 *

 * @return If the queue is successfully create then a handle to the newly 

 * created queue is returned.  If the queue cannot be created then 0 is

 * returned.

 * 

 * Example usage:

   <pre>

 struct AMessage

 {

    portCHAR ucMessageID;

    portCHAR ucData[ 20 ];

 };



 void vATask( void *pvParameters )

 {

 xQueueHandle xQueue1, xQueue2;



    // Create a queue capable of containing 10 unsigned long values.

    xQueue1 = xQueueCreate( 10, sizeof( unsigned portLONG ) );

    if( xQueue1 == 0 )

    {

        // Queue was not created and must not be used.

    }



    // 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( xQueue2 == 0 )

    {

        // Queue was not created and must not be used.

    }



    // ... Rest of task code.

 }

 </pre>

 * \defgroup xQueueCreate xQueueCreate

 * \ingroup QueueManagement

 */

xQueueHandle xQueueCreate( unsigned portBASE_TYPE uxQueueLength, unsigned portBASE_TYPE uxItemSize );



/**

 * queue. h

 * <pre>

 portBASE_TYPE xQueueSend( 

                             xQueueHandle xQueue, 

                             const void * pvItemToQueue, 

                             portTickType xTicksToWait 

                         );

 * </pre>

 *

 * 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.

 *

 * @param xQueue The handle to the queue on which the item is to be posted.

 * 

 * @param pvItemToQueue A 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.

 *

 * @param xTicksToWait The 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.  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.

 *

 * @return pdTRUE if the item was successfully posted, otherwise errQUEUE_FULL.

 *

 * Example usage:

   <pre>

 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.

 }

 </pre>

 * \defgroup xQueueSend xQueueSend

 * \ingroup QueueManagement

 */

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



/**

 * queue. h

 * <pre>

 portBASE_TYPE xQueueReceive( 

                                xQueueHandle xQueue, 

                                void *pvBuffer, 

                                portTickType xTicksToWait 

                            );</pre>

 *

 * Receive an item from a queue.  The item is received by copy so a buffer of 

 * adequate size must be provided.  The number of bytes copied into the buffer

 * was defined when the queue was created.

 *

 * This function must not be used in an interrupt service routine.  See

 * xQueueReceiveFromISR for an alternative that can.

 *

 * @param pxQueue The handle to the queue from which the item is to be

 * received.

 *

 * @param pvBuffer Pointer to the buffer into which the received item will

 * be copied.

 * 

 * @param xTicksToWait The maximum amount of time the task should block

 * waiting for an item to receive should the queue be empty at the time

 * of the call.    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.

 *

 * @return pdTRUE if an item was successfully received from the queue,

 * otherwise pdFALSE.

 *

 * Example usage:

   <pre>

 struct AMessage

 {

    portCHAR ucMessageID;

    portCHAR ucData[ 20 ];

 } xMessage;



 xQueueHandle xQueue;

 

 // Task to create a queue and post a value.

 void vATask( void *pvParameters )

 {

 struct AMessage *pxMessage;



    // Create a queue capable of containing 10 pointers to AMessage structures.

    // These should be passed by pointer as they contain a lot of data.

    xQueue = xQueueCreate( 10, sizeof( struct AMessage * ) );

    if( xQueue == 0 )

    {

        // Failed to create the queue.

    }



    // ...



    // Send a pointer to a struct AMessage object.  Don't block if the

    // queue is already full.

    pxMessage = & xMessage;

    xQueueSend( xQueue, ( void * ) &pxMessage, ( portTickType ) 0 );



	// ... Rest of task code.

 }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -