Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как из под WIndows 9x/NT ловить прерывания? [Win95/98, NT4]


Страницы:   1 2 3

Ш-К ©   (2002-10-07 04:28:00) 

Есть проблема с получением данных через lpt порт. Заслать данные то я могу, а вот "поймать момент" когда порт начинает передавать данные - не получается.

Я использую TDLPortIO.dll, как драйвер пр. режима. Через него можно только читать данные. А как узнать "когда"?

Есл я понимаю правильно, надо обрабатывать int7. Или, может, есть какие обходные варианты для решения проблемы? Не только через прерывания.


Ш-К   (2002-10-24 07:31:00) [41]

Сразу скажу, что делаю это не ради удовольствия.

Сейчас у меня программа постоянно считывает состояние порта на предмет его измененний. Мне нужна реал-тайм оперативность, но греть из-за этого процессор просто глупо. Вот и нужны альтернативы.

Написать драйвер самому можно успеть всегда. Просто программный комплекс весь написан на Delphi и иметь заморочки ещё и с VC++ не разманно (весь создаваемый софт должен быть лицензионно чистый).

Если программа создана и работает исключительно на Delphi, но криво, то существует естественное желание сделать её "прямой" тоже исключительно на Delphi. Т.е. выправить фичу и переключиться на другие проблемы.

TDLPortIO.dll работает и под NT, иначе нахрен он был бы нужен. Другое дело, что ни он, ни какой другой свободно-распространяемый драйвер не поддерживает сабж. Ну, или то, что мне надо. Очень, кстати, нормально желание (не экзотика).

Мне не понятно, зачем люди вообще напрягаются, создают драйвера, которые не могут отвечать элементарным требованиям? Как, то, реагирование на изменения состояния регистра. После чего все советы: "Пишите сами".

Тема не закрыта.


DenKop   (2002-10-23 03:38:00) [42]


> Народ! Чё делать?


1)Я делал так. Открывал в отдельном потоке функцию, которая сравнивала текщее состояние линии порта (Н: ACK) с предидущим и если эти значения не совпадают -> на порт пришли данные.
Недостатком является то, что занимаю дополнительную ногу LPT порта и порта контроллера передающего данные. Но это устранил предачей и приёмом отдельными линиями для каждого направления + тактирующая = 3 входа LPT, т.е. получился паралельный порт с последовательной синхронизированной передачей. Меня это вполне устраивало, т.к. сверх скоростей мне нужно. И ещё пришлось подправить прошивку контроллера, мелочь, но всё же не приятно.

2)Свой драйвер, что довольно напряжно. Но дам маленький совет: выбираешь самую длинную ночь, берешь ящик пива, две банки кофе, открываешь С++ или ASM и погнал...

3)Выкинуть эту идею из головы и занятся более интересным делом.

Фуух, всё. Good Luck!

P.S. Для Low-Level работы с портами взгляни на библиотеку ZNTPort. IMHO, ZNTPort >> TDLPortIO.dll. Последняя на NT ядре не пашет, что крайне возмутительно.


Наезжалкин   (2002-10-22 10:09:00) [43]

>Народ! Чё делать?

1)Писать драйвер - заменитель std для LPT.

2)Бросать это дело.


Ш-К   (2002-10-22 05:18:00) [44]

Ну так что? Как мне узнать, что внешнее устройство выставило байт?

Может бывают какие-нить события драйвера и к ним можно подключиться? А прерывания совсем не надо юзать.

Народ! Чё делать?


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо