You are here

Настройка приложения для использования программных таймеров

Перевод может содержать ошибки. Читайте первоисточник: Configuring an application to use software timers

Назад: [Программные таймеры] Вверх: [Программные таймеры] Вперёд: [Программные таймеры]

 

Настройка приложения для использования программных таймеров.

Чтобы функции API для работы с программными таймерами во FreeRTOS были доступны приложению, просто:

  1. Добавьте исходный файл FreeRTOS/Source/timers.c в ваш проект.
  2. Определите значение констант, которые описаны в таблице ниже, в заголовочном файле FreeRTOSConfig.h.
Константа
Описание
 configUSE_TIMERS

Установите в 1 для использования функционала программных таймеров. Задача обслуживания таймеров будет автоматически создана при запуске планировщика ОС, если configUSE_TIMERS установлен в 1.

 configTIMER_TASK_PRIORITY

Устанавливает приоритет задачи обслуживания таймеров. Как и все задачи, задача обслуживания таймеров может быть запущена с приоритетом от 0 до (configMAX_PRIORITIES - 1).

Это значение должно быть выбратно тщательно, чтобы соответствовать требованиям приложения. Например, если задача обслуживания таймеров имеет наивысший приоритет в системе, то и команды, отправленные в задачу обслуживания таймеров (когда вызывается функция API таймера), и таймеры с истёкшим периодом будут обработаны немедленно. И наоборот, если задаче обслуживания таймеров присвоен низкий приоритет, то и команды, переданные задаче обслуживания таймеров, и таймеры с истёкшим периодом, не будут обрабатываться до тех пор, пока задача обслуживания таймеров не окажется задачей с наивысшим приоритетом из числа задач, готовых к запуску.

Важно отметить, что период таймера отсчитывается от момента отправки команды, а не от момента её обработки.

 configTIMER_QUEUE_LENGTH

Эта константа устанавливает максимальное количество необработанных команд, которые могут находиться в очереди команд таймера в любой момент времени.

Причины, по которым очередь команд может быть заполниться:

  • Вызов нескольких функций API таймеров до того, как планировщик ОС будет запущен, и следовательно до того, как задача обслуживания таймеров будет создана.
  • Вызов нескольких функций API (interrupt safe) из обработчика прерываний (ISR).
  • Вызов нескольких функций API таймеров из задачи, которая имеет приоритет выше, чем задача обслуживания таймеров.
 configTIMER_TASK_STACK_DEPTH 

Устанавливает размер стека (в словах, а не в байтах!), выделенного для задачи обслуживания таймеров.

Функции обратного вызова таймеров выполняются в контексте задачи обслуживания таймеров. Следовательно, требуемый размер стека для задачи обслуживания таймеров зависит от требований к стеку функций обратного вызова таймеров.

Hobby's category: