FROM_ISR() является первым в обработчи-
ке прерывания. Если же в обработчике пре-
рывания происходит несколько вызовов
crQUEUE_SEND_FROM_ISR() (несколь-
ко элементов помещается в очередь),
то аргумент xCoRoutinePreviouslyWoken
следует устанавливать в значение, кото-
рое было возвращено предыдущим вы-
зовом crQUEUE_SEND_FROM_ISR().
Этот аргумент введен для того, чтобы
в случае, когда несколько сопрограмм ожи-
дают появления данных в очереди, только
одна из них выходила из блокированного
состояния.
4. Возвращаемое значение. Равно pdTRUE,
если в результате записи элемента в оче-
редь разблокировалась одна из сопрограмм.
В этом случае необходимо выполнить пере-
ключение на другую сопрограмму после
выполнения обработчика прерывания.
Чтение элемента из очереди (которая ис-
пользуется только в сопрограммах) из обра-
ботчика прерывания осуществляется с по-
мощью API-функции crQUEUE_RECEIVE_
FROM_ISR(). Ее прототип:
portBASE_TYPE crQUEUE_RECEIVE_FROM_ISR(
xQueueHandle pxQueue,
void *pvBuffer,
portBASE_TYPE * pxCoRoutineWoken
)
Аргументы и возвращаемое значение:
1. pxQueue — дескриптор очереди, в которую
будет записан элемент. Дескриптор очере-
ди может быть получен при ее создании
API-функцией xQueueCreate().
2. pvItemToQueue — указатель на область па-
мяти, в которую будет скопирован элемент
из очереди. Объем памяти, на которую
ссылается указатель, должен быть не мень-
ше размера одного элемента очереди.
3. pxCoRoutineWoken — указатель на пере-
менную, которая в результате вызова
crQUEUE_RECEIVE_FROM_ISR() примет
значение pdTRUE, если одна или несколько
сопрограмм ожидали возможности поме-
стить элемент в очередь и теперь разбло-
кировались. Если таковых сопрограмм нет,
то значение *pxCoRoutineWoken останется
без изменений.
4. Возвращаемое значение:
– pdTRUE, если элемент был успешно про-
читан из очереди;
– pdFALSE — в противном случае.
Достарыңызбен бөлісу: |