Работа с com портами #16

Open
opened 2024-02-22 15:27:34 +00:00 by stud126186 · 15 comments
Owner

С помощью программы https://freevirtualserialports.com/ смогли открыть 2 виртуальных порта на windows.

Проверили с помощью терминалов(https://micro-pi.ru/terminal-1-9b-работаем-com-портом/) соединение, все работает.

Взяли за основу код с сайта: https://www.pololu.com/docs/0J73/15.6, указали в коде один из новосозданных ком портов.

Получаем в ответ ошибку: Failed to flush serial port: The request is not supported. Что это может быть?

С помощью программы https://freevirtualserialports.com/ смогли открыть 2 виртуальных порта на windows. Проверили с помощью терминалов(https://micro-pi.ru/terminal-1-9b-работаем-com-портом/) соединение, все работает. Взяли за основу код с сайта: https://www.pololu.com/docs/0J73/15.6, указали в коде один из новосозданных ком портов. Получаем в ответ ошибку: Failed to flush serial port: The request is not supported. Что это может быть?
Owner

Взяли за основу код с сайта: https://www.pololu.com/docs/0J73/15.6, указали в коде один из новосозданных ком портов.

Ссылка на исходник?

> Взяли за основу код с сайта: https://www.pololu.com/docs/0J73/15.6, указали в коде один из новосозданных ком портов. Ссылка на исходник?
Author
Owner

Немного не понял, про какой исходник вы имете в виду. Программа подключения была взята полностью с сайта, единственное был поменян ком порт, и все.

Немного не понял, про какой исходник вы имете в виду. Программа подключения была взята полностью с сайта, единственное был поменян ком порт, и все.
Author
Owner

Если ориентироваться на код с этого сайта: https://ru.wikibooks.org/wiki/COM-порт_в_Windows_(программирование)

А именно в самом низу пример кода, то он выдает следующую ошибку: terminate called after throwing an instance of 'TTYException'

Если ориентироваться на код с этого сайта: https://ru.wikibooks.org/wiki/COM-порт_в_Windows_(программирование) А именно в самом низу пример кода, то он выдает следующую ошибку: terminate called after throwing an instance of 'TTYException'
Owner

Если ориентироваться на код с этого сайта: https://ru.wikibooks.org/wiki/COM-порт_в_Windows_(программирование)

А именно в самом низу пример кода, то он выдает следующую ошибку: terminate called after throwing an instance of 'TTYException'

Слишком мало информации, чтобы я сказал в чём проблема. Может у вас не тот ком порт указан. Не понятно, в какой момент вылетает TTYException.

И вообще этот пример один из многих. Можно посмотреть иные реализации работы с COM портом.

> Если ориентироваться на код с этого сайта: https://ru.wikibooks.org/wiki/COM-порт_в_Windows_(программирование) > > А именно в самом низу пример кода, то он выдает следующую ошибку: terminate called after throwing an instance of 'TTYException' > Слишком мало информации, чтобы я сказал в чём проблема. Может у вас не тот ком порт указан. Не понятно, в какой момент вылетает `TTYException`. И вообще этот пример один из многих. Можно посмотреть иные реализации работы с COM портом.
Author
Owner

А как построить логику работы с uart? В том плане, мы же через него отправляли байты, а теперь отправляем через com порт, нужен ли он или какая логика?

А как построить логику работы с uart? В том плане, мы же через него отправляли байты, а теперь отправляем через com порт, нужен ли он или какая логика?
Author
Owner

Сделал как понимаю на ком портах, без уарта

11b9374377

Сделал как понимаю на ком портах, без уарта https://git.vyatsu.ru/ICS-Microprocessor-2020/Display_Avr_3/commit/11b937437781008674552572ab2731405da1a0c3
Author
Owner

Ещё возник вопрос, а как мы будем открывать com-порты на атмеге, это же нормально можно сделать только на каком либо компьютере. Не понимаю логику. Или нужно сделать отдельную программу, или же наоборот запускаем все с ноутбука? Желательно как можно точный ответ дать на это все, чтобы уже закончить с кодом курсового проекта

Ещё возник вопрос, а как мы будем открывать com-порты на атмеге, это же нормально можно сделать только на каком либо компьютере. Не понимаю логику. Или нужно сделать отдельную программу, или же наоборот запускаем все с ноутбука? Желательно как можно точный ответ дать на это все, чтобы уже закончить с кодом курсового проекта
Owner

11b9374377 (diff-61dc8f359adeef7fca8a9b8943be203afe1e2008)

папку Debug нельзя коммитить, т.к. на получается в результате сборки. Вы засоряете репозиторий.

Читаем дружно про .gitignore

https://git.vyatsu.ru/ICS-Microprocessor-2020/Display_Avr_3/commit/11b937437781008674552572ab2731405da1a0c3#diff-61dc8f359adeef7fca8a9b8943be203afe1e2008 папку Debug нельзя коммитить, т.к. на получается в результате сборки. Вы засоряете репозиторий. Читаем дружно про [.gitignore](https://docs.github.com/ru/get-started/getting-started-with-git/ignoring-files)
Owner

У вас COM-порт на атмеге и есть UART. Код был написан. Внутри кода для микроконтроллера у вас есть доступ ко ВСЕМ регистрам устройства.

При разработке прикладного ПО для любой ОС вы имеете API, не имеете прямой доступ к регистрам COM-порта (это всё тот же UART). Вот так с регистрами работают внутри ядра Linux https://elixir.bootlin.com/linux/latest/source/drivers/tty/serial/8250

У вас COM-порт на атмеге и есть UART. Код был написан. Внутри кода для микроконтроллера у вас есть доступ ко ВСЕМ регистрам устройства. При разработке прикладного ПО для любой ОС вы имеете API, не имеете прямой доступ к регистрам COM-порта (это всё тот же UART). Вот так с регистрами работают внутри ядра Linux https://elixir.bootlin.com/linux/latest/source/drivers/tty/serial/8250
Author
Owner

Хорошо, как нам эмулировать подачу байтов в uart на устройство? Пока есть мысли о том, чтобы написать отдельное приложение на другом языке, которое будет эмулировать второе устройство на прием и отправку.

Хорошо, как нам эмулировать подачу байтов в uart на устройство? Пока есть мысли о том, чтобы написать отдельное приложение на другом языке, которое будет эмулировать второе устройство на прием и отправку.
Owner

С помощью программы https://freevirtualserialports.com/ смогли открыть 2 виртуальных порта на windows.

Вот у вас есть указанная вами программа, это вся эмуляция.

Вы пишите программу, которая использует вашу же реализацию HDLC, а UART'ом выступает COM-порт. Запустите эту программу на Windows два раза: один для первого порта, другую для другого. Потом, когда у вас будет устройство-ардуино, вы запустите программу только один раз: вы укажите COM-порт ардуины.

> С помощью программы https://freevirtualserialports.com/ смогли открыть 2 виртуальных порта на windows. Вот у вас есть указанная вами программа, это вся эмуляция. Вы пишите программу, которая использует вашу же реализацию HDLC, а UART'ом выступает COM-порт. Запустите эту программу на Windows два раза: один для первого порта, другую для другого. Потом, когда у вас будет устройство-ардуино, вы запустите программу только один раз: вы укажите COM-порт ардуины.
Owner

2ad07a39c5 в этом коммите вы тоже выгрузили бинарные компилируемые файлы (мусор)

https://git.vyatsu.ru/ICS-Microprocessor-2020/Display_Avr_3/commit/2ad07a39c5b52693c7d6572f447e17d76787e562 в этом коммите вы тоже выгрузили бинарные компилируемые файлы (мусор)
Author
Owner

То есть, мы должны запустить наш код на ардуино, подключенную к ноутбуку, понять какой это com-порт, и через программу freevirtualserialports создать remote порт, подключиться к нему через код, как в
https://git.vyatsu.ru/ICS-Microprocessor-2020/Display_Avr_3/src/branch/dev/hdlc_screen/main_com.c
только с одним портом? А для проверки создать 2 порта, как в main и сделано

То есть, мы должны запустить наш код на ардуино, подключенную к ноутбуку, понять какой это com-порт, и через программу freevirtualserialports создать remote порт, подключиться к нему через код, как в https://git.vyatsu.ru/ICS-Microprocessor-2020/Display_Avr_3/src/branch/dev/hdlc_screen/main_com.c только с одним портом? А для проверки создать 2 порта, как в main и сделано
Owner

На встрече вы мне продемонстрируете работу своего кода для Атмеги: у вас будет прошитое устройство, котрое будет подключено к PC, на котором будет запущена модифицированная ваша программа.

1-Страница — 1.drawio.png

Дома, пока у вас нет ардуины, вы можете потестить работу своей программы на эмуляторе COM-портов.

1-Страница — 2.drawio.png

Как я сейчас вижу, ваша программа для AVR есть в коммите 2ad07a39c5 , а для Windows вы разрабатываете программу в 11b9374377

На встрече вы мне продемонстрируете работу своего кода для Атмеги: у вас будет прошитое устройство, котрое будет подключено к PC, на котором будет запущена модифицированная ваша программа. ![1-Страница — 1.drawio.png](/attachments/b4e20567-a61f-46ae-94b3-453c4c69c666) Дома, пока у вас нет ардуины, вы можете потестить работу своей программы на эмуляторе COM-портов. ![1-Страница — 2.drawio.png](/attachments/019dd65e-6663-4ada-b5df-969b4d7a25cd) Как я сейчас вижу, ваша программа для AVR есть в коммите https://git.vyatsu.ru/ICS-Microprocessor-2020/Display_Avr_3/commit/2ad07a39c5b52693c7d6572f447e17d76787e562 , а для Windows вы разрабатываете программу в https://git.vyatsu.ru/ICS-Microprocessor-2020/Display_Avr_3/commit/11b937437781008674552572ab2731405da1a0c3
Author
Owner

Все поправил и сделал, но есть одна проблема. При попытке вывода строки на экран в строчке

printf("str: %s\n", resp.str);
выходит ошибка -1073741819 (0xC0000005) и программа завершается, как это решить? Уже не первый раз сталкиваюсь с этой ошибкой при разработке протокола

Все поправил и сделал, но есть одна проблема. При попытке вывода строки на экран в строчке https://git.vyatsu.ru/ICS-Microprocessor-2020/Display_Avr_3/src/commit/d223f7839211dd069fed68e9cdd56550551fde90/hdlc_screen/main_com.c#L167 выходит ошибка -1073741819 (0xC0000005) и программа завершается, как это решить? Уже не первый раз сталкиваюсь с этой ошибкой при разработке протокола
Sign in to join this conversation.
No Label
No Milestone
No project
No Assignees
2 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: ICS-Microprocessor-2020/Display_Avr_3#16
No description provided.