📄 queue.c
字号:
/**************************************************************************** * * 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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -