errCOULD_NOT_ALLOCATE_REQUIRED_
MEMORY).
API-функция
vCoRoutineSchedule()
Выполнение сопрограмм должно быть
организовано при помощи циклического
вызова API-функции vCoRoutineSchedule().
Ее прототип:
void vCoRoutineSchedule( void );
Вызов vCoRoutineSchedule() рекомендуется
располагать в задаче Бездействие:
void vApplicationIdleHook( void )
{
vCoRoutineSchedule( void );
}
Если задача Бездействие не выполняет ни-
каких других функций, то более эффектив-
ной будет следующая ее реализация:
void vApplicationIdleHook( void )
{
for( ;; )
{
vCoRoutineSchedule( void );
}
}
Даже если в программе не используется
ни одной задачи, задача Бездействие автома-
тически создается при запуске планировщика.
Вызов API-функции vCoRoutineSchedule()
внутри задачи Бездействие позволяет легко
сочетать в одной программе как задачи, так
и сопрограммы. При этом сопрограммы бу-
дут выполняться, только если нет готовых
к выполнению задач с приоритетом выше
приоритета задачи Бездействие (который
обычно равен 0).
В п р и н ц и п е в ы з о в A P I - ф у н к ц и и
vCoRoutineSchedule() возможен в любой
задаче, а не только в задаче Бездействие.
Обязательным требованием является
то, чтобы задача, из которой вызывает-
ся vCoRoutineSchedule(), имела самый низкий
приоритет. Иначе если существуют задачи
с более низким приоритетом, то они не будут
получать процессорное время.
Важно, что стек, общий для всех сопро-
грамм, является стеком той задачи, которая вы-
зывает API-функцию vCoRoutineSchedule().
Если вызов vCoRoutineSchedule() располага-
ется в теле задачи Бездействие, то все сопро-
граммы используют стек задачи Бездействие.
Размер стека задачи Бездействие задается ма-
кроопределением configMINIMAL_STACK_
Достарыңызбен бөлісу: |