Как тормознуть Windows XP

Тема в разделе "WASM.WIN32", создана пользователем NSS, 21 апр 2011.

  1. NSS

    NSS New Member

    Публикаций:
    0
    Регистрация:
    21 апр 2011
    Сообщения:
    5
    Здравствуйте,

    написал программу для управления Шаговым движком. Мне нужно через LPT-порт с определенным интервалом времени выдавать комбинацию импульсов. Интервалы времени должны быть точными (не + - ).
    Под DOS все работает норм, а под винду работает нестабильно. В качестве таймера использовал:
    1. порт таймера $42,
    2. API функции QueryPerformanceFrequency и QueryPerformanceCounter
    3. RDTSC

    ни на одном из-них не смог добиться стабильности работы под Win XP.

    И тут я вспомнил, что когда-то давно к компу подключал промышленный специализированный Флэш-накопитель и когда запуска его программку по пересылки файлов, то в этот момент весь Windows вис вместе с мышкой и клавиатурой.

    И вопрос - как так сделать, чтобы в определенный момент времени моя программка тормозила винду и работала только одна с процессором, а потом обратно отдавала управление виндусу?

    P.S. Забыл добавить - проект в Delphi.
     
  2. cppasm

    cppasm New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    923
    Приоритет реального времени потоку поставь.
    SetPriorityClass()+SetThreadPriority().
     
  3. RET

    RET Well-Known Member

    Публикаций:
    17
    Регистрация:
    5 янв 2008
    Сообщения:
    789
    Адрес:
    Jabber: darksys@sj.ms
    Никак.
    Для таких задач используют вообще ОСРВ или в крайнем случае DOS
     
  4. gorodon

    gorodon New Member

    Публикаций:
    0
    Регистрация:
    19 окт 2009
    Сообщения:
    301
    NSS
    Возможно, вам подойдет продукт RTX(Real Time Extension) от VenturCom...(или аналогичный)
    Несколько лет назад видел реализованную с помощью него программу, отрабатывающую циклы вычислений 100 или даже 200Гц в реал-тайме.
     
  5. NSS

    NSS New Member

    Публикаций:
    0
    Регистрация:
    21 апр 2011
    Сообщения:
    5
    100 ... 200 Гц у меня отрабатывает на ура.
    Мне нужно 5000 гц и выше.
    И винда нужна для 1С и сети, а монопольное выделение процессора нужно изредка на 10-20 сек, примерно каждые 5 мин.

    Получается такая картина: оператор работает с базой, выбирает какое-то изделие, тут же жмет выполнить. 1С запускает, допустим, консольную программу с передачей
    необходимых параметров, и она уже тормозит винду со всем её барахлом, включает хитрые механизмы, они делают все что нужно и
    программка выключается. И т.д... пока не получится вообще обходиться без оператора ))).

    Я на этом сайте прочитал статью: "Перехват API функций в Windows NT (часть 3). Нулевое кольцо."
    и подумал, если есть возможность залезть туда, то может есть и возможность бортануть ядро виндуса на время ??? )))

    Неохота ставить второй комп с DOS или проектировать контроллеры.
     
  6. XshStasX

    XshStasX New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2008
    Сообщения:
    991
  7. NSS

    NSS New Member

    Публикаций:
    0
    Регистрация:
    21 апр 2011
    Сообщения:
    5
    Завтра попробую, но он относится тоже к API, так что высокой точности вряд ли можно ожидать:

    на API функциях QueryPerformanceFrequency и QueryPerformanceCounter я получал точность 2000 - 3000 тиков процессора

    а на регистре проца RDTSC 96 - 150 тиков.

    P.S. Блин, ну должен же быть какой-нибудь способ тормознуть ядро винды, хотя бы хакерский ).
     
  8. XshStasX

    XshStasX New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2008
    Сообщения:
    991
    Создать поток в ядре и повысить ему IRQL ?
    Попробуй все остальные потоки в системе приостановить.
     
  9. NSS

    NSS New Member

    Публикаций:
    0
    Регистрация:
    21 апр 2011
    Сообщения:
    5
    Знать бы как :dntknw:, - я в программировании лол. Оно скорее хобби, чем работа.
     
  10. f34534

    f34534 New Member

    Публикаций:
    0
    Регистрация:
    21 апр 2011
    Сообщения:
    4
    RET
    Кодим таймер, чтоб достаточно быстро тикал. Например апик - включаем профайлер. А далее ведь логично, ставим вектор на соответствующее таймеру прерывание. Просто же.

    А ось тормознуть не проблема, доставляем ипи, есть соответствующий функционал в ядре(помимо системного, общего назначения есть и отладочный). Что делает ось при знакомом вам синем огоньке.. ага в ступор все камни кроме текущего вводит. Сюда и копать.
     
  11. NSS

    NSS New Member

    Публикаций:
    0
    Регистрация:
    21 апр 2011
    Сообщения:
    5
    f34534 а можно немного поподробнее, а то мне не понятно с чего начать?
    Так сказать стартовый пинок )))))
     
  12. S_Alex

    S_Alex Alex

    Публикаций:
    0
    Регистрация:
    27 авг 2004
    Сообщения:
    561
    Адрес:
    Ukraine
    Было дело управлял и я шаговым (в Win98 правда) писал свой драйвер. Так вот пока движок не прокрутит целый круг винда висит как ... ) и болтается.
    Кидаю файлы. Может пригодятся. А то болтаются без дела уже 8 лет.
    Удачи.