Компоненты и технологии • №2 '2011 компоненты


Запись элемента в очередь



Pdf көрінісі
бет106/129
Дата28.09.2023
өлшемі4.1 Mb.
#478975
1   ...   102   103   104   105   106   107   108   109   ...   129
Kurniz

Запись элемента в очередь
Для записи элемента в очередь из тела сопро-
граммы служит 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) состоянии.


Достарыңызбен бөлісу:
1   ...   102   103   104   105   106   107   108   109   ...   129




©dereksiz.org 2024
әкімшілігінің қараңыз

    Басты бет