📄 mcu_ring_queue.c
字号:
#include "..\..\includes.h"
#if CFG_UART_RX_BUF_EN > 0
//-------------------------------------------
// 队列初始化
//-------------------------------------------
extern void Queue_Init( RING_QUEUE *const queue, INT8U init_maxSize, INT8U *init_element )
{
queue->front = 0;
queue->rear = 0;
queue->maxSize = init_maxSize;
queue->elements = init_element;
}
//-------------------------------------------
// 入队函数,如果队列已经满了,不会执行入队操作
//-------------------------------------------
extern void Queue_EnQueue( RING_QUEUE *const queue, INT8U item )
{
if( !Queue_IsFull( queue ) )
{
queue->rear = (queue->rear+1) % (queue->maxSize);
queue->elements[ queue->rear ] = item;
}
}
//-------------------------------------------
// 出队函数
//
// 如果队列不空,出队的元素保存在pItem中,函数返回TRUE
// 如果队列为空,函数返回FALSE
//-------------------------------------------
extern BOOLEAN Queue_DeQueue( RING_QUEUE *const queue, INT8U *const pItem )
{
if( Queue_IsEmpty( queue ) )
{
return FALSE;
}
queue->front = (queue->front+1) % (queue->maxSize);
*pItem = ( *( queue->elements + queue->front ) );
return TRUE;
}
//--------------------------------------------
// 判断队列是否为空
// 如果队列为空,函数返回TRUE
// 如果队列不空,函数返回FALSE
//--------------------------------------------
extern BOOLEAN Queue_IsEmpty( RING_QUEUE *const queue )
{
if( queue->front == queue->rear )
{
return TRUE;
}
return FALSE;
}
//--------------------------------------------
// 判断队列是否为满
// 如果队列为满,函数返回TRUE
// 如果队列不满,函数返回FALSE
//--------------------------------------------
extern BOOLEAN Queue_IsFull( RING_QUEUE *const queue )
{
if( ( queue->rear + 1 ) % queue->maxSize == queue->front )
{
return TRUE;
}
return FALSE;
}
//-------------------------------------------
// 取队列中的当前元素个数
//-------------------------------------------
extern INT16U Queue_GetElementCount( RING_QUEUE *const queue )
{
return ( queue->rear - queue->front + queue->maxSize ) % queue->maxSize ;
}
//-------------------------------------------
// 取队头的元素,但不出队
// 如果队列不空,取的元素值保存在pItem中,函数返回TRUE
// 如果队列为空,函数返回FALSE
//-------------------------------------------
extern BOOLEAN Queue_GetFront( RING_QUEUE *const queue, INT8U *const pItem )
{
if( Queue_IsEmpty( queue ) )
{
return FALSE;
}
*pItem = queue->elements[ (queue->front+1) % (queue->maxSize) ];
return TRUE;
}
//------------------------------------
// 清空队列
//------------------------------------
extern void Queue_Clear( RING_QUEUE *const queue )
{
queue->front = queue->rear = 0;
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -