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

📄 fifo.c.bak

📁 FIFO程序库,添加即可使用,一个非常实用的程序...
💻 BAK
字号:
/*
             FIFO.h
                    
             FIFO源文件
                    
        说明:FIFO是这样一个特殊的存储缓冲区,先进入这个缓冲区的数据先取出
                
             Copyright(c)2009, Luo Jiafang
             
             All rights reserved.
    
*/
#include "FIFO.h"

struct FIFO NewFIFO;
/****************************************************************************
* 名    称:FIFO_Init()
* 功    能:FIFO初始化程序
* 入口参数:无 
* 出口参数:无
* 说    明: 使用FIFO前,必须调用初始化程序           
****************************************************************************/
void FIFO_Init(void)
{
	NewFIFO.FrontPtr = 0;
	NewFIFO.BackPtr = 0;
	NewFIFO.DataAmount = 0;
	//初始化FIFO的存储区,全部写入0xFF
	for(int i=0;i<FIFO_SIZE;i++)
	{
		NewFIFO.FIFOBuff[i] = 0xFF;		
	}	
}

/****************************************************************************
* 名    称:FIFO_WriteByte(char wByte)
* 功    能:向FIFO写入一个字节
* 入口参数: wByte:待写入的字节
* 出口参数:0:出错  1:成功写入
* 说    明: 只写入一个字节,若FIFO已满则拒绝本次操作            
****************************************************************************/
char FIFO_WriteByte(char wByte)
{
	if(NewFIFO.DataAmount>=FIFO_SIZE) return(0); //若FIFO已满,出错退出
	NewFIFO.FIFOBuff[NewFIFO.BackPtr] = wByte;
	NewFIFO.BackPtr++;  //调整指针位置,指向下一个空的位置
	if(NewFIFO.BackPtr>=FIFO_SIZE)  //若指针指向FIFO外,则调整指针到FIFO的起始位
	{                                                      
		NewFIFO.BackPtr = 0;
	}	
	NewFIFO.DataAmount++; //FIFO中的数据增加一字节
	return(1);
}

/****************************************************************************
* 名    称:FIFO_WriteWord(int wWord)
* 功    能:向FIFO写入一个字
* 入口参数: wWord:待写入的字
* 出口参数:0: 出错; 1:成功写入
* 说    明: 低字节在有,高字节在后           
****************************************************************************/
char FIFO_WriteWord(int wWord)
{
	if(NewFIFO.DataAmount>=(FIFO_SIZE-1)) return(0); //若FIFO不够存储一个字,则出错退出
	int temp = wWord;
	char dataH;
	char dataL;
	dataL = (char)(temp&0x0FF);
	temp = wWord;
	dataH = (char)(temp>>8);
	FIFO_WriteByte(dataL); //先写低字节
	FIFO_WriteByte(dataH); //再写高字节
	return(1);
}

/****************************************************************************
* 名    称:FIFO_WriteMultiByte(char *dataBuff,int count)
* 功    能:向FIFO写入多个字节
* 入口参数:*dataBuff:待写入的字节队列的首地址
           count:待写入的字节的数量
* 出口参数:0:出错  1:成功写入
* 说    明: 若FIFO不够,则出错退出
****************************************************************************/
char FIFO_WriteMultiByte(char *dataBuff,int count)
{
	if((FIFO_SIZE-NewFIFO.DataAmount)<count) return(0);  //若FIFO不够,出错退出
	for(int i=0;i<count;i++)
	{
		FIFO_WriteByte(dataBuff[i]);
	}
	return(1);
}

/****************************************************************************
* 名    称:FIFO_ReadByte(char *rByte)
* 功    能:从FIFO中读出一个字节
* 入口参数: *rBtye:将读出的数据存取到指针所指的位置
* 出口参数:0:出错 1:成功读取
* 说    明:             
****************************************************************************/
char FIFO_ReadByte(char *rByte)
{
	if(NewFIFO.DataAmount<=0) return(0); //若FIFO为空,则出错退出
	*rByte = NewFIFO.FIFOBuff[NewFIFO.FrontPtr]; //取出FIFO中数据的第一个字节
	NewFIFO.FIFOBuff[NewFIFO.FrontPtr]=0xFF;  //清除已读取的区域
	NewFIFO.FrontPtr++;
	if(NewFIFO.FrontPtr>=FIFO_SIZE)
	{
		NewFIFO.FrontPtr=0;
	}
	NewFIFO.DataAmount--;
	return(1);
	}

/****************************************************************************
* 名    称:FIFO_ReadWord(int *rWord)
* 功    能:从FIFO读出一个字
* 入口参数:*rWord:将读出的数据存取到指针所指的位置
* 出口参数:0:出错 1:成功读取
* 说    明: 将FIFO中数据的第一个字节作为字的低字节,第二个字节作为字的高字节            
****************************************************************************/
char FIFO_ReadWord(int *rWord)
{
	if(NewFIFO.DataAmount<2) return(0);  //若FIFO中不够一个字,则出错退出
	char tempL,tempH;	
	FIFO_ReadByte(&tempL);  //取出低字节
	FIFO_ReadByte(&tempH);  //取出高字节
	*rWord=tempH;
	*rWord=(*rWord)<<8;
	*rWord=(*rWord)+tempL;
	return(1);	
}

/****************************************************************************
* 名    称:FIFO_ReadMultiByte(char *dataBuff,int count)
* 功    能:从FIFO中读出多个字节
* 入口参数:*dataBuff:读出的数据所要存储的首地址
            count:要从FIFO中读出字节数量
* 出口参数:0:出错 1:成功读取
* 说    明: 若FIFO中的数据少于所期望要读取的字节数count,则出错退出,不读取            
****************************************************************************/
char FIFO_ReadMultiByte(char *dataBuff,int count)
{
	if(NewFIFO.DataAmount<count) return(0);  //若FIFO中的数据不够所期望的量,则出错退出
	for(int i=0;i<count;i++)
	{
		FIFO_ReadByte(&dataBuff[i]);
	}
	return(1);	
}



/****************************************************************************
* 名    称:
* 功    能:
* 入口参数: 
* 出口参数:
* 说    明:             
****************************************************************************/

⌨️ 快捷键说明

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