139
КОМПОНЕНТЫ И ТЕХНОЛОГИИ •
№ 8 '2011
www.kite.ru
компоненты
микроконтроллеры
Функция vApplicationTickHook()
Прежде чем продолжить изучение меха-
низмов взаимного исключения, стоит об-
ратить внимание на еще одну возможность
FreeRTOS. Как известно, подсистема вре-
мени FreeRTOS [1, № 4] основывается на си-
стемном кванте времени. По прошествии
каждого кванта времени ядро FreeRTOS вы-
полняет внутренние системные действия,
связанные как с работой планировщика, так
и с отсчетом произвольных временных про-
межутков.
Программисту предоставляется возмож-
ность определить свою функцию, которая
будет вызываться каждый системный квант
времени. Такая возможность может оказать-
ся полезной, например, для реализации меха-
низма программных таймеров.
Чтобы задать свою функцию, которая бу-
дет вызываться каждый системный квант
времени, необходимо в файле настроек ядра
FreeRTOSConfig.h задать макроопределение
conf igUSE_TICK_HOOK равным 1. Сама
функция должна содержаться в программе
и иметь следующий прототип:
void vApplicationTickHook( void );
Как и
функция задачи Бездействие,
функция
vApplicationTickHook() являет-
ся функцией-ловушкой или функцией об-
ратного вызова (callback function). Поэтому
в программе не должны встречаться явные
вызовы этой функции.
Отсчет квантов времени во FreeRTOS
реализован за счет использования преры-
вания от одного из аппаратных таймеров
микроконтроллера, вследствие чего функ-
ция
vApplicationTickHook() вызывается
из обработчика прерывания. Поэтому к ней
предъявляются следующие требования:
Она должна выполняться как можно бы-
•
стрее.
Должна использовать как можно меньше
•
стека.
Не
должна содержать вызовы API-
•
функций, кроме предназначенных для вы-
зова из обработчика прерывания (то есть
чьи имена заканчиваются на
FromISR или
Достарыңызбен бөлісу: