• 🔥 Бесплатный курс от Академии Кодебай: «Анализ защищенности веб-приложений»

    🛡 Научитесь находить и использовать уязвимости веб-приложений.
    🧠 Изучите SQLi, XSS, CSRF, IDOR и другие типовые атаки на практике.
    🧪 Погрузитесь в реальные лаборатории и взломайте свой первый сайт!
    🚀 Подходит новичкам — никаких сложных предварительных знаний не требуется.

    Доступ открыт прямо сейчас Записаться бесплатно

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

  • Автор темы Автор темы Vetka
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.
V

Vetka

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

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

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


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

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

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab

Курс AD