#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; }