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 + -
显示快捷键?