настройки FreeRTOS
для использования таймеров
Чтобы использовать программные тай-
меры в своей программе, необходимо сде-
лать следующие настройки FreeRTOS. Файл
с исходным кодом программных тайме-
ров /Source/timers.c должен быть включен
в проект. Кроме того, в исходный текст про-
граммы должен быть включен заголовочный
файл croutine.h, содержащий прототипы
API-функций для работы с таймерами:
#include “timers.h”
Т а к ж е в ф а й л е к о н ф и г у р а ц и и
FreeRTOSConfig.h должны присутствовать
следующие макроопределения:
1. configUSE_TIMERS. Определяет, включе-
ны ли программные таймеры в конфигу-
рацию FreeRTOS: 1 — включены, 0 — ис-
ключены. Помимо прочего определяет,
будет ли автоматически создана задача
обслуживания таймеров в момент запуска
планировщика.
2. configTIMER_TASK_PRIORITY. Задает при-
оритет задачи обслуживания таймеров. Как
и для всех задач, приоритет задачи обслужи-
вания таймеров может находиться в преде-
лах от 0 до (configMAX_PRIORITIES–1).
Значение приоритета задачи обслужи-
вания таймеров необходимо выбирать
с осторожностью, учитывая требования
к создаваемой программе. Например, если
задан наивысший в программе приоритет,
то команды задаче обслуживания таймеров
будут передаваться без задержек, а функция
таймера будет вызываться сразу же, когда
время, равное периоду таймера, истекло.
Наоборот, если задаче обслуживания тайме-
ров назначен низкий приоритет, то переда-
ча команд и вызов функции таймера будут
задержаны по времени, если в данный мо-
мент выполняется задача с более высоким
приоритетом.
3. configTIMER_QUEUE_LENGTH. Размер
очереди команд — устанавливает макси-
мальное число невыполненных команд,
которые могут храниться в очереди, пре-
жде чем задача обслуживания таймеров их
выполнит. Размер очереди зависит от ко-
личества вызовов API-функций для рабо-
ты с таймерами во время, когда функция
обслуживания таймеров не выполняется.
А именно когда:
Планировщик еще не запущен или при-
•
остановлен.
Происходит несколько вызовов API-
•
функций для работы с таймерами из об-
работчиков прерываний, так как когда
процессор занят выполнением обработ-
чика прерывания, ни одна задача не вы-
полняется.
Происходит несколько вызовов API-
•
функций для работы с таймерами из за-
дачи (задач), приоритет которых выше,
чем у задачи обслуживания таймеров.
4. conf igTIMER_TASK_STACK_DEPTH.
Задает размер стека задачи обслуживания
таймеров. Задается не в байтах, а в словах,
равных разрядности процессора. Тип дан-
ных слова, которое хранится в стеке, задан
в виде макроопределения portSTACK_TYPE
в файле portmacro. h. Функция таймера вы-
полняется в контексте задачи обслужива-
ния таймеров, поэтому размер стека зада-
чи обслуживания таймеров определяется
потреблением памяти стека функциями
таймеров.
Достарыңызбен бөлісу: |