From aa0d7df6fcb42ba619e875c36bf65a63910a177d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=AE=D0=B6=D0=B0=D0=BA=D0=BE=D0=B2=D0=B0=20=D0=9B=D0=B0?= =?UTF-8?q?=D0=B4=D0=B0?= Date: Thu, 11 May 2023 14:49:06 +0300 Subject: [PATCH] ring_buffer --- README.md | 25 -------------------- device_adc.c | 56 -------------------------------------------- device_adc.h | 7 ------ device_address.c | 41 -------------------------------- device_address.h | 9 ------- device_ring_buffer.c | 46 ++++++++++++++++++++++++++++++++++++ device_ring_buffer.h | 8 +++++++ 7 files changed, 54 insertions(+), 138 deletions(-) delete mode 100644 README.md delete mode 100644 device_adc.c delete mode 100644 device_adc.h delete mode 100644 device_address.c delete mode 100644 device_address.h create mode 100644 device_ring_buffer.c create mode 100644 device_ring_buffer.h diff --git a/README.md b/README.md deleted file mode 100644 index a19f6b8..0000000 --- a/README.md +++ /dev/null @@ -1,25 +0,0 @@ -# Modbus устройство на AVR -# Задание -Устройство поключено к питанию всегда. Взаимодействие по интерфейсу UART (RS-485) и протоколу Modbus. -- Discrete Inputs - 4 штуки -- Coils - 4 штуки -- Input registers - 2 канала АЦП -- Holding Registers - 1 штука: адрес на шине Modbus. -Адрес по умолчанию 0х32. Адрес хранить в ПЗУ чипа. -Адреса данных определить самостоятельно. -# Участники -Южакова Лада -Салангина Анастасия -Макуц Ольга -# Составляющие задачи -- Изучить Modbus (Салангина Анастасия) -- Изучить UART (Макуц Ольга) -- Определить, как происходит передача по протоколу (Салангина Анастасия) -- Разобрать назначение и способы использования регистров и вхоов-выходов (Макуц Ольга) -- Изучить, как переопределять адрес по умолчанию в ПЗУ (Южакова Лада) -- Изучить, как определять адреса данных в ПЗУ (Южакова Лада) -- Изучить, как использовать RX/TX (Макуц Ольга) -- Изучить, что такое верхняя архитектура (все) -- Изучить ПЗУ (Южакова Лада) -- Изучить кольцевой буфер (Южакова Лада) -- Понять, в какой полседовательности будет работать программа (все) \ No newline at end of file diff --git a/device_adc.c b/device_adc.c deleted file mode 100644 index 38ea60d..0000000 --- a/device_adc.c +++ /dev/null @@ -1,56 +0,0 @@ -#define REFS1_BIT (7) -#define REFS1_MASK (1< + +struct rb { + char buf[8]; + char head; + char tail; +}; + +static void rb_initialize(struct rb* _rb) +{ + memset(_rb, 0, sizeof(_rb)); +} + +int rb_put(struct rb* _rb, char element) +{ + if (_rb->tail != _rb->head) { + _rb->buf[_rb->tail] = element; + _rb->tail++; + if (_rb->tail == sizeof(_rb->buf)) + { + _rb->tail = 0; + } + return 1; + } + else + { + return 0; + } +} + +int rb_get(struct rb* _rb, char *element) +{ + if (_rb->tail != _rb->head) { + *element = _rb->buf[_rb->head]; + _rb->head++; + if (_rb->head == sizeof(_rb->buf)) + { + _rb->head = 0; + } + return 1; + } + else + { + return 0; + } +} \ No newline at end of file diff --git a/device_ring_buffer.h b/device_ring_buffer.h new file mode 100644 index 0000000..f10f8b4 --- /dev/null +++ b/device_ring_buffer.h @@ -0,0 +1,8 @@ +#ifndef DEVICE_RING_BUFFER_H +#define DEVICE_RING_BUFFER_H + +static void rb_initialize(struct rb* _rb); +int rb_put(struct rb* _rb, char element); +int rb_get(struct rb* _rb, char *element); + +#endif /*DEVICE_RING_BUFFER_H*/ \ No newline at end of file