c语言 队列

#include "queue.h"


void QueueEmpty(Queue_t *q)
{
	q->front = q->tail = 0;
	q->length= 0;
}


uint16_t QueueDataIn(Queue_t *q, uint8_t *value)
{
	if (q->length && q->front == q->tail) {
		return 0;
	}
	q->length += 1;
	q->data[q->tail] = *value;
	q->tail = (q->tail + 1) % QUEUE_SIZE;
	return 1;
}


uint16_t QueueDataOut(Queue_t *q, uint8_t *value)
{	
	if (q->length){
		__disable_irq();	//禁止CPU去响应中断,没有真正的去屏蔽中断的触发
		q->length -= 1;	
		*value = q->data[q->front];
		q->front = (q->front + 1) % QUEUE_SIZE;
		__enable_irq();		//打开中断
		return 1;
	}
	return 0;
}


uint16_t QueueLength(Queue_t *q)
{
	return q->length;
}


#ifndef __QUEUE_H
#define __QUEUE_H

#include "stdio.h"
#include "stdint.h"
#include "string.h"


#define QUEUE_SIZE (64)


typedef struct{
	uint16_t front;
	uint16_t tail;
	uint16_t length;
	uint8_t data[QUEUE_SIZE];
}Queue_t;


void QueueEmpty(Queue_t *q);
uint16_t QueueDataIn(Queue_t *q, uint8_t *value);
uint16_t QueueDataOut(Queue_t *q, uint8_t *value);
uint16_t QueueLength(Queue_t *q);


#endif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

腿毛都能控

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值