Разрабатываю модель тестирования Windows XP на выполнение задач реального времени. Принцип модели - внешнее устройство(Atmega16 + макетная плата с RS232 интерфейсом) соединен с ПК через com порт. Устройство по своему системному времени(встроенный real time clock) засекает время и отправляет запрос на некое обслуживание, Windows принимает запрос, запускает поток с неким эмулированием обслуживания, после завершения выдает контроллеру сигнал окончания, тот находит разницу между временем запроса и временем ответа, что и есть время обслуживания. Модель создает несколько таких операций и строит график разниц этих времен. Обслуживание выполняю в режиме пользователя на realtime приоритетах и в режиме ядра в DPC. Оцениваю стабильность временных характеристик в обоих режимах. Меня интересуют Ваши коментарии и предложения по методу тестирования. Возник вопрос - в режиме ядра в DPC при не загруженной системе разница между итерациями включает в себя такую величену как 781мкс, есть ли у кого нибуть идеи, что это за время? Прикрепил скриншоты в обоих режимах. Буду рад всем ответам
Я как-то увлекался чем-то подобным - у меня получалось вполне стабильно ловить прерывания LPT с периодом в 100us, причем ловил прерывания в User Mode. 781 - что-то много, возможно можно сэкономить на лишнем создании потока, лучше его возобновлять по событию.
Было подобное, работал из User-mode. CreateFile("COM1"). Настройка параметров COM-порта функциями API. Вечный кайф ~20 раз в секунду по обмену данными. Кольцо работы с COM-портом веделял в отдельный поток. Передавал сообщения между потоками разными способами: - по Event, которым запускалась процедура COM-порта (WaitSingleObject - точно не помню). Ответ - WM_COMMAND основному окну програмы; - неименоваными каналами. Да, читать/писать в порт ReadFile, WriteFile. Успехов!