COM порт и отработка по прерыванию
Модератор: trubb
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
- mastertron
- мл. сержант
- Сообщения: 107
- Зарегистрирован: 2009-02-06 20:48:53
- Откуда: Украина, Одесса
COM порт и отработка по прерыванию
Не программист, но ... жизнь заставила. Пишу на Lazarus.
Стоит задача: на com (usb_to_com) висит аппаратный контроллер, большую часть времени молчит.
Что б отбирать минимальные ресурсы, мне хотелось бы написать резидентную ( не обязательно) программу, которая отрабатывала бы по прерыванию от порта, а не сканировала его периодически. Не знаю, как подползти к решению. Работа с com портами - нашел inout32.dll , описание есть, но как реагировать на прерывание? Или я не туда рулю? Может это в принципе уже не используется на NT/ХР... Подскажите чего нибудь, оптимальное решение, в какую сторону рулить.
Стоит задача: на com (usb_to_com) висит аппаратный контроллер, большую часть времени молчит.
Что б отбирать минимальные ресурсы, мне хотелось бы написать резидентную ( не обязательно) программу, которая отрабатывала бы по прерыванию от порта, а не сканировала его периодически. Не знаю, как подползти к решению. Работа с com портами - нашел inout32.dll , описание есть, но как реагировать на прерывание? Или я не туда рулю? Может это в принципе уже не используется на NT/ХР... Подскажите чего нибудь, оптимальное решение, в какую сторону рулить.
Делай как нибудь, а как надо - само получится!
Услуги хостинговой компании Host-Food.ru
Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/
- Alex Keda
- стреляли...
- Сообщения: 35436
- Зарегистрирован: 2004-10-18 14:25:19
- Откуда: Made in USSR
- Контактная информация:
Re: COM порт и отработка по прерыванию
врятли тут найдутся спецы по этому языку...
Убей их всех! Бог потом рассортирует...
- dekloper
- ст. лейтенант
- Сообщения: 1331
- Зарегистрирован: 2008-02-24 15:43:19
- Откуда: давно здесь сидим..
- Контактная информация:
Re: COM порт и отработка по прерыванию
да не в языке дело
просто в нт все "резиденты" могут быть в виде службы, драйвера режима ядра.. либо вируса..
ежели вы не дровописец, то врятли сможете контролировать прерывания порта прогой на каком то лазарусе в юзермоде..
а рулить - хук на исключение (структурное, векторное), но это уже ринг 0..
просто в нт все "резиденты" могут быть в виде службы, драйвера режима ядра.. либо вируса..

ежели вы не дровописец, то врятли сможете контролировать прерывания порта прогой на каком то лазарусе в юзермоде..
а рулить - хук на исключение (структурное, векторное), но это уже ринг 0..
ТОВАгИЩИ! БгАТЬЯ И СЕСТгЫ! ДОЛОЙ гАВНОДУШИЕ!
- mastertron
- мл. сержант
- Сообщения: 107
- Зарегистрирован: 2009-02-06 20:48:53
- Откуда: Украина, Одесса
Re: COM порт и отработка по прерыванию
Ну да, драйвера - не моё. Имел дело с программированием железа под DOS, но эт савсем другой уровень.
Искал вариант в общем виде подобно реакции на событие, к примеру - у многих компонент есть 'OnKeyPress' , в это событие вписываем код . Чего то подобного с буфером приемника порта наверняка предусмотрено или в каком нибудь компоненте или может ... просто незнаю
В принципе пока тестирую опросом по таймеру - ничё, працюет.
Не хочу "хорошо", хочу "идеально"
Искал вариант в общем виде подобно реакции на событие, к примеру - у многих компонент есть 'OnKeyPress' , в это событие вписываем код . Чего то подобного с буфером приемника порта наверняка предусмотрено или в каком нибудь компоненте или может ... просто незнаю

В принципе пока тестирую опросом по таймеру - ничё, працюет.
Не хочу "хорошо", хочу "идеально"

Делай как нибудь, а как надо - само получится!
-
- сержант
- Сообщения: 258
- Зарегистрирован: 2009-10-31 22:13:04
- Контактная информация:
Re: COM порт и отработка по прерыванию
C++ and assembler юзайте.
- BlackCat
- прапорщик
- Сообщения: 469
- Зарегистрирован: 2007-10-16 22:40:42
Re: COM порт и отработка по прерыванию
mastertron, прерывания и прочие прелести прямого доступа к железу в WinNT с пользовательского уровня не доступны (легальным образом), да и не должно их быть там. А что бы обрабатывать данные по мере их поступления обратите внимание на т.н. асинхронный ввод-вывод.
=====
Каким именно образом вы проверяете наличие данных? Обычно, при попытке чтения из порта, если данных во внутреннем буфере драйвера нет, то поток исполнения блокируется до появления принятых данных.
=====
Каким именно образом вы проверяете наличие данных? Обычно, при попытке чтения из порта, если данных во внутреннем буфере драйвера нет, то поток исполнения блокируется до появления принятых данных.
-
- проходил мимо
Re: COM порт и отработка по прерыванию
Для дельфи3-7 есть компонета BComPort. Оч удобная , с демопроектами. Разобраться легко. В хелпе есть описание событий - например:
OnRxChar
В приемный буфер порта поступили данные
type TRxCharEvent = procedure(Sender: TObject; Count: Integer) of object;
property OnRxChar: TRxCharEvent;
Описание
Происходит при поступлении в приемный буфер порта как минимум одного байта данных от внешнего устройства. Count – количество поступивших байтов данных.
Кажись это вам надо. Под Lazarus бы её перекомпилить, но тот ругается, что поддеривает только статические.. и нужна версия LCL >= 1.0 Если получится - отпишитесь.
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 порт и отработка по прерыванию
Вобсчем, метода работы по аппаратному прерыванию не нашел. В принципе, создав отдельный поток и по таймеру читая файл компорта - вполне устроило.
Делай как нибудь, а как надо - само получится!
- BlackCat
- прапорщик
- Сообщения: 469
- Зарегистрирован: 2007-10-16 22:40:42
Re: COM порт и отработка по прерыванию
И не найдёте, для NT с пользовательского уровня.mastertron писал(а):Вобсчем, метода работы по аппаратному прерыванию не нашел.
Асинхронный ввод-вывод рассматривали в качестве альтернативы? Чтение по срабатыванию таймера чревато или отсутствием приемлемого времени реакции или чрезмерной загрузкой процессора.mastertron писал(а):В принципе, создав отдельный поток и по таймеру читая файл компорта - вполне устроило.