Форум: "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.041 c