C#: отвечать на последовательное событие в определенное время

В моем проекте я хочу общаться через последовательный порт с устройством, которое управляется микроконтроллером AVR. На AVR запускается таймер, который выполняет цикл каждые 10 мс. Цикл должен выполнить около 2 мс, и в конце он отправляет сообщение на последовательный порт для запроса следующей команды. На моем компьютере запускается приложение C# Windows Forms, которое должно ответить на этот запрос за оставшиеся 8 мс, чтобы AVR получил новую команду для следующего цикла. У меня работает первый прототип, который может отвечать большую часть времени примерно за 2-3 мс, поэтому должна быть возможность достичь желаемой производительности. Проблема в том, что иногда (~ два раза в секунду) для ответа требуется больше времени (до 20 мс), что приводит к неисправности моего устройства.

Кто-нибудь знает решение этой проблемы?

Скорость передачи составляет 115200 кбит / с, запрос - 1 байт, команда ответа - 6 байт. Компьютер - это мобильная рабочая станция с процессором i7 (4 ядра /8 потоков), который более или менее простаивает.

Временное решение: я изменил время выборки с 10 мс до 50 мс. Мне нужно будет провести несколько тестов, чтобы увидеть, достаточно ли высока производительность.

1 ответ

Решение

Вы не можете сделать эту работу. Windows не похож на микроконтроллер AVR. Ваша программа Winforms не единственное, что она запускает, она также должна обслуживать множество других процессов и драйверов. Что, безусловно, означает, что ваша программа Winforms иногда не будет работать какое-то время, 45 мсек обычно на загруженной машине, сотни мсек не неслыханно. Или программа просто в лесу, собирает мусор. Gen #2 паузы GC нельзя игнорировать в.NET-программе.

Вам нужно переосмыслить свой подход.

Другие вопросы по тегам