QNX RTP Logo QNX Realtime Platform: Русский Портал QNX
Thursday, 20 Nov 2008 12:05
Меню

Проект OpenNET - все о Unix
Главная

 · Начало · Статистика · Поиск ·

  QNX.ORG.RU —› Программирование под QNX 4.x —› Еще раз про RDTSC

Посл.ответ Сообщение


Дата: 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

alexdon
После проведенных экспериментов выяснил следующее:
судя по всему это суммарное значение счетчика таймера (обновляется каждый тик таймера).

... или даже ещё хуже :
http://qnx.org.ru/article11.html

alexdon
Нужно делать небольшую паузу, порядка 50 мксек.

Если вам нужно всего лишь паузу, то для этого есть nanospin() (в 6.х), или нужно изобразить что-то подобное используя тот же RDTSC; гляньте здесь, может на что натолкнёт:
http://qnxclub.net/modules.php?name=Forums&file=viewtopic&t=80&highlight=%E8%E D%F2%E5%F0%E2%E0%EB
http://qnxclub.net/modules.php?name=Forums&file=viewtopic&t=165&highlight=%E8% ED%F2%E5%F0%E2%E0%EB
http://qnxclub.net/modules.php?name=Forums&file=viewtopic&t=227&highlight=%E8% ED%F2%E5%F0%E2%E0%EB
http://qnxclub.net/modules.php?name=Forums&file=viewtopic&t=166&highlight=%E8% ED%F2%E5%F0%E2%E0%EB

You must login to post.

©   2000-2003 Команда проекта QNX.ORG.RU // QNX.ORG.RU Team
Авторы проекта: Дмитрий Алексеев [dmi] и Дмитрий Васильев. Техническое сопровождение проекта: Игорь Сорокин [isorokin]. Информационное сопровождение: Дмитрий Алексеев [dmi]
QNX - зарегистрированная торговая марка QNX Software Systems, Ltd., Canada. Остальные упоминаемые на сайте торговые марки и логотипы являются исключительно собственностью их уважаемых владельцев. Ничьи права не затронуты. Материалы сайта не могут быть скопированы и где-либо использованы в той или иной форме без письменного разрешения разработчиков сайта.
Powered by Mambo Open Source