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

📄 buffer.c

📁 Wind sensor for control speed air flow.
💻 C
字号:
/*
   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 + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -