Display_Avr_3/UART/circular_buf.c
2024-02-27 14:01:42 +03:00

37 lines
1.5 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include <stdio.h>
#include <stdlib.h>
#include "circular_buf.h"
void clear_buffer(struct circular_buffer* cb) {
cb->buf_head = 0;
cb->buf_tail = 0;
}
// Проверка, пустой ли буфер
int buffer_empty(const struct circular_buffer* cb) {
return cb->buf_head == cb->buf_tail;
}
// Проверка, заполнен ли буфер
int buffer_full(const struct circular_buffer* cb) {
return (cb->buf_tail + 1) % BUFFER_SIZE == cb->buf_head; //проверяем следующее число, если оно будет совпадать с индексом головы то будет false, при совпадении вывод true
}
// Запись в буфер
void write_buffer(struct circular_buffer* cb, int value) {
if (buffer_full(cb)) { // проверяем, заполнен ли буфер
return;
}
cb->buffer[cb->buf_tail] = value;// записываем значение в элемент массива в хвост
cb->buf_tail = (cb->buf_tail + 1) % BUFFER_SIZE;// присваивается cb->buf_tail, обновляется его значение на следующий индекс в буфере
}
// Чтение элемента
int read_buffer(struct circular_buffer* cb) {
if (buffer_empty(cb)) { // проверка на пустоту
return -1;// -1 как индикатор в случае ошибки
}
int value = cb->buffer[cb->buf_head]; // чтение по индексу головы
cb->buf_head = (cb->buf_head + 1) % BUFFER_SIZE; // увеличиваем индекс на 1
return value;
}