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

📄 ring.c.bak

📁 mc51单片机对rtl8019编程,实现ethernet的收发控制.
💻 BAK
字号:
/*********************************************************
** FILE:
**	ring.c
** DESCRIPTION:
**	Realize the main function of ring buffer operation.
** NOTES:
**	Copyright(c) 2002 Luo Cheng , All rights reserved.
** HISTORY:
**	Version 	Date		Author
** 	1.0		2002/10/17	Luo Cheng	
**
*********************************************************/

#include "types.h"
#include "ring.h"
#include <string.h>

/*********************************************************
 NAME:
 void 	ring_init(ring_struc *ring,Uint32 *pmem,Uint16 max_element_number,Uint8 max_block_number)
 PURPOSE:
	Initialize the structure of ring; 
 PARAMETERS:
	ring: The pointer for a ring structure;
	pmem: The pointer of a memory that will be used by ring;
	max_element_number: The max element number in a block;
	max_block_number: The max block number of ring;
 RETURN:
 	None;
*********************************************************/
void 
ring_init(ring_struc *ring,void *pmem,Uint16 max_element_number,Uint8 max_block_number)
{
	ring->pbuffer=pmem;
	ring->read=ring->write=ring->count=0;
	ring->element_number=max_element_number;
	ring->block_number=max_block_number;
}
/*********************************************************
 NAME:
 Bool ring_read(ring_struc *ring, void *pmem);
 PURPOSE:
	Read a block from ring; 
 PARAMETERS:
	ring: The pointer for a ring structure;
	pmem: The pointer of a memory that will be used to store the data;
 RETURN:
 	1:  success;
 	0:  failed;
*********************************************************/
Bool 
ring_read(ring_struc *ring,void *pmem)
{
	Uint16 oldCSR;
	if(ring->count == 0)
		return FAILED;
	memcpy(pmem,ring->pbuffer+ring->read,ring->element_number);
	oldCSR=Mem_Read(IMR);
	Mem_Write(IMR,0);				
	ring->read += ring->element_number;
	if(ring->read > ring->block_number * ring->element_number)
		ring->read = 0;
	ring->count-=1;
	Mem_Write(IMR,oldCSR);				
	return SUCCESS;   	
}

/*********************************************************
 NAME:
 Bool ring_write(ring_struc *ring,void *pmem);
 PURPOSE:
	Write data to the ring; 
 PARAMETERS:
	ring: The pointer for a ring structure;
	pmem: The pointer of a memory that stored data;
 RETURN:
 	1:  success;
 	0:  failed;
*********************************************************/
Bool 
ring_write(ring_struc *ring,void *pmem)
{
	Uint16 oldCSR;
	if(ring->count == ring->block_number)
		return FAILED;
	memcpy(ring->pbuffer+ring->write*ring->element_number,pmem,ring->element_number);
	oldCSR=Mem_Read(IMR);
	Mem_Write(IMR,0);				
	ring->write += ring->element_number;
	if(ring->write > ring->block_number * ring->element_number)
		ring->write = 0;
	ring->count+=1;
	Mem_Write(IMR,oldCSR);				
	return SUCCESS;   	
}

⌨️ 快捷键说明

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