f411-pulse-recorder/Core/Src/recorder_buffer.cpp

35 lines
1.0 KiB
C++

#include "recorder_buffer.h"
ChannelBuffer_t buffer_ch1;
ChannelBuffer_t buffer_ch2;
// Функция инициализации буфера
void ChannelBuffer_reset(ChannelBuffer_t *buffer) {
buffer->head = 0;
buffer->tail = 0;
buffer->overruns = 0;
}
// Функция добавления элемента в буфер
void ChannelBuffer_push(ChannelBuffer_t *buffer, BufferItem item) {
// Проверка на переполнение буфера
if (((buffer->tail + 1) & CHANNEL_BUFFER_SIZE_MASK) == buffer->head) {
buffer->overruns = buffer->overruns + 1;
}
buffer->buffer[buffer->tail] = item;
buffer->tail = (buffer->tail + 1) & CHANNEL_BUFFER_SIZE_MASK;
}
// Функция извлечения элемента из буфера
int ChannelBuffer_pop(ChannelBuffer_t *buffer, BufferItem* dest) {
const uint32_t h = buffer->head;
if (h == buffer->tail) {
return 0;
}
*dest = buffer->buffer[h];
buffer->head = (h + 1) & CHANNEL_BUFFER_SIZE_MASK;
return 1;
}