Это подразумевает запуск Cygwin под Windows XP. У меня есть подлинный последовательный порт (COM1) на этой машине.
После загрузки программа, которую я написал, получает искаженные ответы при попытке установить связь через последовательный порт. Если я запускаю Гипертерминал и устанавливаю скорость "бод", затем выхожу, с этого момента все работает нормально.
Сначала я попытался установить скорость из программы (используя вызовы termios), но это не сработало. Поэтому я решил попробовать изменить скорость с помощью существующей утилиты. Использование команды, такой как stty -F /dev/ttyS0 9600
, допускается, и если я попробую другую скорость, я увижу изменение, когда я проверю ее с помощью stty -F /dev/ttyS0
. Но это не оказывает видимого влияния на фактическую скорость.
Мне трудно представить, что если Cygwin не сможет изменить скорость передачи данных, я не найду такого утверждения в своем поиске. Но я не нашел ничего подобного.
Я предполагаю, что это может быть какая-то настройка, отличная от бит в секунду, которую нужно исправить. Но я не вижу ничего в возвращенном отчете, чтобы предположить это. Возможно, я проверю это, пытаясь выяснить, с какой скоростью это происходит.
Изменить: я проверил с помощью осциллографа, и скорость передачи (выход, по крайней мере) действительно меняется на 9600, как я и предполагал. Итак, я сейчас собираюсь посмотреть на другие возможные настройки, которые могут мешать связи.
Решение: Одна вещь, которая очень помогла, - это мое открытие, что виртуальный последовательный порт USB будет самопроизвольно инициализироваться каждый раз, когда он отключен. Это избавило от необходимости перезагрузки хоста, чтобы отменить все, что HyperTerminal делал для устранения проблемы. Таким образом, я смог сделать много тестов за короткое время.
Решение пришло, когда я нашел команду stty -F /dev/ttyS0 -a
чтобы получить все параметры порта. Я запустил его до и после того, как позволил HyperTerminal "решить" проблему, записав результаты в файлы и затем используя результаты сравнения. Результаты: cs7
. Это количество бит в каждом символе. Что-то по умолчанию инициализирует последовательные порты N-7-1. Решение, таким образом, так же просто, как:
stty -F /dev/ttyS0 9600 cs8
Примечание. Первоначальная проблема началась с вызовов termios. Там же можно применить то же решение. Но это вопрос, который необходимо решать в Stackoverflow.