#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, const BufferItem_t* item) { if (!item) { return; } // Проверка на переполнение буфера 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_t* 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; }