Проблема чтения нескольких последовательных портов с использованием SerialDataReceivedEventHandler - PullRequest
2 голосов
/ 17 марта 2011

У меня есть два устройства, которые передают данные в мое приложение. Одно устройство, которое непрерывно передает 9-байтовые пакеты данных, оканчивающиеся на «\ r \ n» со скоростью 1 пакет каждые 50 мс до COM1. Второе устройство отправляет 38-байтовый пакет, оканчивающийся '\ r \ n', на COM3, только когда устройство запущено.

У каждого есть совершенно разные SerialDataReceivedEventHandler, и каждый работает в своей собственной dll, помещая их в разные потоки.

COM1 SerialDataReceivedEventHandler всегда работает хорошо.

COM3 SerialDataReceivedEventHandler будет работать хорошо, если данные не передаются в COM1.

Однако, когда COM1 SerialDataReceivedEventHandler работает и COM3 SerialDataReceivedEventHandler работает, COM1 SerialDataReceivedEventHandler запускается немедленно, когда данные доступны, но COM3 SerialDataReceivedEventHandler срабатывает до 12 секунд, когда данные доступны. * 1009

Сдерживает ли COM1 SerialDataReceivedEventHandler COM3 SerialDataReceivedEventHandler от запуска? Или, может быть, что-то еще происходит под капотом SerialDataReceivedEventHandler? Есть идеи?

1 Ответ

3 голосов
/ 17 марта 2011

По умолчанию COM1 и COM3 используют одну и ту же линию прерывания, чтобы сигнализировать о появлении данных, предполагая, что это реальные последовательные порты. Можно ли настроить один из портов на COM2 или COM4? COM1 и COM3 совместно используют IRQ 4, а COM2 и COM4 совместно используют IRQ 3.

Вы можете посмотреть на это с помощью диспетчера устройств (вы можете запустить devmgmt.msc, чтобы запустить его).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...