93
КОМПОНЕНТЫ И ТЕХНОЛОГИИ •
№ 10 '2011
www.kite.ru
компоненты
микроконтроллеры
Андрей Курниц
kurnits@stim.by
Что представляет собой
программный таймер?
В версии FreeRTOS V7.0.0 по сравне-
нию с предыдущими версиями появилось
существенное нововведение — встроен-
ная реализация программных таймеров.
Программный таймер (далее по тексту —
таймер) во FreeRTOS — это инструмент,
позволяющий организовать выполнение
подпрограммы в точно заданные моменты
времени.
Часть программы, выполнение которой
инициирует таймер, в программе представ-
лена в виде функции языка Си, которую
в дальнейшем мы будем называть функцией
таймера. Функция таймера является функ-
цией обратного вызова (callback function).
Механизм программных таймеров обеспечи-
вает вызов функции таймера в нужные мо-
менты времени.
Программные таймеры предоставляют
более удобный способ привязки выпол-
нения программы к заданным моментам
времени, чем использование API-функций
vTaskDelay() и
vTaskDelayUntil(), которые
переводят задачу в блокированное состояние
на заданный промежуток времени [1, № 4].
Принцип работы
программного таймера
Как и прочие объекты ядра FreeRTOS,
программный таймер должен быть создан
до первого своего использования в програм-
ме. При создании таймера с ним связывается
функция таймера, выполнение которой он
будет инициировать.
Таймер может находиться в двух состоя-
ниях: пассивном (Dorman state) и активном
(Active state).
Пассивное состояние таймера характе-
ризуется тем, что таймер в данный момент
не отсчитывает временной интервал. Таймер,
находящийся в пассивном состоянии, никог-
да не вызовет свою функцию. Сразу после
создания таймер находится в пассивном со-
стоянии.
Таймер переходит в активное состояние по-
сле того, как к нему в явном виде применили
операцию запуска таймера. Таймер, находя-
щийся в активном состоянии, рано или поздно
вызовет свою функцию таймера. Промежуток
времени от момента запуска таймера до мо-
мента, когда он автоматически вызовет свою
функцию, называется периодом работы тай-
мера. Период таймера задается в момент его
создания, но может быть изменен в ходе вы-
полнения программы. Момент времени, когда
таймер вызывает свою функцию, будем назы-
вать моментом срабатывания таймера.
Рассматривая таймер в упрощенном виде,
можно сказать, что к таймеру, находящему-
ся в пассивном состоянии, применяют опе-
рацию запуска, в результате которой таймер
переходит из пассивного состояния в актив-
ное и начинает отсчитывать время. Когда
с момента запуска таймера пройдет проме-
жуток времени, равный периоду работы тай-
мера, то таймер сработает и автоматически
вызовет свою функцию таймера (рис. 1).
К таймеру могут быть применены следую-
щие операции:
1. Создание таймера — приводит к выде-
лению памяти под служебную структуру
управления таймером, связывает таймер
с его функцией, которая будет вызываться
при срабатывании таймера, переводит тай-
мер в пассивное состояние.
2. Запуск — переводит таймер из пассивного
состояния в активное, таймер начинает от-
счет времени.
3. Останов — переводит таймер из активного
состояния в пассивное, таймер прекраща-
ет отсчет времени, функция таймера так
и не вызывается.
4. Сброс —
приводит к тому,
что таймер на-
чинает отсчет временного интервала с на-
чала. Подробнее об этой операции расска-
жем позже.
5. Изменение периода работы таймера.
6. Удаление таймера — приводит к освобож-
дению памяти, занимаемой служебной
структурой управления таймером.
Достарыңызбен бөлісу: