一、建立队列结构体
/* 队列的数据类型 /
typedef char datatype;
typedef struct queue{
datatype sp_queue_array[MAX_QUEUE_SIZE];
/ 队头 /
unsigned short front;
/ 队尾 /
unsigned short rear;
unsigned char startRecord;
unsigned char isloop;
}sp_queue;
二、队列创建与初始化
static sp_queue uart_queue;
void queue_init(void)
{
memset(uart_queue.sp_queue_array,0,MAX_QUEUE_SIZE);
uart_queue.front = 0;
uart_queue.rear=0;
}
三、队列为空判断
int queue_empty(void)
{
return (0==queue_len());
}
四、队列满判断
int queue_full(void)
{
return (queue_len()>=MAX_QUEUE_SIZE-NUM_SAMPLES);
}
五、队列长度
int queue_len(void)
{
if(uart_queue.rear < uart_queue.front)
{
return (uart_queue.rear - uart_queue.front + MAX_QUEUE_SIZE);
}
else
{
return (uart_queue.rear- uart_queue.front);
}
}
六、入队
int queue_en(datatype e)
{
/ 队满 /
if(queue_full())
{
return false;
}
else
{
/ 入队 */
uart_queue.sp_queue_array[uart_queue.rear] = e;
uart_queue.rear++;
if(uart_queue.rear>=MAX_QUEUE_SIZE)
{
uart_queue.rear=0;
}
return true;
}
}
七、出队
int queue_de(datatype e)
{
/ 队空 /
if(queue_empty())
{
return false;
}
else
{
/ 出队 */
*e = uart_queue.sp_queue_array[uart_queue.front];
uart_queue.front++;
if(uart_queue.front>=MAX_QUEUE_SIZE)
{
uart_queue.front=0;
}
return true;
}
}
队列设计-C编程笔记(一)
最新推荐文章于 2023-04-23 17:50:51 发布