portBASE_TYPE, в которую будет поме-
щен результат выполнения API-функции
crQUEUE_RECEIVE(). Может принимать
следующие значения:
– pdPASS — означает, что данные успешно
прочитаны из очереди. Если определено
время тайм-аута (параметр xTicksToWait
не равен 0), то возврат значения pdPASS
говорит о том, что новый элемент
в очереди появился до истечения вре-
мени тайм-аута.
– Код ошибки errQUEUE_FULL, опреде-
ленный в файле ProjDefs.h.
Как и при записи элемента в очередь
из тела сопрограммы, при чтении элемента
из очереди также нет возможности заблоки-
ровать сопрограмму на бесконечный проме-
жуток времени.
Запись/чтение в очередь
из обработчика прерывания
Для организации обмена между обработ-
чиками прерываний и сопрограммами пред-
назначены API-функции crQUEUE_SEND_
FROM_ISR() и crQUEUE_RECEIVE_FROM_
ISR(), вызывать которые можно только
из обработчиков прерываний. Причем оче-
редь можно использовать только в сопро-
граммах (но не в задачах).
Запись элемента в очередь (которая исполь-
зуется только в сопрограммах) из обработчи-
ка прерывания осуществляется с помощью
API-функции crQUEUE_SEND_FROM_ISR().
Ее прототип:
portBASE_TYPE crQUEUE_SEND_FROM_ISR(
xQueueHandle pxQueue,
void *pvItemToQueue,
portBASE_TYPE xCoRoutinePreviouslyWoken
)
Ее аргументы и возвращаемое значение:
1. pxQueue — дескриптор очереди, в которую
будет записан элемент. Дескриптор очере-
ди может быть получен при ее создании
API-функцией xQueueCreate().
2. pvItemToQueue — указатель на элемент,
который будет записан в очередь. Размер
элемента зафиксирован при создании оче-
реди. Именно это количество байт будет
скопировано с адреса, на который ссылает-
ся указатель pvItemToQueue.
3. xCoRoutinePreviouslyWoken — этот аргу-
мент необходимо устанавливать в pdFALSE,
если вызов API-функции crQUEUE_SEND_
Достарыңызбен бөлісу: |