环形队列数据的循环读写

本文介绍了环形队列数据结构,用于交通灯驱动程序的数据缓冲。通过ring_buf_read()和ring_buf_write()函数实现循环读写,遵循先进先出原则。结构体ring_buf包含签名、头、尾、开始和结束指针,以及一个64个元素的缓冲区。文章详细讲解了读写函数的实现逻辑,确保数据的安全读取和写入。
摘要由CSDN通过智能技术生成

在内存中建立一个环形队列的数据结构,此数据结构遵循先进先出的原则,它是用于对交通灯驱动程序的上半部和下半部之间缓冲数据,其中ring_buf_read()函数用于对环形队列进行读取数据。(本算法来自蒋静《操作系统原理。技术与编程》一书P392页)

 

#define R_SIGNATURE 0x860510
typedef struct{
 long signature;
 int *head;
 int *tail;
 int *end;
 int *begin;
 int buffer[64];
}ring_buf;  //定义一个环形队列数据结构

 


#include <unistd.h>
#include <linux/kernel.h>
#include "ring.h"
int  tag=0;
int * psudo_head=NULL;

 

void ring_buf_init(ring_buf *round)
{
        round->signature=R_SIGNATURE;
        round->head=round->buffer;
        round->tail=round->buffer;
        round->begin=round->buffer;
        round->end=&round->buffer[sizeof(round->buffer)-1];
}

/**   read the user_defined value from the ring_buffer,
 **    if no value

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值