Форум: "WinAPI";
Текущий архив: 2004.12.26;
Скачать: [xml.tar.bz2];
ВнизПауза меньше 1 милисекунды Найти похожие ветки
← →
Maclaud © (2004-11-11 11:17) [0]Работаю с железякой через LPT. Железяка кидает в порт сигналы с частатой 125 кГц (125000 раз/сек) = 125 раз/1мс.
Нужно в цикле через каждую 1/125 мс читать из LPT порта.
← →
TUser © (2004-11-11 11:18) [1]Это невозможно
← →
Maclaud © (2004-11-11 11:21) [2]Почему?
Я видел проги (комерчиские) которые позволяли и 200 кГц скорость ставить.
← →
TUser © (2004-11-11 11:25) [3]В цикле ты можешь читать столько раз сколько железо позволяет. 125 раз в мс - все равно много, наверное.
Сделать паузу длиной в 1/125 мс (что ты просил) - нельзя. Так работает таймер. Этот вопрос тут много раз обсуждался. Общий вердикт - нельзя.
← →
Maclaud © (2004-11-11 11:54) [4]А какую минимальную задержку можно сделать?
Дело в том что, раньше это было написано под линух но теперь понадобилось портануть под win. В линухе помимо sleep есть usleep в котором задаются промежутки в микро-секундах. И это значит что, такое бывает. Я думаю что под win тоже что-то должно быть.
← →
Maclaud © (2004-11-11 11:58) [5]Точнее не usleep А nanosleep
← →
NAlexey © (2004-11-11 11:59) [6]>TUser © (11.11.04 11:25) [3]
>Общий вердикт - нельзя.
А доказательства?
← →
REA (2004-11-11 12:23) [7]Драйверок однако надо писать ИМХО. В общем случае Windows не обеспечивает приложениям такую точность по времени (это не система реального времени). Т.е. сделать наверно можно и так, но работать будет кривенько.
← →
TUser © (2004-11-11 12:24) [8]Не поддерживаются аппаратно такие возможности. И никакой Линукс не спасет.
> А доказательства?
Их нет, также как нет доказательств несуществования Бога, Деда Мороза и Змея Горыныча. Если вы можете написать код, который сделает такую задержку - это будет доказательством моей неправоты.
← →
wnew © (2004-11-11 12:45) [9]REA (11.11.04 12:23) [7]
> В общем случае Windows не обеспечивает приложениям
> такую точность по времени (это не система реального
> времени).
Как так, Win не система реального времени? У нас на фирме на металообрабатывающих центрах с ЧПУ на стойках устнановленны WinNT и даже Win98, и в очень даже реальном времени происходит управление обработкой деталей с точностью 0,001mm. А на прецизиозном измерительном роботе управляемом с обыкновенного ПС точность измерений 0,0001mm.
Понятно, что произойдёт, если Windows не успеет среагировать на какой-либо сигнал, пришедший от станка, но ничего не случается по вине системы и всё работает корректно.
На эту тему, вероятно можно поинтересоваться на http://www.sprut.ru, там ребята как раз и занимаются системами управления станков с ЧПУ.
← →
Maclaud © (2004-11-11 12:50) [10]А если привязаться к тактам процессора?
Допустим на 100 мГц проце один такт будет равняться 1/100000000 с.
Вставив в цикл операцию:
asm nop; end; //которая выполняется 3 такта (вроде)
то можно делать задержку на 3/100000000 с = 3/100000 мс = 3/100 мкс.
Или я не прав.
Ну конечно, если при этом запретить операционной системе тебя прерывать, во время выполнения цикла. Или можно просто поставить самый высокий приоритет своей программе.
Кстати как он ставиться (приоритет выполнения программы)?
← →
TUser © (2004-11-11 12:53) [11]
> Или я не прав.
Не прав. Прерывание по таймеру в любой момент - и система передает управление иному процессу. А твой процесс будет много тактов ждать.
← →
Maclaud © (2004-11-11 12:58) [12]А если это взять в рамки cli sti? меня точность таймера не особо волнует.
← →
VMcL © (2004-11-11 13:02) [13]>>wnew © (11.11.04 12:45) [9]
>Как так, Win не система реального времени?
Нет.
← →
VMcL © (2004-11-11 13:06) [14]>>Maclaud © (11.11.04 12:58) [12]
На уровне приложения нельзя вызывать CLI/STI, по крайней мере в ОС семейства Windows NT.
← →
SammIk © (2004-11-11 13:07) [15]2 Maclaud ©
А если система отдаст время процессора другому потоку или программе?
Вообщем поищи по форуму, гдето я писал как сделать таймер на асме
который в принципе ограничивается только частотой процессора(да осью с ее переключениями), если не найдешь поищю у себя да выложу сюда.
← →
Maclaud © (2004-11-11 13:20) [16]2VMcL
>>На уровне приложения нельзя вызывать CLI/STI, по крайней мере в ОС семейства Windows NT.
А как его на зеро вывести? Как вообще процессу(у него один поток) самый высокий приоритет выставить?
2SammIk
http://www.delphimaster.ru/cgi-bin/faq.pl?look=1&id=988621408&n=15
Это оно?
← →
Маг Похмеляйнен (2004-11-11 16:49) [17]Есть такая ф-я: KeStallExecutionProcessor().
Поинтересуйтесь. Это на счёт "не поддерживается".
Можно использовать из своего драйвера.
Даёт гарантированную задержку до 50мкс.
← →
KilkennyCat © (2004-11-11 18:47) [18]http://delphimaster.net/view/4-1099843607/
← →
Maclaud © (2004-11-11 19:22) [19]А кто-что по поводу этой статьи скажет?
http://www.mycomputer.ua/text/6406;jsessionid=1C4E5BF46E1D64ACC37F7E80EE51030C
← →
Erik1 © (2004-11-12 13:06) [20]Если связать с преведущеми сылками, то получается лажа.
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2004.12.26;
Скачать: [xml.tar.bz2];
Память: 0.52 MB
Время: 0.051 c