КулЛиб - Скачать fb2 - Читать онлайн - Отзывы
Всего книг - 471027 томов
Объем библиотеки - 689 Гб.
Всего авторов - 219684
Пользователей - 102104

Впечатления

Олег про Матрос: Поход в магазин (Старинная литература)

...лять! Что это?!

Рейтинг: 0 ( 0 за, 0 против).
Serg55 про Самылов: Империя Превыше Всего (Боевая фантастика)

интересно... жду продолжение

Рейтинг: 0 ( 1 за, 1 против).
медвежонок про Дорнбург: Борьба на юге (СИ) (Альтернативная история)

Милый, слегка заунывный вестерн про гражданскую войну. Афтор не любит украинцев, они не боролись за свободу россиян. Его герой тоже не борется, предпочитает взять ростовский банк чисто под шумок с подельниками калмыками, так как честных россиян в Ростове не нашлось. Печалька.
Продолжения пролистаю.

Рейтинг: +3 ( 3 за, 0 против).
vovih1 про Шу: Последний Солдат СССР. Книга 4. Ответный удар (Боевик)

огрызок, автор еще не закончил книгу

Рейтинг: +1 ( 1 за, 0 против).
Colourban про серию Малахольный экстрасенс

Цикл завершён.

Рейтинг: +1 ( 1 за, 0 против).
Витовт про Малов: Смерть притаилась в зарослях. Очерки экзотических охот (Природа и животные)

Спасибо большое за прекрасную книгу. Отлично!

Рейтинг: +1 ( 1 за, 0 против).
ANSI про Ридерз Дайджест Reader’s Digest: Великие тайны прошлого (История)

без картинок ((( втопку!

Рейтинг: 0 ( 1 за, 1 против).

Работа с COM и LPT в Win32. (fb2)

- Работа с COM и LPT в Win32. 107 Кб, 43с.  (читать) (читать постранично) (скачать fb2) (скачать исправленную) - Олег Титов

Настройки текста:




Работа с коммуникационными портами (COM и LPT) в программах для Win32.

Мне часто задают вопросы о работе с СОМ портами из программ, написаных для Windows 95/98/NT. Причем чаще всего спрашивают разработчики всевозможных управляющих устройств. Эти устройства либо были разработаны давно, еще в эпоху MS-DOS, либо разрабатываются сейчас. Но объединяет их одно – устройство должно подключаться к компьютеру, в большинстве случаев через RS-232 (COM), реже, через Centronics (LPT).

В литературе, чаще всего, управление последовательным и параллельным портами описывается на уровне регистров этих портов, причем примеры программ приводятся на языке Assembler. Это не удивительно. Последовательный порт довольно медленное устройство, к тому же специфическое. Поэтому в программах работающих с портами используются прерывания. Параллельный порт быстрее, но тоже медленный и не менее специфичный. Взять хотя бы возможность этого порта работать в двух направлениях, да еще и с использованием ПДП (DMA).

Написать программу, управляющую устройством через COM порт, для MS-DOS не так сложно. Это частенько делали не программисты, а сами разработчики устройства. Сложнее было сделать красивый и удобный интерфейс пользователя. Этим обычно занимались профессиональные программисты. С платформой Win32 дело обстоит сложнее. Но только на первый взгляд. Конечно напрямую работать с регистрами портов нельзя, Windows это не позволяет, зато можно не обращать внимания на тонкости различных реализаций (i8055, 16450, 16550A) и не возиться с обработкой прерываний.

Описание программирования будет состоять из подробного описания функций, специфических для работы с портами, краткого описания функций работы с файлами (с портами в Win32 работают как с файлами), краткого описания функций многопотоковой обработки и, естественно, примеров программ.

Сразу хочу оговориться, что Windows требует точного соблюдения аппаратного протока обмена с внешними устройствами. Другими словами, у Вас не получится управлять, например, светодиодом подключенным к одному из выводов параллельного порта. Просто потому, что система будет требовать отработки и сигналов STROBE и ACK. Если Вас это не устраивает, то выход один – писать собственный драйвер вооружившись DDK. Это, конечно, очень интересная тема, но в данной статье я не буду ее касаться.

Как я уже говорил, с последовательными и параллельными портами в Win32 работают как с файлами. Следовательно, начинать надо с открытия порта как файла. Использовать привычные функции open и fopen при этом нельзя, необходимо воспользоваться функцией CreateFile. Эта функция предоставляется Win32 API. Ее прототип выглядит так:

HANDLE CreateFile(

 LPCTSTR lpFileName,

 DWORD dwDesiredAccess,

 DWORD dwShareMode,

 LPSECURITY_ATTRIBUTES lpSecurityAttributes,

 DWORD dwCreationDistribution,

 DWORD dwFlagsAndAttributes,

 HANDLE hTemplateFile

);

Функция имеет много параметров, большинство из которых нам не нужны. Приведу краткое описание параметров:

lpFileName

Указатель на строку с именем открываемого или создаваемого файла. Формат этой строки может быть очень хитрым. В частности можно указывать сетевые имена для доступа к файлам на других компьютерах. Можно открыват логические разделы или физические диски и работать в обход файловой системы. Однако для наших задач это не нужно. Последовательные порты имеют имена "COM1", "COM2", "COM3", "COM4" и так далее. Точно так же они назывались в MS-DOS, так что ничего нового тут нет. Параллельные порты называются "LPT1", "LPT2" и так далее. Учтите, что если у Вас к порту СОМ1 подключена мышь, Windows не даст открыть этот порт. Аналогично не удастся открыть LPT1 если подключен принтер. А вот с модемом дела обстоят немного по другому. Если какая-либо программа использует модем, например вы дозвонились до своего провайдера Internet, то Вашей программе не удастся открыть порт к которому подключен модем. Во всех остальных случаях порт будет открыт и Вы сможете работать с модемом сами, из своей программы.

dwDesiredAccess

Задает тип доступа к файлу. Возможно использование следующих значений:

0 Опрос атрибутов устройства без получения доступа к нему. GENERIC_READ Файл будет считываться. GENERIC_WRITE Файл будет записываться. GENERIC_READ|GENERIC_WRITE Файл будет и считываться и записываться.

dwShareMode

Задает параметры совместного доступа к файлу. Коммуникационные порты нельзя делать разделяемыми, поэтому данный параметр должен быть равен 0.

lpSecurityAttributes

Задает атрибуты защиты файла. Поддерживается только в Windows NT. Однако при работе с портами должен в любом случае равняться NULL.

dwCreationDistribution

Управляет режимами автосоздания, автоусечения файла и им подобными. Для коммуникационных портов всегда должно задаваться OPEN_EXISTING.

dwFlagsAndAttributes

Задает атрибуты