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

📄 ring.c.txt

📁 嵌入式linux学习之uclinux步进电机驱动实例(测试平台S3C44B0X,uclinux系统)
💻 TXT
字号:
#include "ring.h"
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>

void ring_buffer_init(ring_buffer_t *ring)
{
	ring->signature = RING_SIGNATURE;
	ring->begin_p = ring->buffer;
	ring->end_p = &ring->buffer[sizeof(ring->buffer)];
	ring->head_p = ring->buffer;
	ring->tail_p = ring->buffer; 
}

int ring_buffer_read(ring_buffer_t *ring, 
	unsigned char *buf, int count)
{
	/* do some check */
	if(ring->signature != RING_SIGNATURE){
		printf("ring_buffer_read: signature corrupt\n");
		return(0);
	}
	if((ring->tail_p < ring->begin_p) || (ring->tail_p > ring->end_p)){
		printf("ring_buffer_read: tail corrupt\n");
		return(0);
	}
	if(count != 1){
		printf("ring_buffer_read: count must currently be 1\n");
		return(0);
	}
	
	if(ring->tail_p == ring->end_p){             //go a surrend of the buffer
		ring->tail_p = ring->begin_p;
	}
	if(ring->tail_p == ring->head_p){            //the buffer is full
		printf("ring_buffer_read: buffer underflow\n");     
		return(0);
	}
	*buf = *ring->tail_p++;             
	return(1); 
}
	
int ring_buffer_write(ring_buffer_t *ring,
	unsigned char *buf, int count)
{
	unsigned char *tail_p;

	/* do some check */
	if(ring->signature != RING_SIGNATURE){
		printf("ring_buffer_write: signature corrupt\n");
		return(0);
	}
	if((ring->head_p < ring->begin_p) || (ring->head_p > ring->end_p)){
		printf("ring_buffer_write: tail corrupt\n");
		return(0);
	}
	if(count != 1){
		printf("ring_buffer_write: count must currently be 1\n");
		return(0);
	}

	tail_p = ring->tail_p;
	if(((ring->head_p == tail_p - 1))||                   
	((ring->head_p == ring->end_p - 1)&&(ring->tail_p == ring->begin_p)
	)){
		printf("ring_buffer_write: buffer underflow");
		return(0);
	}
	*ring->head_p++ = *buf;

	if(ring->head_p == ring->end_p){
		ring->head_p = ring->begin_p;
	}
	return(1);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -