queue.c

来自「JENNIC无线传感器网络 ZIGBEE 文件资料」· C语言 代码 · 共 232 行

C
232
字号
/**************************************************************************** * * MODULE:             Queue * * COMPONENT:          queue.c,v * * VERSION:            AT-Jenie_Release_v1_RC3 * * REVISION:           1.3 * * DATED:              2007/09/25 09:03:21 * * STATUS:             Exp * * AUTHOR:             MRW * * DESCRIPTION:			Generic FIFO queue * *  * CHANGE HISTORY: * * queue.c,v * * *  * LAST MODIFIED BY:   mwild *                     $Modtime: $ * **************************************************************************** * *  (c) Copyright 2007 JENNIC Ltd * ****************************************************************************//****************************************************************************//***        Include files                                                 ***//****************************************************************************/#include <jendefs.h>#include "interrupt.h"#include "queue.h"/****************************************************************************//***        Macro Definitions                                             ***//****************************************************************************//****************************************************************************//***        Type Definitions                                              ***//****************************************************************************//****************************************************************************//***        Local Function Prototypes                                     ***//****************************************************************************//****************************************************************************//***        Exported Variables                                            ***//****************************************************************************//****************************************************************************//***        Local Variables                                               ***//****************************************************************************//****************************************************************************//***        Exported Functions                                            ***//****************************************************************************//****************************************************************************//***        Local Functions                                               ***//****************************************************************************//**************************************************************************** * * NAME: vQueue_AddItem * * DESCRIPTION: * * PARAMETERS:      Name            RW  Usage * None. * * RETURNS: * None. * * NOTES: * None. ****************************************************************************/PUBLIC void vQueue__AddItem(tsQueue *psQueue, uint8 u8Item){    if (psQueue->u16Count < psQueue->u16Size)    {        /* Space available in buffer so add data */        psQueue->u8Buff[psQueue->u16Head++] = u8Item;        if (psQueue->u16Head == psQueue->u16Size) {            psQueue->u16Head = 0;        }        /* read, modify write operation must be atomic */        vInterrupt_Suspend();        psQueue->u16Count++;        vInterrupt_Resume();    }}/**************************************************************************** * * NAME: u8Queue_RemoveItem * * DESCRIPTION: * * PARAMETERS:      Name            RW  Usage * None. * * RETURNS: * None. * * NOTES: * None. ****************************************************************************/PUBLIC uint8 u8Queue__RemoveItem(tsQueue *psQueue){    uint8 u8Item = 0;    if (psQueue->u16Count > 0)    {        /* Data available in buffer so remove data */        u8Item = psQueue->u8Buff[psQueue->u16Tail++];        if (psQueue->u16Tail == psQueue->u16Size) {            psQueue->u16Tail = 0;        }        /* read, modify write operation must be atomic */        vInterrupt_Suspend();        psQueue->u16Count--;        vInterrupt_Resume();    }    return u8Item;}/**************************************************************************** * * NAME: bQueue_Empty * * DESCRIPTION: * * PARAMETERS:      Name            RW  Usage * None. * * RETURNS: * None. * * NOTES: * None. ****************************************************************************/PUBLIC bool_t bQueue__Empty(tsQueue *psQueue){    return psQueue->u16Count == 0;}/**************************************************************************** * * NAME: bQueue_Full * * DESCRIPTION: * * PARAMETERS:      Name            RW  Usage * None. * * RETURNS: * None. * * NOTES: * None. ****************************************************************************/PUBLIC bool_t bQueue__Full(tsQueue *psQueue){    return psQueue->u16Count == psQueue->u16Size;}/**************************************************************************** * * NAME: vQueue_Flush * * DESCRIPTION: * * PARAMETERS:      Name            RW  Usage * None. * * RETURNS: * None. * * NOTES: * None. ****************************************************************************/PUBLIC void vQueue__Flush(tsQueue *psQueue){    vInterrupt_Suspend();    psQueue->u16Count = psQueue->u16Head = psQueue->u16Tail = 0;    vInterrupt_Resume();}/**************************************************************************** * * NAME: vQueue_Count * * DESCRIPTION: * * PARAMETERS:      Name            RW  Usage * None. * * RETURNS: * Count of number if items in queue * * NOTES: * None. ****************************************************************************/PUBLIC uint16 u16Queue__Count(tsQueue *psQueue){    return psQueue->u16Count;}/****************************************************************************//***        END OF FILE                                                   ***//****************************************************************************/

⌨️ 快捷键说明

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