Использует ли обработчик прерывания стек прерванной задачи или отдельный стек в качестве своего стека? (PowerPC, VxWorks)
Стек, используемый обработчиком прерываний в VxWorks (PowerPC)
Ответы (3)
В VxWorks есть специальный стек для прерываний. Все обработчики прерываний используют один и тот же стек, расположенный чуть выше места загрузки образа vxWorks.
Я считаю, что размер стека по умолчанию составляет 5 КБ, но его можно легко изменить с помощью конфигуратора ядра.
Механизм ISR работает примерно следующим образом:
Вы можете думать о VxWorks как об обычно устанавливаемой оболочке ассемблерного кода вокруг вашего ISR-кода.
При входе он автоматически сохраняет регистры общего назначения (в стеке ISR), поэтому состояние исполняемого контекста (другого ISR или задачи) сохраняется.
При выходе регистры восстанавливаются, но дополнительно вызывается планировщик ОС, чтобы посмотреть, не изменила ли только что завершившаяся ISR состояние задачи с более высоким приоритетом. Если это произошло, то возобновляется задача с более высоким приоритетом. Если нет доступных задач с более высоким приоритетом, восстанавливается исходная задача.
Это зависит от архитектуры. Из Руководства программиста ядра VxWorks (v6.8):
Все ISR используют один и тот же стек прерываний. [...]
ВНИМАНИЕ: Некоторые архитектуры не позволяют использовать отдельный стек прерываний, а ISR используют стек прерванной задачи. [...] См. справочник VxWorks для вашего BSP, чтобы определить, поддерживает ли ваша архитектура отдельный стек прерываний.
В вашем случае PowerPC поддерживает отдельный общий стек прерываний (для каждого ядра).
xiaokaoy, Довольно хорошее описание работы прерываний есть в Руководстве программиста VxWorks, раздел 2.6. Если у вас нет копии, она доступна в Интернете из многих источников.