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



Pdf көрінісі
бет119/129
Дата28.09.2023
өлшемі4.1 Mb.
#478975
1   ...   115   116   117   118   119   120   121   122   ...   129
Kurniz

настройки 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. Функция таймера вы-
полняется в контексте задачи обслужива-
ния таймеров, поэтому размер стека зада-
чи обслуживания таймеров определяется 
потреблением памяти стека функциями 
таймеров.


Достарыңызбен бөлісу:
1   ...   115   116   117   118   119   120   121   122   ...   129




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

    Басты бет