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


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

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

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

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

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

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

А вместо дополнительного в нужный момет считываеются заначения того-же системного таймера - там даже не килогерцы... И все. 32bit программый счетчик+железный таймер на частоте процессора - и долго и достаточно точно.
Дон Амброзио
Цитата(Andy Mozzhevilov @ Mar 13 2008, 08:14) *
uCOS-II, ARM7 (NXP на 60 МГц), таймер ОС тикает на 100-200 Гц, дополнительный таймер - на 8 кГц.

У меня на 4 МГц в мной разработанной RTOS, которая в нашей фирме носит внутреннее название "Паранойя-0.0" таймер тикает на частоте 2,5кГц...Если экстраполировать на частоту 60МГц получиться, что мой таймер тикает с частотой 37,5кГц.
Andy Mozzhevilov
Цитата(zltigo @ Mar 15 2008, 01:55) *
К счастью не все системы подобно uCOS бездумно бегают по TCB и инкрементируют индивидуальные таймеры smile.gif

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

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

Да, для измерения согласен. Мне же иногда нужно именно "одновибратор". Запуск от какого-то события и получение события таймаута через заданный временной интервал.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.