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



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

crDELAY(xHandle, 0) сопрограмма переходит 
в состояние готовности к выполнению, а в со-
стояние выполнения переходит другая сопро-
грамма, приоритет которой выше или равен 
приоритету вызывающей сопрограммы.
Посредством вызова crDELAY(xHandle, 0) 
происходит принудительное переключение 
на другую сопрограмму, что было продемон-
стрировано в учебной программе № 1.
Следует отметить, что применительно 
к сопрограммам не существует аналога API-
функции vTaskDelayUntil(), которая пред-
назначена для вызова из задач и позволя-
ет организовать циклическое выполнение 
какого-либо действия со строго заданным пери-
одом. Также отсутствует аналог API-функции 
xTaskGetTickCount(), которая позволяет полу-
чить текущее значение счетчика квантов.
использование очередей 
в сопрограммах
Как известно, очереди во FreeRTOS пред-
ставляют собой базовый механизм межзадач-
ного взаимодействия, на механизме очередей 
основываются такие объекты ядра, как сема-
форы и мьютексы.
FreeRTOS допускает использование очере-
дей и в сопрограммах, но в этом случае су-
ществует одно серьезное ограничение: одну 
и ту же очередь нельзя использовать для пере-
дачи сообщений от очереди к сопрограмме 
и наоборот. Допускается лишь передача сооб-
щений между сопрограммами и обработчика-
ми прерываний. Когда очередь создана, ее сле-
дует использовать только в задачах или только 
в сопрограммах. Эта особенность существен-
но ограничивает возможности совместного 
использования задач и сопрограмм.
Следует учитывать, что для сопрограмм набор 
API-функций для работы с очередями гораздо 
беднее набора API-функций для задач. Для со-
программ нет аналогов следующих API-функций:
1) uxQueueMessagesWaiting() — получение 
количества элементов в очереди.
2) xQueueSendToFront() — запись элемента 
в начало очереди.
3) xQueuePeek() — чтение элемента из очере-
ди без удаления его из очереди.
4) xQueueSendToFrontFromISR() — запись 
элемента в начало очереди из обработчика 
прерывания.


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




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

    Басты бет