Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.046 c
3-1101518726
alo
2004-11-27 04:25
2004.12.26
получить ссылки всех контролов, прицепленных к DataSet у


1-1103102918
_Max_
2004-12-15 12:28
2004.12.26
Как отключить/перехватиывать буфер обмена Windows?


3-1101636673
Guma
2004-11-28 13:11
2004.12.26
Кодировка в MS SQL Server.


1-1103007188
dr Tr0jan
2004-12-14 09:53
2004.12.26
Почему к строке StringGrid нельзя применить Delete?


4-1100172577
frEEstyler
2004-11-11 14:29
2004.12.26
передать путь к файлу и его имя запущенной копии программы





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский