API-функции, предназначенные
для вызова из сопрограмм
Текущая версия FreeRTOS v7.0.1 поддер-
живает следующие API-функции, предназна-
ченные для вызова из сопрограмм:
crDELAY()
•
;
crQUEUE_SEND()
•
;
crQUEUE_RECEIVE()
•
.
Кроме этого, существуют еще API-функции
crQUEUE_SEND_FROM_ISR() и crQUEUE_
RECEIVE_FROM_ISR(), предназначенные для
вызова из обработчиков прерываний и вы-
полняющие операции с очередью, которая ис-
пользуется только в сопрограммах.
Все вышеперечисленные API-функции
на самом деле представляют собой макросы
языка Си, но для простоты будем называть
их API-функциями.
Стоит подчеркнуть, что API-функции,
предназначенные для вызова из сопрограмм,
разрешено вызывать только непосредствен-
но из тела сопрограммы. Вызов их из других
функций запрещен.
Префикс всех вышеперечисленных API-
функций указывает на заголовочный файл
croutine.h, в котором эти API-функции объ-
явлены.
реализация задержек
в сопрограммах
Для корректной реализации временных за-
держек внутри сопрограмм следует приме-
нять API-функцию crDELAY(), которая пере-
водит вызывающую сопрограмму в блоки-
рованное состояние на заданное количество
квантов времени. Ее прототип:
void crDELAY( xCoRoutineHandle xHandle, portTickType
xTicksToDelay );
Аргументы API-функции crDELAY():
1. xHandle — дескриптор вызывающей со-
программы. Автоматически передается
в функцию, реализующую сопрограмму,
в виде первого ее аргумента.
2. xTicksToDelay — количество квантов вре-
мени, в течение которых сопрограмма
будет заблокирована. Если xTicksToDelay
равен 0, то вместо блокировки сопрограм-
мы происходит переключение на другую
готовую к выполнению сопрограмму.
Отдельно следует обратить внимание на вы-
зов crDELAY(), когда аргумент xTicksToDelay
равен 0. В этом случае вызывающая
Достарыңызбен бөлісу: |