Обработчик для двух COM портов
От: skm99  
Дата: 17.11.04 05:08
Оценка:
Есть задача, необходимо написать обработчик двух COM портов под Win2000, т.е. драйвер должен читать из обоих портов, анализировать и передавать буфер передачи только в тот, который отвечает условиям. Если обработчик делать из пользовательского приложения, то система иногда прерывает обработку, что нежелательно. Подскажите как это лучше реализовать.
Re: Обработчик для двух COM портов
От: ArtSh Россия  
Дата: 17.11.04 09:39
Оценка:
Здравствуйте, skm99, Вы писали:

S>Есть задача, необходимо написать обработчик двух COM портов под Win2000, т.е. драйвер должен читать из обоих портов, анализировать и передавать буфер передачи только в тот, который отвечает условиям. Если обработчик делать из пользовательского приложения, то система иногда прерывает обработку, что нежелательно. Подскажите как это лучше реализовать.


Что значит прерывает обработку? Вы открываете порт с установкой флагов FILE_SHARE_ ?
Re[2]: Обработчик для двух COM портов
От: skm99  
Дата: 18.11.04 02:48
Оценка:
Здравствуйте, ArtSh, Вы писали:

AS>Что значит прерывает обработку? Вы открываете порт с установкой флагов FILE_SHARE_ ?


Читаю я из порта нормально, но поток в котором происходит обработка иногда приостанавливается, например если в этот момент я печатаю на локальный принтер. Не помогает даже поднятие уровня приоритета SetThreadPriority(hThread, THREAD_PRIORITY_TIME_CRITICAL). Да и таких пар портов у меня 5.
Re[3]: Обработчик для двух COM портов
От: kirban Россия  
Дата: 18.11.04 13:19
Оценка:
Так она всегда будет прерывать, если обработка идет довольно долго.

Мне кажется тут два пути:
1. Повышать приоритет до уровня отладчика ядра, как например SoftIce. В этом случае операционка будет "висеть" пока обработка не закончится.

2. Ставить еще один компутер с операционкой реального времени, который
будет делать обработку, а в моменты времени когда обработка не производится пересылать результаты.
Re[4]: Обработчик для двух COM портов
От: ArtSh Россия  
Дата: 18.11.04 14:30
Оценка:
Здравствуйте, kirban, Вы писали:

K>Так она всегда будет прерывать, если обработка идет довольно долго.


Только если процесс с более выскоим приоритетом, если Вы работаете на уровне прерывания, то прервать будет очень трудно.
К тому же, наверное не нужна обработка в моменты когда данные загружабтся в буфер порта или он ожидает завершения передачи...

Несколько непонятно что конкретно должен делать обработчик и как быстро.
Re[5]: Обработчик для двух COM портов
От: kirban Россия  
Дата: 18.11.04 14:54
Оценка:
Здравствуйте, ArtSh, Вы писали:

AS>Только если процесс с более выскоим приоритетом, если Вы работаете на уровне прерывания, то прервать будет очень трудно.


Также не смогут прервать обработчики прерываний от видеокарты, и других устройств.

AS>Несколько непонятно что конкретно должен делать обработчик и как быстро.


Я согласен. Мне кажется лучше построить обработчик так чтобы ему было
наплевать на то что его прерывают. Мое мнение что сильные задирания приоритетов не лучший выход.
Re[5]: Обработчик для двух COM портов
От: skm99  
Дата: 22.11.04 08:52
Оценка:
Здравствуйте, ArtSh, Вы писали:

AS>Здравствуйте, kirban, Вы писали:


K>>Так она всегда будет прерывать, если обработка идет довольно долго.


AS>Только если процесс с более выскоим приоритетом, если Вы работаете на уровне прерывания, то прервать будет очень трудно.

AS>К тому же, наверное не нужна обработка в моменты когда данные загружабтся в буфер порта или он ожидает завершения передачи...

AS>Несколько непонятно что конкретно должен делать обработчик и как быстро.


Основное назначение обработчика это определить есть ли на данной линии ПК, если есть то необходимо начать передачу согласно таблицы приоритетов для всех ПК подключенных к данным линиям. Если более проще, то это примерно выглядит так:
У нас есть две линии Л1 — основная линия, Л2 — резервная. К обоим линиям подключены устройства, которые каждые 100 мили сек. предают кадры. После приема кадра от устройства ПК передает по Л1 (по основной), Л2 просто слушает, если Л1 не работает (не слышно кадра от устройства) необходимо подождать пока отработает ПК у которого Л2 основная (дождаться конца передачи) и передать по линии Л2. Самое главное вписаться по времени в цикл 100 мили сек. Размер данных (трафик) составляет 600 байт на скорости 115200 кБ/с за цикл. В случае если обработка прерывается то происходит наслоение приема/передачи и потеря информации нескольких циклов (от 1 до 3) для всех ПК подключенных к линиям. Единственный способ, я считаю это вынос работу с портами область наибольшего приоритета ОС.
Так все таки как объединить два порта в одно устройство? Может есть у кого либа или исходники для работы с serial.sys из драйвера?
Re[6]: Обработчик для двух COM портов
От: ArtSh Россия  
Дата: 22.11.04 20:28
Оценка:
Здравствуйте, skm99, Вы писали:

Если у Вас 5 пар, то получается, что на работу операционной системе остается около 80мс(в зависимости от таймаутов). Этого, по идее, вполне достаточно, для нормальной работы ОС. Я думаю что лучше всего быдет поставить таймер, и раз в 100мс опрашивать все пары портов, и делать соответствующую обработку(поищите по форуму, здесь уже обсуждалось, как передать IOCTL запрос в другой драйвер).
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.