FIFO满,写失败;FIFO空,读失败
#include <stdio.h>
#define BUFSIZE 10
#define FIFOFULL -1
#define FIFOEMPTY -2
#define RWOK 0
typedef struct FifoType {
unsigned int buffer[BUFSIZE]; /* Circular buffer */
unsigned int w_index; /* Index of write */
unsigned int r_index; /* Index of read */
unsigned int maybefull;
}*pFifoType;
int WriteFIFO(pFifoType priv, int data)
{
if ((priv->w_index == priv->r_index) && (priv->maybefull == 1))
return FIFOFULL;
else
{
priv->buffer[priv->w_index] = data;
priv->w_index++;
if (priv->w_index >= BUFSIZE)
{
priv->w_index -= BUFSIZE;
priv->maybefull = 1;
}
return RWOK;
}
}
int ReadFIFO(pFifoType priv)
{
int dataout;
if ((priv->r_index == priv->w_index) && (priv->maybefull == 0))
return FIFOEMPTY;
else
{
dataout = priv->buffer[priv->r_index];
priv->r_index++;
if (priv->r_index >= BUFSIZE)
{
priv->r_index -= BUFSIZE;
priv->maybefull = 0;
}
}
return dataout;
}
void main()
{
int i = 0;
unsigned int data = 0;
pFifoType priv = new FifoType;
priv->r_index = 0;
priv->w_index = 0;
priv->maybefull = 0;
for (i = 0; i < 12; i++)
printf("%d->%d\n", WriteFIFO(priv, i),priv->w_index);
printf("\n");
for (i = 0; i < 12; i++)
{
printf("%d->%d\n", ReadFIFO(priv),priv->r_index);
}
printf("\n");
delete priv;
priv = NULL;
}