Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Жизнь по таймеру

7.1K
10 апреля 2005 года
miXme
44 / / 10.04.2005
Вот уже второй год пишу прогу под NT(тестирование проходит на win2k+sp4), которая должна работать в цикле с частотой 50 Гц. Используется таймер, создаваемый фукцией CreateWaitableTimer. По оценкам времени выполнения( функции QueryPerfomanceCounter) таймер срабатывает каждые 30-35 мс вместо заданных 20 =(.
Собираюсь писать похожий продукт под никсы( конкретно, freebsd 4/linux 2.4-6 ) и в связи с этим хотелось бы узнать следующее:

1. Если в freebsd/linux таймеры, способные реально, а не теоретически поддерживать частоту 50 Гц(то есть тикать каждые 20 миллисекунд)?

2. Какие средства замера времени исполнения кусков кода присутствуют в freebsd/linux?
2
11 апреля 2005 года
squirL
5.6K / / 13.08.2003
Цитата:
Originally posted by miXme
Вот уже второй год пишу прогу под NT(тестирование проходит на win2k+sp4), которая должна работать в цикле с частотой 50 Гц. Используется таймер, создаваемый фукцией CreateWaitableTimer. По оценкам времени выполнения( функции QueryPerfomanceCounter) таймер срабатывает каждые 30-35 мс вместо заданных 20 =(.
Собираюсь писать похожий продукт под никсы( конкретно, freebsd 4/linux 2.4-6 ) и в связи с этим хотелось бы узнать следующее:

1. Если в freebsd/linux таймеры, способные реально, а не теоретически поддерживать частоту 50 Гц(то есть тикать каждые 20 миллисекунд)?

2. Какие средства замера времени исполнения кусков кода присутствуют в freebsd/linux?



1. во FreeBSD/Linux таймеры тикают каждые 10 мс. теоретически. практически вроде как тоже :)
2. по поводу средств - см. в сторону

Цитата:

#include <sys/time.h>

int getitimer(int which, struct itimerval *value);
int setitimer(int which, const struct itimerval *value, struct itimerval *ovalue);

391
11 апреля 2005 года
Archie
562 / / 03.02.2005
Цитата:
Originally posted by squirL
1. во FreeBSD/Linux таймеры тикают каждые 10 мс. теоретически. практически вроде как тоже :)
2. по поводу средств - см. в сторону


Вроде в линуксах и БСД время тоже плавает. У нас в лаборатории посему часть установок перевели на QNX, которая есть RealTime indeed :)

2
11 апреля 2005 года
squirL
5.6K / / 13.08.2003
Цитата:
Originally posted by Archie
Вроде в линуксах и БСД время тоже плавает. У нас в лаборатории посему часть установок перевели на QNX, которая есть RealTime indeed :)


QNX на х86? хм...

7.1K
11 апреля 2005 года
miXme
44 / / 10.04.2005
Цитата:
Originally posted by Archie
Вроде в линуксах и БСД время тоже плавает. У нас в лаборатории посему часть установок перевели на QNX, которая есть RealTime indeed :)



А. QNX конечно da dest...Однако он очень платный, если не экспериментировать с нейтрино.

Б. По поводу "линуксов и БСД", не в курсе какие частоты (интервалы) они не держали? Мне достаточно чтобы стабильно отрабатывались миллисекунды.

В. Пошарил по магазинам. Что скажите начет книжки Unix/Linux: теория и практика программирования
(Understanding Unix/Linux Programming)
Б. Моли?

391
11 апреля 2005 года
Archie
562 / / 03.02.2005
Цитата:
Originally posted by miXme
Б. По поводу "линуксов и БСД", не в курсе какие частоты (интервалы) они не держали? Мне достаточно чтобы стабильно отрабатывались миллисекунды.


Насколько я помню, период таймера там плавал в районе 5мс. Т.е. я имею в виду интервал, через который передается управление тактируемому процессу. Минимальный интервал, который удавалось получить ~ 20мс. Все это было под Красной Шапкой 6.какой-то.
Можно поэкспериментировать: усыпить процесс на 20мс и померять, сколько он реально будет спать...

7.1K
11 апреля 2005 года
miXme
44 / / 10.04.2005
Цитата:
Originally posted by Archie
Насколько я помню, период таймера там плавал в районе 5мс. Т.е. я имею в виду интервал, через который передается управление тактируемому процессу. Минимальный интервал, который удавалось получить ~ 20мс. Все это было под Красной Шапкой 6.какой-то.
Можно поэкспериментировать: усыпить процесс на 20мс и померять, сколько он реально будет спать...



Это радостная новость (по поводу ~20мс) :)
А эксперименты начнутся где-то недельки через две, три.
Я так "докапываюсь" потому что горький опыт с виндами постоянно напоминает мне о том, что лучше пару раз переспросить, чем пару лет рыть рыть и прийти к выводу, что на самом деле нифига и не работает так, как это было заявлено в документэйшен и в примерах к ней( это я по поводу таймера ядра виндов).
Почитал об утилите trace. Пишут, что она, в том числе, указывает время системного вызова.Кто нить знает в чем измеряется (мс,мкс) и какова точность таких замеров?

10
11 апреля 2005 года
Freeman
3.2K / / 06.03.2004
Цитата:
Originally posted by miXme
Это радостная новость (по поводу ~20мс) :)


Не сочтите за рекламу. Тут можно прочитать много интересного про проблемы реального времени и даже задать вопросы. Есть люди, которые в этом хорошо разбираются.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог