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

📄 mcu_ring_queue.c

📁 Altera公司开发板1c20 CF卡通用例程(初始化、读、写、测试等)-Altera Corporation development board 1c20 CF cartoon with routi
💻 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 + -