Также файл uart имеет расширение .cpp для сборки на arduino ide. При билде через Atmel была та же самая проблема. В чем может быть проблема?
```
#include "client.h"
#include "protocol.h"
#include "uart.h"
#include "MyLCD.h"
struct Client hdlc;
void setup() {
init_lcd();
init_hdlc_client(&hdlc, 200);
char str[] = "wait for connect... ";
strncpy(wait.topLine, str, sizeof(str));
wait.value1 = 1.0f;
wait.value2 = 20.0f;
wait.value3 = 300.0f;
UART_init();
}
void loop() {
print_lcd(&wait);
}
```
Загружая этот код в arduino, экран ничего не выводит. Когда комментируем UART_init(), arduino выводит на экран значения.
Код UART_init():
```
void UART_init(void) {
UCSR0B = (1 << RXEN0) | (1 << TXEN0) | (1 << RXCIE0) | (1<<TXCIE0) | (1 << UDRIE0); // прерывание по приему и передаче
UCSR0C = (1 << UCSZ01) | (1 << UCSZ00);
UBRR0H = 0;
UBRR0L = 103;
}
```
Также файл uart имеет расширение .cpp для сборки на arduino ide. При билде через Atmel была та же самая проблема. В чем может быть проблема?
Проблему с инициализацией решили. Почему не выводятся данные в serial monitor для проверки UART_send? Модуль UART:
https://git.vyatsu.ru/ICS-Microprocessor-2020/Display_Avr_3/src/branch/uart/UART/uart.c
https://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%BB%D1%8C%D1%86%D0%B5%D0%B2%D0%BE%D0%B9_%D0%B1%D1%83%D1%84%D0%B5%D1%80 с [анимацией](https://en.wikipedia.org/wiki/Circular_buffer)
Читаем теорию.
Кто очищает буфер при отправке? Как именно?
Кто очищает буфер при приёме? Как именно?
Вот на эти вопросы ответить.
Тот, кто делал UART и ЦБ, должен ответить на вопросы здесь.
Кто очищает буфер при отправке? Как именно?
Кто очищает буфер при приёме? Как именно?
Тот, кто делал UART и ЦБ, должен ответить на вопросы здесь.
> Кто очищает буфер при отправке? Как именно?
>
> Кто очищает буфер при приёме? Как именно?
Функция clear_buffer() очищает буфер, устанавливая значения buf_head и buf_tail в 0. Она вызывается в функции UART_send после того, как все данные из массива data были добавлены в буфер передачи, и в функции UART_receive после успешного чтения данных из буфера приема.
Функция clear_buffer() очищает буфер, устанавливая значения buf_head и buf_tail в 0. Она вызывается в функции UART_send после того, как все данные из массива data были добавлены в буфер передачи, и в функции UART_receive после успешного чтения данных из буфера приема.
отрисовка этих диаграмм сейчас как то поможет решить ошибку?
Да. Потому что явно не хватает понимания того, что в какой момент происходит.
Нарисовал диаграмму изменения значений
Совсем не про то. У вас проблема отправить данные. Опустошение буфера должно происходить только в прерывании. Один байт достали из буфера и закинули его на отправку.
Вопрос! В случае, если в буфере есть 2 байта, сколько времени пройдёт между извлечением первого байта в буфере и второго? Модуль UART настроен так, как вы его настроили.
> отрисовка этих диаграмм сейчас как то поможет решить ошибку?
Да. Потому что явно не хватает понимания того, что в какой момент происходит.
> Нарисовал диаграмму изменения значений
Совсем не про то. У вас проблема отправить данные. Опустошение буфера должно происходить только в прерывании. Один байт достали из буфера и закинули его на отправку.
Вопрос! В случае, если в буфере есть 2 байта, сколько времени пройдёт между извлечением первого байта в буфере и второго? Модуль UART настроен так, как вы его настроили.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Загружая этот код в arduino, экран ничего не выводит. Когда комментируем UART_init(), arduino выводит на экран значения.
Код UART_init():
Также файл uart имеет расширение .cpp для сборки на arduino ide. При билде через Atmel была та же самая проблема. В чем может быть проблема?
В Atmel-проекте нет никаких
void setup()иvoid loop()Про ардуину не скажу наверняка.
Проблему с инициализацией решили. Почему не выводятся данные в serial monitor для проверки UART_send? Модуль UART:
https://git.vyatsu.ru/ICS-Microprocessor-2020/Display_Avr_3/src/branch/uart/UART/uart.c
не понял про
clear_buffer. Кстати. У вас в ПЗ у каждого будут представлены алгоритмы, по которым вы пишите код.Но буфер же сам не очистится после приема или передачи
https://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%BB%D1%8C%D1%86%D0%B5%D0%B2%D0%BE%D0%B9_%D0%B1%D1%83%D1%84%D0%B5%D1%80 с анимацией
Читаем теорию.
Кто очищает буфер при отправке? Как именно?
Кто очищает буфер при приёме? Как именно?
Вот на эти вопросы ответить.
Получается, что при заполненном буфере, просто перезаписываются старые данные и нет необходимости в нашем случае очищать вручную?
Тот, кто делал UART и ЦБ, должен ответить на вопросы здесь.
Функция clear_buffer() очищает буфер, устанавливая значения buf_head и buf_tail в 0. Она вызывается в функции UART_send после того, как все данные из массива data были добавлены в буфер передачи, и в функции UART_receive после успешного чтения данных из буфера приема.
Я и есть тот человек, кто разрабатывал UART
Нарисуйте временную диаграмму изменения значений головы и хвоста каждого из двух циклических буферов
отрисовка этих диаграмм сейчас как то поможет решить ошибку?
Нарисовал диаграмму изменения значений
Да. Потому что явно не хватает понимания того, что в какой момент происходит.
Совсем не про то. У вас проблема отправить данные. Опустошение буфера должно происходить только в прерывании. Один байт достали из буфера и закинули его на отправку.
Вопрос! В случае, если в буфере есть 2 байта, сколько времени пройдёт между извлечением первого байта в буфере и второго? Модуль UART настроен так, как вы его настроили.