vCoRoutineSchedule() управление получает
сопрограмма с наивысшим приоритетом.
Приоритет сопрограммы задается це-
лым числом, которое может прини-
мать значения от 0 до (conf igMAX_CO_
ROUTINE_PRIORITIES — 1). Большее
значение соответствует более высокому
приоритету. Макроопределение configMAX_
CO_ROUTINE_PRIORITIES задает общее
число приоритетов сопрограмм в програм-
ме и определено в конфигурационном фай-
ле FreeRTOSConf ig.h. Изменяя значение
conf igMAX_CO_ROUTINE_PRIORITIES,
можно определить любое число возможных
приоритетов сопрограмм, однако следует
стремиться уменьшить число приоритетов
до минимально достаточного для экономии
оперативной памяти, потребляемой ядром.
реализация
сопрограммы
Как и задача, сопрограмма реализуется
в виде функции языка Си. Указатель на эту
функцию следует передавать в качестве аргу-
мента API-функции создания сопрограммы,
о которой будет сказано ниже. Пример функ-
ции, реализующей сопрограмму:
void vACoRoutineFunction(xCoRoutineHandle xHandle, unsigned
portBASE_TYPE uxIndex)
{
crSTART( xHandle );
for(;; )
{
// Код, реализующий функциональность сопрограммы,
размещается здесь.
}
crEND();
}
Аргументы функции, реализующей сопро-
грамму:
1. xHandle — дескриптор сопрограммы.
Автоматически передается в функцию, ре-
ализующую сопрограмму, и в дальнейшем
используется при вызове API-функций для
работы с сопрограммами.
2. uxIndex — произвольный целочисленный
параметр, который передается в сопро-
грамму при ее создании.
Указатель на функцию, реализующую со-
программу, определен в виде макроопределе-
ния crCOROUTINE_CODE.
Достарыңызбен бөлісу: |