реклама на сайте
подробности

 
 
> Измерение интервалов времени, Поделитесь опытом
Terminator
сообщение Mar 13 2008, 04:50
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 209
Регистрация: 7-12-04
Из: Томск
Пользователь №: 1 382



Есть необходимость измерять интервалы времени с какой-то точностью. В разных задачах разные интервалы.
Мне видится два способа реализации, ускорить системный таймер либо сгородить "систему" на каком нибудь аппаратном таймере "тикающем" с требуемой точностью.
Первый способ вроде как самый простой, но много процессорного времени уйдёт на этот системный таймер. Второй позволяет сделать системный таймер помедленнее, но не сожрёт ли система на аппаратном таймере больше процессорного времени чем в первом случае?
Городил ли кто-нибудь систему на отдельном аппаратном таймере, стоит ли заморачиваться?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 6)
Andy Mozzhevilov
сообщение Mar 13 2008, 05:14
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 877
Регистрация: 26-01-05
Из: Екатеринбург
Пользователь №: 2 206



Цитата(Terminator @ Mar 13 2008, 09:50) *
Есть необходимость измерять интервалы времени с какой-то точностью. В разных задачах разные интервалы.
Мне видится два способа реализации, ускорить системный таймер либо сгородить "систему" на каком нибудь аппаратном таймере "тикающем" с требуемой точностью.
Первый способ вроде как самый простой, но много процессорного времени уйдёт на этот системный таймер. Второй позволяет сделать системный таймер помедленнее, но не сожрёт ли система на аппаратном таймере больше процессорного времени чем в первом случае?
Городил ли кто-нибудь систему на отдельном аппаратном таймере, стоит ли заморачиваться?


Вполне нормальный расклад. Вы будете экономить на том, что после прерывания от вашего "быстрого" таймера ОС не будет каждый раз проходить по списку задачь и декрементировать таймауты.
Я делаю так, как вы описали.
uCOS-II, ARM7 (NXP на 60 МГц), таймер ОС тикает на 100-200 Гц, дополнительный таймер - на 8 кГц.
Прикрепленный файл  timer_cpp.zip ( 4.76 килобайт ) Кол-во скачиваний: 163


Причем таймер ОС сделан на одном из программных таймеров с тиками 8 кГц, дополнительно аппаратный таймер не забирается:
Код
class TOsTimer : TTimer
{
public:
    TOsTimer() : TTimer(1000000/OS_TICKS_PER_SEC/TIMER_ONE_TICK_MCS, true) { }

private:
    virtual void Tick(void)
    {
        OSTimeTick();
    }
};


--------------------
Пасу котов...
Go to the top of the page
 
+Quote Post
Terminator
сообщение Mar 13 2008, 06:45
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 209
Регистрация: 7-12-04
Из: Томск
Пользователь №: 1 382



Понятно. Спасибо.
Go to the top of the page
 
+Quote Post
lyakhovich
сообщение Mar 14 2008, 20:15
Сообщение #4





Группа: Новичок
Сообщений: 12
Регистрация: 22-01-08
Пользователь №: 34 317



Цитата(Terminator @ Mar 13 2008, 07:50) *
Есть необходимость измерять интервалы времени с какой-то точностью. В разных задачах разные интервалы.
Мне видится два способа реализации, ускорить системный таймер либо сгородить "систему" на каком нибудь аппаратном таймере "тикающем" с требуемой точностью.
Первый способ вроде как самый простой, но много процессорного времени уйдёт на этот системный таймер. Второй позволяет сделать системный таймер помедленнее, но не сожрёт ли система на аппаратном таймере больше процессорного времени чем в первом случае?
Городил ли кто-нибудь систему на отдельном аппаратном таймере, стоит ли заморачиваться?

Раз уж раздел называется операционные системы...

В виндовсе CE есть GetTickCount(), точночть порядка 10 мс.
В линуксе тоже есть что-то вроде, на память не помню, times или что-то такое.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Mar 14 2008, 20:55
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Andy Mozzhevilov @ Mar 13 2008, 08:14) *
после прерывания от вашего "быстрого" таймера ОС не будет каждый раз проходить по списку задачь и декрементировать таймауты.

К счастью не все системы подобно uCOS бездумно бегают по TCB и инкрементируют индивидуальные таймеры smile.gif, но тем не менее разгонять систему совершено никчему.
Цитата
таймер ОС тикает на 100-200 Гц, дополнительный таймер - на 8 кГц.

А вместо дополнительного в нужный момет считываеются заначения того-же системного таймера - там даже не килогерцы... И все. 32bit программый счетчик+железный таймер на частоте процессора - и долго и достаточно точно.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Дон Амброзио
сообщение Mar 14 2008, 22:34
Сообщение #6


Местный
***

Группа: Участник*
Сообщений: 323
Регистрация: 11-02-08
Пользователь №: 34 947



Цитата(Andy Mozzhevilov @ Mar 13 2008, 08:14) *
uCOS-II, ARM7 (NXP на 60 МГц), таймер ОС тикает на 100-200 Гц, дополнительный таймер - на 8 кГц.

У меня на 4 МГц в мной разработанной RTOS, которая в нашей фирме носит внутреннее название "Паранойя-0.0" таймер тикает на частоте 2,5кГц...Если экстраполировать на частоту 60МГц получиться, что мой таймер тикает с частотой 37,5кГц.


--------------------
После устранения бага в программе она стала работать....хуже
Go to the top of the page
 
+Quote Post
Andy Mozzhevilov
сообщение Mar 16 2008, 06:07
Сообщение #7


Знающий
****

Группа: Свой
Сообщений: 877
Регистрация: 26-01-05
Из: Екатеринбург
Пользователь №: 2 206



Цитата(zltigo @ Mar 15 2008, 01:55) *
К счастью не все системы подобно uCOS бездумно бегают по TCB и инкрементируют индивидуальные таймеры smile.gif

Дайте ссылку, что-ли, на что смотреть? А то может засиделся и впрямь в своём болоте? smile.gif

Цитата
А вместо дополнительного в нужный момет считываеются заначения того-же системного таймера - там даже не килогерцы... И все. 32bit программый счетчик+железный таймер на частоте процессора - и долго и достаточно точно.

Да, для измерения согласен. Мне же иногда нужно именно "одновибратор". Запуск от какого-то события и получение события таймаута через заданный временной интервал.


--------------------
Пасу котов...
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 12th August 2025 - 10:45
Рейтинг@Mail.ru


Страница сгенерированна за 0.01406 секунд с 7
ELECTRONIX ©2004-2016