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