Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.12.26;
Скачать: CL | DM;

Вниз

Пауза меньше 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 вся ветка

Текущий архив: 2004.12.26;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.023 c
1-1102820968
Rooster
2004-12-12 06:09
2004.12.26
проблема с TTreeView


3-1101447040
LEXX_55
2004-11-26 08:30
2004.12.26
SQL


1-1102087230
Начинающий2
2004-12-03 18:20
2004.12.26
Вопрос по реестру.


1-1102592157
DiamondShark
2004-12-09 14:35
2004.12.26
Трассировка порождённых процессов.


1-1102686117
Easter
2004-12-10 16:41
2004.12.26
TEdit ы на TForm