Скоростной доступ к Lpt-порту в Delphi.

Тема в разделе "Delphi - Система", создана пользователем Vetka, 10 ноя 2007.

Статус темы:
Закрыта.
  1. Vetka

    Vetka Гость

    Подскажите, плиз, как в Delphi выводить импульсы длительностью менее 1 мкс в LPT-порт? Интервалы стандартного таймера не укорачиваются меньше нескольких десятков мкс. Пробовал использовать бесконечный цикл, но в этом случае интервалы очень зависят от загруженности процессора. С портом прога общается при помощи библиотеки InPOut32.dll (скачал из инета).
     
  2. Silver Wind

    Silver Wind Гость

    Гарантировано никак. Windows не является операционной системой реального времени. Не факт что твой процесс будет получать необходимые для этого ресурсы процессора.

    Если необходима подобная точность/скорость работы с сигналами, то средствами Windows ты ее не добьешься.

    И, кстати, не факт что все LPT-порты поддерживают режим обмена на такой скорости.


    Ну и по поводу таймеров.
    Стандартный Windows-таймер имеет дискретность порядка 50мс. Т.е. даже если указать интервал в 1 мс - всеравно получишь примерно 50мс. В добавок ко всему прочему сообщения WM_TIMER имеют очень низкий приоритет и могут теряться в очереди при большой загрузке.

    Подключив модуль MMSystem, можно использовать более точный, с меньшей дискретностью, мультимедийный таймер.
    В таком случае, в зависимости от задачи, может помочь использование мультимедийного таймера вкупе с потоком имеющим повышенный приоритет. Но даже такой подход не может гарантировать, что какя-нибудь запущенная параллельно программа не сожрет так необходимые тебе ресурсы.
     
  3. zubr

    zubr Гость

    Для: Vetka
    Я когда то писал программатор для микроконтроллеров. Там тоже необходимы были малые интервалы времени. Для этого делал следующее:
    1. Программа выдавала предупредительное сообщение пользователю не трогать мышь, клавиатуру, другие приложения.
    2. Устанавливал высокий приоритет для своего приложения на период процесса программирования.
    3. Перед запуском процедуры программирования микроконтроллера проводился программный тест определения количества времени на какое то количество циклов функции GetTickCount. То есть в зависимости от состояния системы, время на n-ое количество циклов было разное. Исходя из полученного времени, определялось количество циклов для проседуры Delay.
     
  4. onyx

    onyx Гость

Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей