Modbus_master_2/UART/circular_buf.c

37 lines
1.3 KiB
C
Raw 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 initialize_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;//записывает значение value в элемент массива buffer в хвост
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;
}