*pxHigherPriorityTaskWoken устанавли-
вается равным pdTRUE, если существует
задача, которая «хочет» прочитать данные
из очереди, и приоритет у нее выше, чем
у задачи, выполнение которой прервало
прерывание. Если таковой задачи нет, то
значение *pxHigherPriorityTaskWoken оста-
ется неизменным. Проанализировав зна-
чение *pxHigherPriorityTaskWoken после
выполнения xQueueSendToFrontFromISR()
или xQueueSendToBackFromISR(), можно
сделать вывод о необходимости принуди-
тельного переключения контекста в конце
обработчика прерывания. В этом случае
управление сразу перейдет разблокирован-
ной высокоприоритетной задаче.
4. Возвращаемое значение — может прини-
мать 2 значения:
– pdPASS — означает, что данные успешно
записаны в очередь.
– errQUEUE_FULL — означает, что данные
не записаны в очередь, так как очередь
заполнена.
API-функция xQueueReceiveFromISR()
служит для чтения данных с начала очереди.
Вызываться она должна только из обработ-
чиков прерываний.
Ее прототип:
portBASE_TYPE xQueueReceiveFromISR(
xQueueHandle pxQueue,
void *pvBuffer,
portBASE_TYPE *pxTaskWoken
);
Аргументы и возвращаемое значение:
1. xQueue — дескриптор очереди, из которой
будет считан элемент. Дескриптор очереди
может быть получен при ее создании API-
функцией xQueueCreate().
2. pvBuffer — указатель на область памя-
ти, в которую будет скопирован элемент
из очереди. Объем памяти, на которую
ссылается указатель, должен быть не мень-
ше размера одного элемента очереди.
рис. 9. Обработка быстро следующих событий
|