📄 ring_buffer.c
字号:
/**
* \file ring_buffer.c
* \brief Ring (circular) buffer API.
*/
#include "ring_buffer.h"
void ring_buffer_init(
uint32_t size,
uint8_t *data,
ring_buffer_t *buf)
{
buf->wr = 0;
buf->rd = 0;
buf->count = 0;
buf->size = size;
buf->data = data;
}
int32_t ring_buffer_remove(
ring_buffer_t *buf)
{
int ch;
/* Empty check */
if (buf->count == 0) {
return -1;
}
ch = buf->data[buf->rd];
buf->rd++;
buf->count--;
/* Buffer read-pointer wrap */
if (buf->rd == buf->size) {
buf->rd = 0;
}
return ch;
}
int32_t ring_buffer_add(
ring_buffer_t *buf,
int8_t ch)
{
/* Full check */
if (buf->count == buf->size) {
return -1;
}
buf->data[buf->wr] = ch;
buf->wr++;
buf->count++;
/* Buffer write-pointer wrap */
if (buf->wr == buf->size) {
buf->wr = 0;
}
return 0;
}
uint32_t ring_buffer_count(
ring_buffer_t *buf)
{
return buf->count;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -