|
Дата: 19 Фев, 09:07
Нужно делать небольшую паузу, порядка 50 мксек.
Попробовал использовать информацию из osinfo
Получается такая картина:
timesel.cycles_per_second - вроде бы правильное значение
хорошо согласуется со значениями, полученными при помощи
RDTSC
А вот тики из timesel.cycle_lo и timesel.cycle_hi "тикают" примерно в 1500 раз медленнее.
Почему?
|
|
Дата: 26 Фев, 15:17
to alexdon
Проблемы в этой области бывают разные:
- процессор может неправильно считать циклы по RDTSC;
- обработчик SMI может забивать работой процессор так, что прерыванию теряются;
- влиять power managment: процессор может перегреваться и в SMI обработчике будет снижаться его тактовая частота. Это актуально для Pentium M и т.п. процессорных плат.
Какая у вас проц. плата? Какой BIOS? Что в программе делаете? Давайте уж пример кода...
|
|
Дата: 27 Фев, 09:27
После проведенных экспериментов выяснил следующее:
судя по всему это суммарное значение счетчика таймера (обновляется каждый тик таймера).
То есть не пригодно для отсчета малых промежутков времени.
|
|
Дата: 27 Фев, 14:30 · Поправил: A_O
А чего вы ожидали? Разумеется, ОС не может считать время с точностью большей, чем позволяет интервал системного таймера. Минимально возможное его значение в qnx4 составляет 100 мкс (в qnx6 - 10 мкс). Если вам надо меньше, встроенные средства ОС не годятся.
|
|
Дата: 27 Фев, 18:50
to alexdon
Для выдерживания пауз меньших 1мс следует использовать другие аппаратные счетчики: RDTSC или внешние платы с ПЛИС (может и на плате есть). Системное время тактируемое от Int0 конечно же тут не поможет.
|
|
Дата: 27 Фев, 18:57
Да, напомню, что сейчас практически на каждой проц. плате стоит ПЛИС для её внутренних нужд. Запас места для прошивки в них, как правило, всегда остается. Поэтому если очень надо, то в него всегда можно будет добавить несколько аппаратных счетчиков.
Конечно же, для таких "финтов" вам уже нужно выходить на отечественных разработчиков проц. плат вроде Fastwel и договариваться уже с ними индивидуально.
|
|
Дата: 28 Фев, 09:32
|