Гибридная многозадачность во FreeRTOS
Гибридная многозадачность сочетает
в себе автоматический вызов планиров-
щика каждый квант времени, а также воз-
можность принудительного, явного вызова
планировщика. Полезной гибридная мно-
гозадачность может оказаться, когда необ-
ходимо сократить время реакции системы
на прерывание. В этом случае в конце тела
обработчика прерывания производят вызов
планировщика, что приводит к переключе-
нию на задачу, ожидающую наступления
этого прерывания.
API-функция portYIELD_FROM_ISR() слу-
жит для вызова планировщика из тела обра-
ботчика прерывания. Более подробно о ней
будет рассказано позже, при изучении двоич-
ных семафоров.
Какого-либо специального действия для
включения режима гибридной многозадач-
ности не существует. Достаточно разрешить
вызов планировщика каждый квант времени
(макроопределение configUSE_PREEMPTION
в файле FreeRTOSConf ig.h должно быть
равным 1) и в явном виде вызывать плани-
ровщик в функциях, реализующих задачи,
и в обработчиках прерываний с помощью
API-функций taskYIELD() и portYIELD_
FROM_ISR() соответственно.
Вытесняющая многозадачность
без разделения времени
Ее идея заключается в том, что вызов
планировщика происходит только в обра-
ботчиках прерываний. Задача выполняется
до тех пор, пока не произойдет какое-либо
прерывание. После чего она вытесняется за-
дачей, ответственной за обработку внешнего
события, связанного с этим прерыванием.
Таким образом, задачи не сменяют друг дру-
га по прошествии кванта времени, это про-
исходит только по внешнему событию.
Такой тип многозадачности более эффек-
тивен в отношении производительности, чем
вытесняющая многозадачность с разделени-
ем времени. Процессорное время не тратится
впустую на выполнение кода планировщика
каждый квант времени.
Для использования этого типа много-
задачности макроопределение configUSE_
Достарыңызбен бөлісу: |