WinAPI COM-port

Loading thread data ...
Reply to
Michael Mamaev
Reply to
Sergey Davydov

Вначале записать "понял", потом сделать flush, потом переключить скорость. В этот момент могут пропасть входящие сообщения. (считай, что переключение скорости занимает время).

Hу и не программируй windows. Возьми любую сборку tclkit, прочитай из документации на tcl разделы про open, puts и fconfigure внимательно. Этого достаточно для того, чтоб писать примитивные программы работающие с COM-портом на простом и куда более удобном языке, чем C+winapi.

В "консольной программе" незазорно использовать C-библиотеку и не морочить себе голову winapi. В частности microsoft в своей libc имеет для этого функцию kbhit() -- определение доступности входных данных и getchar() -- чтение байта (не путать с кодом кнопки, который для того же ANSI терминала может состоять более чем из одного байта, для экзотических клавиш, и предваряется, что характерно, кодом ESC...) Hо, понятное дело, использовать функции libc, унаследованные от unix, непрофессионально по меньшей мере. Ведь страшные конструкции из вызовов WinApi, любой согласится, выглядят гораздо более внушительно.

Что касается чтении без ожидания, то во-первых исключительно для ком-портов (или терминалов в *nix) имеется возможность задавать таймаут на чтение (только для этих типов файлов!). Проблема в том, что microsoft как всегда извратил оригинальную идею и для неблокирующего чтения консоли придётся использовать windows аналог select() -- WaitForMultipleObjects(). Для последовательных портов по-преждему можно с таймаутом (нулевым).

Тогда обработка событий врукопашную в цикле. Без блокировки. Ибо вместо ESC нажать могут что угодно, и пока ты его не считаешь и не обработаешь, следующий за ним ESC не увидишь.

Reply to
Kirill Frolov

$ man kbhit No manual entry for kbhit $ uname -a Linux pc 2.6.18-4-686 #1 SMP Wed May 9 23:03:12 UTC 2007 i686 GNU/Linux

$ man kbhit No manual entry for kbhit $ uname -a FreeBSD 6.1-RELEASE FreeBSD 6.1-RELEASE #0: Tue May 16 01:09:13 CEST 2006

$ man kbhit man: no entry for kbhit in the manual. $ uname -a OpenBSD 4.1 GENERIC#1435 i386

Вот Solaris под рукой нет. Может там получится?

Reply to
Kirill Frolov

formatting link
(да, поиск чего-то в MSDN является тайным знанием, доступным только таким великим гуру, как сам Ричард Столлман или Билл Гейтс)

Reply to
Kirill Frolov
Reply to
Leha Bishletov
Reply to
Timur Sabiryanov
Reply to
Sergey Kosaretskiy

Именно "серьёзно" и можно, т.е. больше ничем не заниматься. Это отдельная специальность - вындовый драйверист. Довольно редкая, кстати. А с дискеты можно запросто не загрузиться. Или понадобится постоянно переключаться (перезагружаться): попробовал под ДОСом, перезагрузился в вынду, внёс изменения в отлаживаемую фирмварь, снова в ДОС... Я бы поставил парочку хорошо знакомых МК (для меня это МЕГи), связал бы их между собой чем-нибудь (хоть SPI, хоть самодельный протокл с обменом ниблами) и заставил бы одну общаться с писюком всегда на полной скорости, а другую - отрабатывать внешний протокол.

Reply to
Alexander Derazhne
Reply to
Timur Sabiryanov
Reply to
Timur Sabiryanov
Reply to
Timur Sabiryanov

Конечно, искать не нужно. Hо для того, чтобы что-то зашевелилось - хоть под вындами, хоть под юниксом - нужны усилия именно драйвериста. Другой вопрос, что мы этих усилий не видим, а только суём диск с готовыми драйверами в привод.

А потому что не работает. У меня, например, 3.5 дискетник просто дырку в морде прикрывает. Hа другой масынке, правда, есть ещё и 5", но не знаю рабочий-ли он, там АТ-материнка сдохла, ни заменить, ни отремонтировать (ха!). Так и стоит в качестве подставки для принтера. Да и нет уверенности, что ДОС подхватит современную железяку.

А где я её возьму (с "приданым", т.е. с клавиатурой, монитором и т.д.), куда поставлю и что буду делать с ней потом? Было у меня такое, пришлось одно время работать на двух машинах ради двух разных неуживающихся версий софта (Заказчик требовал поддержки обеих). Удовольствие ниже среднего.

Ключевые слова "я бы". _Я_ описываю то решение, которое _для_ _себя_ считаю наименее геморройным. Для программироваия чего-либо на писюке _я_ предпочитаю взять в руки джаву, а если нужен обмен через порт, то добавляю с сана джавакомм. А отработку времянок и разных нестандартностей лучше делать на МК. IMHO.

P.S. В самой постановке задачи есть подводный камень, который тут уже как-то обсуждался, правда, по другому поводу - нужно точно знать время физического "ухода" последнего стоп-бита.

>
Reply to
Alexander Derazhne
Reply to
Michael Mamaev

Вам -- нельзя. Остальным -- по мере возможностей...

Reply to
Kirill Frolov

А аффтар -- ламир. Hе знает, что классические *nix (да, да, фирмы AT&T) вполне являлись и workstation's и home pc. У меня дома такой стоит, так что я знаю о чём я. Равно как и современные *nix-like ОС бывают не только сервер-ориентированные. Так и что на Windows NT запосто делаются банкоматы и "столбики" для приёма денег у населения. Что существует Windows XP Embedded. Что тот же Debian, например, превращается из сервера в десктоп и обратно просто (не)установкой соответствующих софтов. И наконец, что нет никакой необходимости ни в Solaris, ни в BSD, ни в Linux, ни в Windows NT и 9x в драйверах для переключения скорости COM-порта...

Потому, что протухли они безнадёжно за последние 20 лет.

Reply to
Kirill Frolov

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.