[an error occurred while processing this directive] [an error occurred while processing this directive]
Абсолютно точно.
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)
[an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive]

Отправлено vmp 26 октября 2001 г. 09:34
В ответ на: Ответ: точно из DOS сессии? Может речь о консольном приложении (внешне то они неотличимы)? отправлено Михаил Евстафьев 25 октября 2001 г. 19:48

Специально писал такую программу, которая могла бы работать как под чистым ДОСом, так и в ДОС-сессии. Встроенная в винды поддержка эмуляции COM-портов не удовлетворяла по двум причинам:
1. Если программа обратилась к COM-порту, то он остается навечно закрепленным за этой ДОС-сессией. Даже Win32 console программа, запущенная из-под этой сессии не имеет к нему доступа.
2. Теряются байты при приеме больших блоков, особенно если на машине запущено несколько задач.

Для работы пользовался VCOMM Protected mode API. Сначала определяется точка входа - int 2Fh/AX=1684h/BX=2Bh. На выходе в ES:DI - точка входа. Затем открываем порт AX=VCOMM_PM_API_OpenCom, BX=номер порта-1, вызываем по указанному адресу. Получаем в DX:AX handle.
Дальше надо создать буфера - VCOMM_PM_API_Setup. Здесь в MSDN первая ошибка - в стек нужно перед вызовом запихнуть лишнее слово.
Потом - установить режимы работы VCOMM_PM_API_SetCom. Здесь в MSDN еще одна ошибка - вместо DCB нужно давать совсем другую структуру, в документации не описанную. В ней поля уже 16-битные (а не 32), идут в совсем другом порядке.
Дальше можно начинать работать с портом - VCOMM_PM_API_ctx, VCOMM_PM_API_ReadString. По окончании не забыть его закрыть - VCOMM_PM_API_TrmCom, иначе порт будет неодоступен до следующей перезагрузки виндов.

Короче, поставить себе на машину MSDN+DDK+SoftICE и день покопаться.
Прикладная программа писалась на BC 3.1, проверялась под Win98SE.

Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru