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