buffer.c
来自「Wind sensor for control speed air flow.」· C语言 代码 · 共 66 行
C
66 行
/*
buffer.c - Simple implementation of a circular buffer.
*/
#include "buffer.h"
// ibuNextIndex() - Internal buffer function. Returns the next value
// for the head/tail values.
unsigned char ibuNextIndex(unsigned char nCurrentValue)
{ nCurrentValue++;
if(nCurrentValue == CIRCULAR_BUFFER_SIZE) nCurrentValue = 0;
return nCurrentValue;
}
// buInitBuffer() - Initialises a provided circular buffer
void buInitBuffer(pbsCircBuffer pBuffer)
{ pBuffer->nHeadIndex = 0;
pBuffer->nTailIndex = 0;
}
// buWriteByte() - Write a byte to the buffer, if possible.
// Returns:
// 0 - success
// else - failed (buffer is full)
unsigned char buWriteByte(pbsCircBuffer pBuffer, unsigned char nData)
{ unsigned char nHeadIndex, nNewIndex;
nHeadIndex = pBuffer->nHeadIndex;
nNewIndex = ibuNextIndex(nHeadIndex);
if(nNewIndex == pBuffer->nTailIndex) return 1;
pBuffer->nBuffer[nHeadIndex] = nData;
pBuffer->nHeadIndex = nNewIndex;
return 0;
}
// buReadByte() - Reads a byte from the buffer if possible.
// Returns:
// The byte from the buffer
// NOTE:
// * If a previous call to buGetBytesUsed() returns 0, then this function
// will return 0, which may not be distinguishable from actual data in the
// buffer.
unsigned char buReadByte(pbsCircBuffer pBuffer)
{ unsigned char nTailIndex, nReadByte;
nTailIndex = pBuffer->nTailIndex;
if(nTailIndex == pBuffer->nHeadIndex) return 0;
nReadByte = pBuffer->nBuffer[nTailIndex];
nTailIndex = ibuNextIndex(nTailIndex);
pBuffer->nTailIndex = nTailIndex;
return nReadByte;
}
// buIsBufferEmpty() - Indicates whether or not the buffer is empty.
// pBuffer - The buffer to look at
// Returns:
// zero - Not empty
// non-zero - Empty buffer
unsigned char buIsBufferEmpty(pbsCircBuffer pBuffer)
{ return ((pBuffer->nHeadIndex == pBuffer->nTailIndex) ? 1 : 0);
}
// buIsBufferFull() - Indicates whether or not the buffer is full
// pBuffer - The buffer in question
// Returns:
// zero - Buffer is not full
// non-zero - Buffer is full
unsigned char buIsBufferFull(pbsCircBuffer pBuffer)
{ unsigned char nNewHead;
nNewHead = ibuNextIndex(pBuffer->nHeadIndex);
return ((nNewHead == pBuffer->nTailIndex) ? 1 : 0);
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?