COM порт и отработка по прерыванию

Программирование на Pascal

Модератор: trubb

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
mastertron
мл. сержант
Сообщения: 107
Зарегистрирован: 2009-02-06 20:48:53
Откуда: Украина, Одесса

COM порт и отработка по прерыванию

Непрочитанное сообщение mastertron » 2010-10-22 14:09:13

Не программист, но ... жизнь заставила. Пишу на Lazarus.
Стоит задача: на com (usb_to_com) висит аппаратный контроллер, большую часть времени молчит.
Что б отбирать минимальные ресурсы, мне хотелось бы написать резидентную ( не обязательно) программу, которая отрабатывала бы по прерыванию от порта, а не сканировала его периодически. Не знаю, как подползти к решению. Работа с com портами - нашел inout32.dll , описание есть, но как реагировать на прерывание? Или я не туда рулю? Может это в принципе уже не используется на NT/ХР... Подскажите чего нибудь, оптимальное решение, в какую сторону рулить.
Делай как нибудь, а как надо - само получится!

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 34889
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: COM порт и отработка по прерыванию

Непрочитанное сообщение Alex Keda » 2010-10-25 20:35:51

врятли тут найдутся спецы по этому языку...
Убей их всех! Бог потом рассортирует...

Аватара пользователя
dekloper
ст. лейтенант
Сообщения: 1280
Зарегистрирован: 2008-02-24 15:43:19
Откуда: давно здесь сидим..
Контактная информация:

Re: COM порт и отработка по прерыванию

Непрочитанное сообщение dekloper » 2011-01-06 22:50:09

да не в языке дело
просто в нт все "резиденты" могут быть в виде службы, драйвера режима ядра.. либо вируса.. :)
ежели вы не дровописец, то врятли сможете контролировать прерывания порта прогой на каком то лазарусе в юзермоде..
а рулить - хук на исключение (структурное, векторное), но это уже ринг 0..
ТОВАгИЩИ! БгАТЬЯ И СЕСТгЫ! ДОЛОЙ гАВНОДУШИЕ!

Аватара пользователя
mastertron
мл. сержант
Сообщения: 107
Зарегистрирован: 2009-02-06 20:48:53
Откуда: Украина, Одесса

Re: COM порт и отработка по прерыванию

Непрочитанное сообщение mastertron » 2011-01-07 0:15:47

Ну да, драйвера - не моё. Имел дело с программированием железа под DOS, но эт савсем другой уровень.
Искал вариант в общем виде подобно реакции на событие, к примеру - у многих компонент есть 'OnKeyPress' , в это событие вписываем код . Чего то подобного с буфером приемника порта наверняка предусмотрено или в каком нибудь компоненте или может ... просто незнаю :(
В принципе пока тестирую опросом по таймеру - ничё, працюет.
Не хочу "хорошо", хочу "идеально" :)
Делай как нибудь, а как надо - само получится!


Аватара пользователя
BlackCat
прапорщик
Сообщения: 468
Зарегистрирован: 2007-10-16 22:40:42

Re: COM порт и отработка по прерыванию

Непрочитанное сообщение BlackCat » 2011-01-10 12:32:27

mastertron, прерывания и прочие прелести прямого доступа к железу в WinNT с пользовательского уровня не доступны (легальным образом), да и не должно их быть там. А что бы обрабатывать данные по мере их поступления обратите внимание на т.н. асинхронный ввод-вывод.
=====
Каким именно образом вы проверяете наличие данных? Обычно, при попытке чтения из порта, если данных во внутреннем буфере драйвера нет, то поток исполнения блокируется до появления принятых данных.

iDimk0
проходил мимо

Re: COM порт и отработка по прерыванию

Непрочитанное сообщение iDimk0 » 2011-01-27 15:13:39

Для дельфи3-7 есть компонета BComPort. Оч удобная , с демопроектами. Разобраться легко. В хелпе есть описание событий - например:

OnRxChar
В приемный буфер порта поступили данные

type TRxCharEvent = procedure(Sender: TObject; Count: Integer) of object;

property OnRxChar: TRxCharEvent;

Описание

Происходит при поступлении в приемный буфер порта как минимум одного байта данных от внешнего устройства. Count – количество поступивших байтов данных.
Кажись это вам надо. Под Lazarus бы её перекомпилить, но тот ругается, что поддеривает только статические.. и нужна версия LCL >= 1.0 Если получится - отпишитесь.

Аватара пользователя
mastertron
мл. сержант
Сообщения: 107
Зарегистрирован: 2009-02-06 20:48:53
Откуда: Украина, Одесса

Re: COM порт и отработка по прерыванию

Непрочитанное сообщение mastertron » 2011-03-02 23:38:13

Вобсчем, метода работы по аппаратному прерыванию не нашел. В принципе, создав отдельный поток и по таймеру читая файл компорта - вполне устроило.
Делай как нибудь, а как надо - само получится!

Аватара пользователя
BlackCat
прапорщик
Сообщения: 468
Зарегистрирован: 2007-10-16 22:40:42

Re: COM порт и отработка по прерыванию

Непрочитанное сообщение BlackCat » 2011-03-02 23:56:46

mastertron писал(а):Вобсчем, метода работы по аппаратному прерыванию не нашел.
И не найдёте, для NT с пользовательского уровня.
mastertron писал(а):В принципе, создав отдельный поток и по таймеру читая файл компорта - вполне устроило.
Асинхронный ввод-вывод рассматривали в качестве альтернативы? Чтение по срабатыванию таймера чревато или отсутствием приемлемого времени реакции или чрезмерной загрузкой процессора.


Вернуться в «Delphi, Lazarus, Free Pascal»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость