PRIORITY выше, чем conf igKERNEL_
INTERRUPT_PRIORITY.
Рассмотрим пример. Пусть некий микро-
контроллер имеет 7 возможных приоритетов
прерываний. Значение приоритета 7 соответ-
ствует самому высокоприоритетному пре-
рыванию, 1 — самому низкоприоритетному.
Зададим значение conf igMAX_SYSCALL_
INTERRUPT_PRIORITY = 3, а значение
configKERNEL_INTERRUPT_PRIORITY = 1
(рис. 13).
Прерывания с приоритетом 1–3 не будут
выполняться, пока ядро или задача выпол-
няют код, находящийся в критической сек-
ции, но могут при этом использовать API-
функции. На время реакции на такие преры-
вания будет оказывать влияние активность
ядра FreeRTOS.
На прерывания с приоритетом 4 и выше
не влияют критические секции, так что ниче-
го, что делает ядро в данный момент, не поме-
шает выполнению обработчика такого пре-
рывания. Обычно те прерывания, которые
имеют самые строгие временны′е требования
(например, управление током в обмотках
двигателя), должны иметь приоритет выше,
чем conf igMAX_SYSCALL_INTERRUPT_
PRIORITY, чтобы гарантировать, что ядро
не внесет дрожание (jitter) во время реакции
на прерывание.
И наконец, прерывания, которые не вы-
зывают никаких API-функций, могут иметь
любой из возможных приоритетов.
Критическая секция в FreeRTOS — это уча-
сток кода, во время выполнения которого за-
прещены прерывания процессора и, соответ-
ственно, не происходит переключение кон-
текста каждый квант времени [7]. Подробнее
о критических секциях — в следующей пу-
бликации.
рис. 11. Результаты выполнения учебной программы № 2
рис. 12. Последовательность выполнения задач и прерываний в учебной программе № 2
|