Какие параметры функции? Что вообще ждать от функции? Нужна ли она вообще?
https://git.vyatsu.ru/ICS-Microprocessor-2020/Display_Avr_3/src/commit/e6a1ad36c216a074f5b5ca87c20692255a0ef8f8/UART/circular_buf.c#L1
Что значат эти includes, зачем каждая нужна?
https://git.vyatsu.ru/ICS-Microprocessor-2020/Display_Avr_3/src/commit/e6a1ad36c216a074f5b5ca87c20692255a0ef8f8/UART/circular_buf.h#L4
на сколько можно увеличить и уменьшить размер буфера? Могу ли увеличить размер на 1, на 2, уменьшить на 1, 2, 10? Почему?
https://git.vyatsu.ru/ICS-Microprocessor-2020/Display_Avr_3/src/commit/e6a1ad36c216a074f5b5ca87c20692255a0ef8f8/UART/main.c#L43
Warning
https://git.vyatsu.ru/ICS-Microprocessor-2020/Display_Avr_3/src/commit/e6a1ad36c216a074f5b5ca87c20692255a0ef8f8/UART/main.c#L60
Какие параметры функции? Что вообще ждать от функции? Нужна ли она вообще?
stud126165
was assigned by stud1261862023-11-08 08:14:17 +00:00
Что значат эти includes, зачем каждая нужна?
#include <stdio.h> подключаем заголовочный файл, который содержит функции ввода-вывода.
#include <stdlib.h> заголовок (заголовочный файл) стандартной библиотеки общего назначения языка Си,
который содержит в себе функции, занимающиеся выделением памяти, контроль процесса выполнения программы, преобразования типов и другие.
#include "circular_buf.h" подключаем заголовочный файл кольцевого буфера.
На сколько можно увеличить и уменьшить размер буфера? Могу ли увеличить размер на 1, на 2, уменьшить на 1, 2, 10? Почему?
В зависимости от передаваемого пакета чуть больше
максимума приема, размер должен быть степенью двойки.
2, 4, 8, 16, 32, 64, 128, 256.
По функции UART_receive, я добавил более подробные комментарии к коду. Она будет использоваться в главной программе для получения данных из буфера приема. Пока мы еще решаем вопрос с объединением вместе всех модулей.
Что значат эти includes, зачем каждая нужна?
#include <stdio.h> подключаем заголовочный файл, который содержит функции ввода-вывода.
#include <stdlib.h> заголовок (заголовочный файл) стандартной библиотеки общего назначения языка Си,
который содержит в себе функции, занимающиеся выделением памяти, контроль процесса выполнения программы, преобразования типов и другие.
#include "circular_buf.h" подключаем заголовочный файл кольцевого буфера.
На сколько можно увеличить и уменьшить размер буфера? Могу ли увеличить размер на 1, на 2, уменьшить на 1, 2, 10? Почему?
В зависимости от передаваемого пакета чуть больше
максимума приема, размер должен быть степенью двойки.
2, 4, 8, 16, 32, 64, 128, 256.
По функции UART_receive, я добавил более подробные комментарии к коду. Она будет использоваться в главной программе для получения данных из буфера приема. Пока мы еще решаем вопрос с объединением вместе всех модулей.
Зачем в заголовочнике объявлять экземпляры структуры? Каждый раз, когда вы напишите #include "uart.h" у вас будет объявлены переменные (экземпляры).
Вижу usartTxBuffer встречается по коду только 3 раза. Оно вообще зачем?
Вы вообще собрали проект? Для проверки достаточно собрать и запустить проект только со своим модулем UART. Например сделать main, который будет отправлять все полученные байты обратно. Это очень простая и эффективная проверка работы любого интерфейса.
Вам тут таймаут на приём вообще зачем? Чего вы ждёте? Вам нужно получить все байты из UART и отдать их по первому требованию быстро без тормозов.
https://git.vyatsu.ru/ICS-Microprocessor-2020/Display_Avr_3/src/commit/80cd73c3d606748e33223f0ac6a83ff285cbcbe5/UART/uart.h#L10
Зачем в заголовочнике объявлять экземпляры структуры? Каждый раз, когда вы напишите #include "uart.h" у вас будет объявлены переменные (экземпляры).
Вижу `usartTxBuffer` встречается по коду только 3 раза. Оно вообще зачем?
Вы вообще собрали проект? Для проверки достаточно собрать и запустить проект только со своим модулем UART. Например сделать main, который будет отправлять все полученные байты обратно. Это очень простая и эффективная проверка работы любого интерфейса.
https://git.vyatsu.ru/ICS-Microprocessor-2020/Display_Avr_3/src/commit/80cd73c3d606748e33223f0ac6a83ff285cbcbe5/UART/uart.c#L34
Вам тут таймаут на приём вообще зачем? Чего вы ждёте? Вам нужно получить все байты из UART и отдать их по первому требованию быстро без тормозов.
Прошу указывать коммит, где вы учли замечания. Так понимаю это 5c4e2be040
В итоге теперь отправка стала синхронная: пока отправляются байты мы ничем другим заниматься не можем. У нас только входящие байты в UART поступают во входящий кольцевой буфер.
Нужно было доделать отправку данных из исходящего кольцевого буфера. То есть укладываем данные в кольцевой буфер на отправку, включаем прерывание блока UART на прерывание и уже в прерывании достаём следующий байт из кольцевого буфера. Так реализован Serial в Arduino. Вам осталось написать обработчик прерывания и немного UART_send.
Прошу указывать коммит, где вы учли замечания. Так понимаю это 5c4e2be040adc2b1ab081be1011043e9fa4b1537
В итоге теперь отправка стала синхронная: пока отправляются байты мы ничем другим заниматься не можем. У нас только входящие байты в UART поступают во входящий кольцевой буфер.
Нужно было доделать отправку данных из исходящего кольцевого буфера. То есть укладываем данные в кольцевой буфер на отправку, включаем прерывание блока UART на прерывание и уже в прерывании достаём следующий байт из кольцевого буфера. Так реализован Serial в Arduino. Вам осталось написать обработчик прерывания и немного `UART_send`.
69e8412315 Забыл вчера бит TXCIE0 разрешения прерывания при передаче установить в 1, поправил
https://git.vyatsu.ru/ICS-Microprocessor-2020/Display_Avr_3/commit/69e84123150eec148d9d9a81bb49ab71c761efe0 Забыл вчера бит TXCIE0 разрешения прерывания при передаче установить в 1, поправил
Верное направление. Одно но. При таком подходе вы как только выйдите из USART_TX_vect при пустом буфере тут же попадёте в USART_TX_vect. TXCIE0 именно разрешает прерывание по завершению передачи. При пустом буфере надо запретить. А разрешить когда - вам на подумать.
Верное направление. Одно но. При таком подходе вы как только выйдите из `USART_TX_vect` при пустом буфере тут же попадёте в `USART_TX_vect`. `TXCIE0` именно разрешает прерывание по завершению передачи. При пустом буфере надо запретить. А разрешить когда - вам на подумать.
https://onlinedocs.microchip.com/pr/GUID-85E9B23E-BE9C-47EA-AED9-E8719EA2F7AF-en-US-2/GUID-73CB1E14-0C43-4A15-AA94-3D8AF6E17C6A.html
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.
Что значат эти includes, зачем каждая нужна?
на сколько можно увеличить и уменьшить размер буфера? Могу ли увеличить размер на 1, на 2, уменьшить на 1, 2, 10? Почему?
Warning
Какие параметры функции? Что вообще ждать от функции? Нужна ли она вообще?
Что значат эти includes, зачем каждая нужна?
#include <stdio.h> подключаем заголовочный файл, который содержит функции ввода-вывода.
#include <stdlib.h> заголовок (заголовочный файл) стандартной библиотеки общего назначения языка Си,
который содержит в себе функции, занимающиеся выделением памяти, контроль процесса выполнения программы, преобразования типов и другие.
#include "circular_buf.h" подключаем заголовочный файл кольцевого буфера.
На сколько можно увеличить и уменьшить размер буфера? Могу ли увеличить размер на 1, на 2, уменьшить на 1, 2, 10? Почему?
В зависимости от передаваемого пакета чуть больше
максимума приема, размер должен быть степенью двойки.
2, 4, 8, 16, 32, 64, 128, 256.
По функции UART_receive, я добавил более подробные комментарии к коду. Она будет использоваться в главной программе для получения данных из буфера приема. Пока мы еще решаем вопрос с объединением вместе всех модулей.
Зачем в заголовочнике объявлять экземпляры структуры? Каждый раз, когда вы напишите #include "uart.h" у вас будет объявлены переменные (экземпляры).
Вижу
usartTxBufferвстречается по коду только 3 раза. Оно вообще зачем?Вы вообще собрали проект? Для проверки достаточно собрать и запустить проект только со своим модулем UART. Например сделать main, который будет отправлять все полученные байты обратно. Это очень простая и эффективная проверка работы любого интерфейса.
Вам тут таймаут на приём вообще зачем? Чего вы ждёте? Вам нужно получить все байты из UART и отдать их по первому требованию быстро без тормозов.
Учел ваши замечания, убрал таймаут и поправил метод приема. Собрал проект с тестированием методов приема и отправки в Atmel с debug, ошибок не увидел.
Прошу указывать коммит, где вы учли замечания. Так понимаю это
5c4e2be040В итоге теперь отправка стала синхронная: пока отправляются байты мы ничем другим заниматься не можем. У нас только входящие байты в UART поступают во входящий кольцевой буфер.
Нужно было доделать отправку данных из исходящего кольцевого буфера. То есть укладываем данные в кольцевой буфер на отправку, включаем прерывание блока UART на прерывание и уже в прерывании достаём следующий байт из кольцевого буфера. Так реализован Serial в Arduino. Вам осталось написать обработчик прерывания и немного
UART_send.Хорошо, сейчас займусь этим
458b145297поправил UART_send и настроил обработчик69e8412315Забыл вчера бит TXCIE0 разрешения прерывания при передаче установить в 1, поправилВерное направление. Одно но. При таком подходе вы как только выйдите из
USART_TX_vectпри пустом буфере тут же попадёте вUSART_TX_vect.TXCIE0именно разрешает прерывание по завершению передачи. При пустом буфере надо запретить. А разрешить когда - вам на подумать.https://onlinedocs.microchip.com/pr/GUID-85E9B23E-BE9C-47EA-AED9-E8719EA2F7AF-en-US-2/GUID-73CB1E14-0C43-4A15-AA94-3D8AF6E17C6A.html
e999651e09исправил этот момент