Запись элемента в очередь
Для записи элемента в очередь из тела сопро-
граммы служит API-функция crQUEUE_SEND().
Ее прототип:
crQUEUE_SEND(
xCoRoutineHandle xHandle,
xQueueHandle pxQueue,
void *pvItemToQueue,
portTickType xTicksToWait,
portBASE_TYPE *pxResult
)
Аргументы API-функции crQUEUE_SEND():
1. xHandle — дескриптор вызывающей со-
программы. Автоматически передается
в функцию, реализующую сопрограмму,
в виде первого ее аргумента.
2. pxQueue — дескриптор очереди, в которую
будет записан элемент. Дескриптор очере-
ди может быть получен при ее создании
API-функцией xQueueCreate().
3. pvItemToQueue — указатель на элемент,
который будет записан в очередь. Размер
элемента зафиксирован при создании оче-
реди. Именно это количество байт будет
скопировано с адреса, на который ссыла-
ется указатель pvItemToQueue.
4. xTicksToWait — максимальное количество
квантов времени, в течение которого со-
программа может пребывать в блокиро-
ванном состоянии, если очередь полна
и записать новый элемент нет возмож-
ности. Для представления времени в мил-
лисекундах следует использовать макро-
определение portTICK_RATE_MS [1, № 4].
Задание xTicksToWait равным 0 приведет
к тому, что сопрограмма не перейдет в бло-
кированное состояние, если очередь полна,
и управление будет возвращено сразу же.
5. pxResult — указатель на переменную типа
portBASE_TYPE, в которую будет поме-
щен результат выполнения API-функции
crQUEUE_SEND(). Может принимать сле-
дующие значения:
– pdPASS — означает, что данные успеш-
но записаны в очередь. Если определено
время тайм-аута (параметр xTicksToWait
не равен 0), то возврат значения pdPASS
говорит о том, что свободное место
в очереди появилось до истечения вре-
мени тайм-аута и элемент был помещен
в очередь.
– Код ошибки errQUEUE_FULL, опреде-
ленный в файле ProjDefs.h.
Следует отметить, что при записи элемента
в очередь из тела сопрограммы нет возмож-
ности задать время тайм-аута равным бес-
конечности, такая возможность есть, только
если задача записывает элемент в очередь.
Установка аргумента xTicksToWait равным
константе portMAX_DELAY приведет к пере-
ходу сопрограммы в блокированное состо-
яние на конечное время, равное portMAX_
DELAY квантов времени. Это связано с тем,
что сопрограмма не может находиться в при-
остановленном (suspended) состоянии.
Достарыңызбен бөлісу: |