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


Таблица 1. Префиксы переменных Префикс



Pdf көрінісі
бет14/129
Дата28.09.2023
өлшемі4.1 Mb.
#478975
1   ...   10   11   12   13   14   15   16   17   ...   129
Kurniz

Таблица 1. Префиксы переменных
Префикс
переменной
Ее тип
c
char
s
short
l
long
f
float
d
double
v
void
e
Перечисляемый тип (enum)
x
Структуры (struct) и др. типы
p
Указатель (дополнительно к вышеперечисленным)
u
Беззнаковый (дополнительно к вышеперечисленным)
Таблица 2. Специальные типы FreeRTOS
Специальный тип 
FreeRTOS
Соответствующий встроенный тип
portCHAR
char
portSHORT
short
portLONG
long
portTickType
Тип счетчика системных квантов
portBASE_TYPE
Наиболее употребительный тип во FreeRTOS
Таблица 3. Префиксы макросов,
используемых в FreeRTOS
Префикс
Где определен
Пример макроопределения
port
portable.h
portMAX_DELAY
tsk, task
task.h
taskENTER_CRITICAL()
pd
projdefs.h
pdTRUE
config
FreeRTOSConfig.h
configUSE_PREEMPTION
err
projdefs.h
errQUEUE_FULL
рис. 5. Состояния задачи в FreeRTOS


112
КОМПОНЕНТЫ И ТЕХНОЛОГИИ • № 3 '2011
компоненты
микроконтроллеры
но тайм-аутом. То есть если ожидаемое внеш-
нее событие не наступило в течение тайм-аута, 
то задача возвращается в состояние готовности 
к выполнению. Это предотвращает «подвиса-
ние» задачи при ожидании внешнего события, 
которое по каким-то причинам никогда не на-
ступит. Блокированная задача не получает про-
цессорного времени.
Приостановленная (suspended) задача так-
же не получает процессорного времени, од-
нако, в отличие от блокированного состоя-
ния, переход в приостановленное состояние 
и выход из него осуществляется в явном 
виде вызовом API-функций vTaskSuspend() 
и xTaskResume(). Тайм-аут для приостанов-
ленного состояния не предусмотрен, и задача 
может оставаться приостановленной сколь 
угодно долго [5].
В любой программе реального вре-
мени есть как менее, так и более ответствен-
ные задачи. Под «ответственностью» задачи 
здесь понимается время реакции программы 
на внешнее событие, которое обрабатывает-
ся задачей. Например, ко времени реакции 
на срабатывание датчика в производственной 
установке предъявляются куда более строгие 
требования, чем ко времени реакции на на-
жатие клавиши на клавиатуре. Для обеспече-
ния преимущества на выполнение более от-
ветственных задач во FreeRTOS применяется 
механизм приоритетов задач (Task priorities).
Среди всех задач, находящихся в состоянии 
готовности, планировщик отдаст управление 
той задаче, которая имеет наивысший приори-
тет. Задача будет выполняться до тех пор, пока 
она не будет блокирована или приостановлена 
или пока не появится готовая к выполнению 
задача с более высоким приоритетом.
Каждой задаче назначается приоритет от 0 
до (configMAX_PRIORITIES — 1). Меньшее 
значение приоритета соответствует меньшему 
приоритету. Наиболее низкий приоритет у за-
дачи «бездействие», значение которого опреде-
лено в tskIDLE_PRIORITY как 0. Изменяя зна-
чение configMAX_PRIORITIES, можно опре-
делить любое число возможных приоритетов, 
однако уменьшение configMAX_PRIORITIES 
позволяет уменьшить объем ОЗУ, потребляе-
мый ядром.
Задачи в FreeRTOS реализуются в виде Си-
функций. Обязательное требование к функ-
ции, реализующей задачу: она должна иметь 
один аргумент типа указатель на void и ни-
чего не возвращать (void). Указатель на та-
кую функцию определен как pdTASK_CODE
Каждая задача — это небольшая программа 
со своей точкой входа, которая содержит бес-
конечный цикл:
void ATaskFunction( void *pvParameters )
{
/* Переменные могут быть объявлены здесь, как и в обычной 
функции. Каждый экземпляр этой задачи будет иметь свою 
собственную копию переменной iVariableExample. Если 
объявить переменную со спецификатором static, то будет
создана только одна переменная iVariableExample
доступная из всех экземпляров задачи */
int iVariableExample = 0;
/* Тело задачи реализовано как бесконечный цикл */
for( ;; )
{
/* Код, реализующий функциональность задачи */
}
/* Если все-таки произойдет выход из бесконечного цикла, 
то задача должна быть уничтожена ДО конца функции. 
Параметр NULL обозначает, что уничтожается задача,
вызывающая API-функцию vTaskDelete() */
vTaskDelete( NULL );
}
З а д ач и с о з д а ю т с я A P I - ф у н к ц и е й 


Достарыңызбен бөлісу:
1   ...   10   11   12   13   14   15   16   17   ...   129




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

    Басты бет