📄 ring.c.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 + -