Вложенность прерываний
Во многих архитектурах микроконтролле-
ров прерывания имеют приоритеты, которые
могут быть жестко заданы, но может суще-
ствовать возможность и конфигурировать
уровни приоритетов прерываний.
Важно различать приоритет задач и прио-
ритет прерываний. Приоритеты прерываний
аппаратно фиксированы в архитектуре микро-
контроллера (или определены при его кон-
фигурации), а приоритеты задач — это про-
граммная абстракция на уровне ядра FreeRTOS.
Приоритет прерываний задает преимущество
на выполнение того или иного обработчика
прерывания при возникновении сразу несколь-
ких прерываний. Задачи не выполняются
во время выполнения обработчика прерыва-
ния, поэтому приоритет задач не имеет ника-
кого отношения к приоритету прерываний.
Под вложенностью прерываний понима-
ется корректная работа FreeRTOS при одно-
временном возникновении сразу нескольких
прерываний с разными приоритетами, когда
обработчик низкоприоритетного прерыва-
ния еще не завершился, а возникает высоко-
приоритетное прерывание, и процессор начи-
нает выполнять его программу-обработчик.
Большинство портов FreeRTOS допу-
скает вложение прерываний. Эти порты
требуют задания одного или двух конфи-
гурационных макроопределений в файле
FreeRTOSConfig.h:
1. configKERNEL_INTERRUPT_PRIORITY —
задает приоритет прерывания, исполь-
зуемого для отсчета системных квантов
FreeRTOS. Если порт не использует ма-
кроопределение configMAX_SYSCALL_
INTERRUPT_PRIORITY, то для обеспече-
ния вложенности прерываний все прерыва-
ния, в обработчиках которых встречаются
API-функции FreeRTOS, должны иметь
этот же приоритет.
2. conf igMAX_SYSCALL_INTERRUPT_
PRIORITY — задает наибольший приоритет
прерывания, из обработчика которого мож-
но вызывать API-функции FreeRTOS (чтобы
прерывания могли быть вложенными).
Получить модель вложенности прерыва-
ний без каких-либо ограничений можно задав
значение configMAX_SYSCALL_INTERRUPT_
Достарыңызбен бөлісу: |