xQueueReceive(). Ее прототип:
portBASE_TYPE xQueueReceive(
xQueueHandle
xQueue,
const void * pvBuffer,
portTickType
xTicksToWait);
Для считывания элемента из очереди без
его удаления используется API-функция
xQueuePeek(). Ее прототип:
portBASE_TYPE xQueuePeek(
xQueueHandle
xQueue,
const void * pvBuffer,
portTickType
xTicksToWait);
Назначение параметров и возвращаемое
значение для API-функций xQueueReceive()
и xQueuePeek() одинаковы:
xQueue
•
— дескриптор очереди, из которой
будет прочитан элемент. Дескриптор оче-
реди может быть получен при ее создании
API-функцией xQueueCreate().
pvBuffer
•
— указатель на область памя-
ти, в которую будет скопирован элемент
из очереди. Объем памяти, на которую
ссылается указатель, должен быть не мень-
ше размера одного элемента очереди.
xTicksToWait
•
— максимальное количе-
ство квантов времени, в течение которого
задача может пребывать в блокирован-
ном состоянии, если очередь не содержит
ни одного элемента. Для представления вре-
мени в миллисекундах следует использо-
вать макроопределение portTICK_RATE_MS
[1, КиТ № 4]. Задание xTicksToWait равным
«0» приведет к тому, что задача не перейдет
в блокированное состояние, а продолжит
свое выполнение, если очередь в данный
момент пуста. Установка xTicksToWait рав-
ным константе portMAX_DELAY приведет
к тому, что выхода из блокированного со-
стояния по истечении тайм-аута не будет.
Задача будет сколь угодно долго «ожидать»
появления элемента в очереди. При этом
макроопределение INCLUDE_vTaskSuspend
в файле FreeRTOSConfig.h должно быть
равно «1».
Возвращаемое значение — может возвра-
•
щать 2 значения:
– pdPASS — означает, что данные успешно
прочитаны из очереди. Если определена
продолжительность тайм-аута (пара-
метр xTicksToWait не равен «0»), то воз-
врат значения pdPASS говорит о том, что
элемент в очереди появился (или уже
был там) до истечения тайм-аута и был
успешно прочитан.
– errQUEUE_EMPTY — означает, что
элемент не прочитан из очереди, так
как очередь пуста. Если определена
продолжительность тайм-аута (пара-
метр xTicksToWait не равен «0» или
Достарыңызбен бөлісу: |