Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2004.11.14;
Скачать: [xml.tar.bz2];

Вниз

Точность...   Найти похожие ветки 

 
X-RayMan   (2004-10-04 23:32) [0]

Есть устройство на которое необходимо посылать данные со строго определенными временными интервалами. Интервалы порядка микросекунд. Обычный таймер для этого не сильно подходит :). Есть еще мультимедийные таймер, но на сколько я понял, его точность - миллисекунды. Есть ли еще какой-то метод решить эту проблему кроме написания своего драйвера?


 
GanibalLector ©   (2004-10-04 23:56) [1]

ИМХО,в твоей ОС такого не реализовать.
З.Ы. И драйвер тебе не поможет!Почему???Читаем Дж.Рихтера


 
jack128 ©   (2004-10-05 00:14) [2]

X-RayMan   (04.10.04 23:32)
А куда оно эти данные посылает?? На ком порт что ли ? ;-))


 
Cobalt ©   (2004-10-05 00:25) [3]

2 X-RayMan

Используй внешнее устройство. Программируй его на определённое поведение.
Если требуется более сложная логика - то реализуй всё аппаратно - врядли будет недостаток в аппаратной базе.


 
X-RayMan   (2004-10-05 00:38) [4]

2 GannibalLector
Я конечно не спец в вопросах драйверов, но неужели и режиме ядра такого сделать нельзя? Можно же перепрограммировать системный таймер на нужную частоту.

2 jack128:
А какая разница для конкретно этого вопроса? Или если я буду писать на лпт или на еще куда-то то это имеет разницу?

2 Cobalt:
Тоже вариант, я над этим думал :). Аппаратно это реализовать легко - просто интересно, можно ли это сделать средствами компьютера...


 
GanibalLector ©   (2004-10-05 00:45) [5]

Аппаратно это реализовать легко - просто интересно, можно ли это сделать средствами компьютера...
Нет,средствами микроконтроллеров.Благо они ЩА дешевые.Минус в том,что нужно на АСМе писать(люблю я это дело)


 
GanibalLector ©   (2004-10-05 00:48) [6]

Можно же перепрограммировать системный таймер на нужную частоту.
Это было во времена ДОСа.И то,не уверен...можно ли такую частоту???Книг под рукой жаль нет.


 
X-RayMan   (2004-10-05 00:50) [7]

А что, со времен досА изменились принципы обработки аппаратных прерываний?


 
GanibalLector ©   (2004-10-05 00:55) [8]

А что, со времен досА изменились принципы обработки аппаратных прерываний?
Ну попробуй обратиться к регистрам процессора из своей ОС.


 
X-RayMan   (2004-10-05 00:58) [9]

Ну, дык, напрямую нельзя :(. А через драйвер... Вот хотя бы есть тут у меня драйвер для лптШника, так он прям в порты и пишет.


 
GanibalLector ©   (2004-10-05 00:58) [10]

Пардон,не к регистрам процессора а к подсистеме таймера и часов реального времени.Могу даже дать адреса


 
GanibalLector ©   (2004-10-05 01:04) [11]

А через драйвер
Ну,не знаю.Могу сказать одно.Дядька Рихтер говорит,что ОС Windows не является ОС реального времени.Да ты и сам подумай,около 300 потоков постоянно работаю...их приоритеты постоянно меняются.Имхо,в твоем случае или менять ОС или,что более приемлемо использовать микроконтроллер.


 
X-RayMan   (2004-10-05 01:04) [12]

Ну мало ли... Я ж говорю, что я не спец по драйверам.


 
GanibalLector ©   (2004-10-05 01:05) [13]

Я ж говорю, что я не спец по драйверам.
Я тоже


 
X-RayMan   (2004-10-05 01:07) [14]

:)


 
jack128 ©   (2004-10-05 01:59) [15]

X-RayMan   (05.10.04 0:38) [4]
я сомневаюсь, что com или параллельный порт способны выявить задержку порядка микросекунду - поэтому и интересуюсь..


 
XProger ©   (2004-10-05 22:55) [16]


function GetTimer: integer;
var
T, F : LARGE_INTEGER;
begin
QueryPerformanceFrequency(int64(F));
QueryPerformanceCounter(int64(T));
Result := trunc(1000 * T.QuadPart/F.QuadPart);
end;


Можно избавиться от целочисленного представления... И будет тебе сверх точный таймер.
Во время инициализации желательно присвоить потоку приложения высший приоритет (осторожно может подвесить систему! :)


 
X-RayMan   (2004-10-06 22:53) [17]

2 XProger:
10x! Три с половиной миллиона раз в секунду - вполне приемлимая точность :).


 
GanibalLector ©   (2004-10-07 01:34) [18]

вполне приемлимая точность :).
От Лукавого все это!!!


 
SammIk ©   (2004-10-07 02:46) [19]

Вот счетчик тиков процессора, точность зависит от многово.
Желательно приоритет повыше(как у процесса, так и у потока, если много поточное приложение).
Тики на секунды сам перещитывай, макросы для MASMa
Давно как-то такоеже понадобилось.
Юзаи, и не будет тебе никаких левых вызовов(на них тоже время тратится).
юзается так:
p_s start:QWORD;int64
чего-то там что считать
p_e start:QWORD,count:QWORD


в count получаешь количество тиков прошедших за это время.
сдесь введина поправка на pushad.

Так что, если есть руки и голова, то можно переделать
в таимер.

p_s macro v1:REQ
   pushad
   db 0fh,31h;Команда процессору
   mov v1+4,edx
   mov v1,eax
   popad
endm
p_e macro v1:req,v2:req
   pushad
   db 0fh,31h
   mov v2+4,edx
   mov v2,eax
   
   pushad
   popad
   db 0fh,31h
   sub eax,v2
   jnc m1
   dec edx
m1:  
   sub edx,v2+4
   mov eax,v1
   sub v2,eax  
   jnc m2
   dec v2+4
m2:
   mov eax,v1+4
   sub v2+4,eax
   
   popad
   
endm



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2004.11.14;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.044 c
14-1098390278
123
2004-10-22 00:24
2004.11.14
Кнут.


1-1098850367
Franzy
2004-10-27 08:12
2004.11.14
"Теологический" вопрос о динамических массивах


14-1099122352
Дмитрий___
2004-10-30 11:45
2004.11.14
Защита от скачивания MP3


1-1099401614
~Shaman~
2004-11-02 16:20
2004.11.14
работа со строками


9-1089775193
Somebody
2004-07-14 07:19
2004.11.14
API vs DelphiX





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский