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

Вниз

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

 
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 вся ветка

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

Наверх




Память: 0.51 MB
Время: 0.023 c
3-1097211442
Xmen
2004-10-08 08:57
2004.11.14
Связь с MySQL


4-1096901315
bgs
2004-10-04 18:48
2004.11.14
Добавить пользователя в вин 2000 средствами делфи


4-1096206369
nomshar
2004-09-26 17:46
2004.11.14
Dll injection


3-1097733194
sanek
2004-10-14 09:53
2004.11.14
как создать таблицу с полем memo?


14-1098903138
Луарвик
2004-10-27 22:52
2004.11.14
ИИ в играх