Здравствуйте, написал программу для управления Шаговым движком. Мне нужно через LPT-порт с определенным интервалом времени выдавать комбинацию импульсов. Интервалы времени должны быть точными (не + - ). Под DOS все работает норм, а под винду работает нестабильно. В качестве таймера использовал: 1. порт таймера $42, 2. API функции QueryPerformanceFrequency и QueryPerformanceCounter 3. RDTSC ни на одном из-них не смог добиться стабильности работы под Win XP. И тут я вспомнил, что когда-то давно к компу подключал промышленный специализированный Флэш-накопитель и когда запуска его программку по пересылки файлов, то в этот момент весь Windows вис вместе с мышкой и клавиатурой. И вопрос - как так сделать, чтобы в определенный момент времени моя программка тормозила винду и работала только одна с процессором, а потом обратно отдавала управление виндусу? P.S. Забыл добавить - проект в Delphi.
NSS Возможно, вам подойдет продукт RTX(Real Time Extension) от VenturCom...(или аналогичный) Несколько лет назад видел реализованную с помощью него программу, отрабатывающую циклы вычислений 100 или даже 200Гц в реал-тайме.
100 ... 200 Гц у меня отрабатывает на ура. Мне нужно 5000 гц и выше. И винда нужна для 1С и сети, а монопольное выделение процессора нужно изредка на 10-20 сек, примерно каждые 5 мин. Получается такая картина: оператор работает с базой, выбирает какое-то изделие, тут же жмет выполнить. 1С запускает, допустим, консольную программу с передачей необходимых параметров, и она уже тормозит винду со всем её барахлом, включает хитрые механизмы, они делают все что нужно и программка выключается. И т.д... пока не получится вообще обходиться без оператора ))). Я на этом сайте прочитал статью: "Перехват API функций в Windows NT (часть 3). Нулевое кольцо." и подумал, если есть возможность залезть туда, то может есть и возможность бортануть ядро виндуса на время ??? ))) Неохота ставить второй комп с DOS или проектировать контроллеры.
Завтра попробую, но он относится тоже к API, так что высокой точности вряд ли можно ожидать: на API функциях QueryPerformanceFrequency и QueryPerformanceCounter я получал точность 2000 - 3000 тиков процессора а на регистре проца RDTSC 96 - 150 тиков. P.S. Блин, ну должен же быть какой-нибудь способ тормознуть ядро винды, хотя бы хакерский ).
RET Кодим таймер, чтоб достаточно быстро тикал. Например апик - включаем профайлер. А далее ведь логично, ставим вектор на соответствующее таймеру прерывание. Просто же. А ось тормознуть не проблема, доставляем ипи, есть соответствующий функционал в ядре(помимо системного, общего назначения есть и отладочный). Что делает ось при знакомом вам синем огоньке.. ага в ступор все камни кроме текущего вводит. Сюда и копать.
f34534 а можно немного поподробнее, а то мне не понятно с чего начать? Так сказать стартовый пинок )))))
Было дело управлял и я шаговым (в Win98 правда) писал свой драйвер. Так вот пока движок не прокрутит целый круг винда висит как ... ) и болтается. Кидаю файлы. Может пригодятся. А то болтаются без дела уже 8 лет. Удачи.