Компоненты и технологии • №2 '2011 компоненты


КОМПОНЕНТЫ И ТЕХНОЛОГИИ • № 10 '2011



Pdf көрінісі
бет115/129
Дата28.09.2023
өлшемі4.1 Mb.
#478975
1   ...   111   112   113   114   115   116   117   118   ...   129
Kurniz

95
КОМПОНЕНТЫ И ТЕХНОЛОГИИ • № 10 '2011
www.kite.ru
компоненты
микроконтроллеры
реализация программных 
таймеров во FreeRTOS
Функция таймера
При срабатывании таймера автоматиче-
ски происходит вызов функции таймера. 
Функция таймера реализуется в программе 
в виде функции языка Си, она должна иметь 
следующий прототип:
void vTimerCallbackFunction( xTimerHandle xTimer );
В отличие от функций, реализующих за-
дачи и сопрограммы, функция таймера 
не должна содержать бесконечного цикла. 
Напротив, ее выполнение должно происхо-
дить как можно быстрее:
void vTimerCallbackFunction( xTimerHandle xTimer )
{
// Код функции таймера
return;
}
Единственный аргумент функции тай-
мера — дескриптор таймера, срабатывание 
которого привело к вызову этой функции. 
Функция таймера является функцией обрат-
ного вызова (Callback function), это значит, 
что ее вызов происходит автоматически. 
Программа не должна содержать явные вы-
зовы функции таймера. Дескриптор таймера 
автоматически копируется в аргумент функ-
ции таймера при ее вызове и может быть ис-
пользован в теле функции таймера для опе-
раций с этим таймером.
Указатель на функцию таймера задан в виде 
макроопределения tmrTIMER_CALLBACK.
Задача обслуживания
программных таймеров
Немаловажно и то, что механизм програм-
мных таймеров фактически не является частью 
ядра FreeRTOS. Все программные таймеры 
в программе отсчитывают время и вызывают 
свои функции за счет того, что в программе 
выполняется одна дополнительная сервисная 
задача, которую в дальнейшем мы будем на-
зывать задачей обслуживания программных 
таймеров. Вызов функции таймера выполняет 
именно задача обслуживания таймеров.
Задача обслуживания таймеров недоступ-
на программисту напрямую (нет доступа к ее 
дескриптору), она автоматически создается 
во время запуска планировщика, если на-
стройки FreeRTOS предусматривают исполь-
зование программных таймеров.
Большую часть времени задача обслужи-
вания таймеров пребывает в блокированном 
состоянии, она разблокируется лишь тогда, 
когда будет вызвана API-функция работы 
с таймерами или сработал один из таймеров.


Достарыңызбен бөлісу:
1   ...   111   112   113   114   115   116   117   118   ...   129




©dereksiz.org 2024
әкімшілігінің қараңыз

    Басты бет