Цитата(amaora @ Jun 24 2016, 20:02)

Красивее вариантов нет?
Это, наверное, самый простой, когда проект без ОС и не хочется самому писать на асме подмену контекстов выходов из IRQ. Но могут попасться недокументированные вектора на месте якобы свободных. Паранойю можно сгладить передачей сигналов подтверждений вызова между своими уровнями. Если при влёте в нижеприоритетное прерывание нет флага от более приоритетного, то сразу выходить из обработчика.
Но можно добавить паранойи. Если вдруг разрешить якобы свободный вектор и что-то недокументированное запросит прерывание, то произойдёт зависание в обработчике IRQ. Так что вариант использовать вектор периферии, которая в проекте не используется смотрится тоже неплохо. Обязательно ли нужно запитывать этот блок для корректной работы NVIC должно быть написано в документации. Если не написано, то скорее всего придётся запитывать и внутри обработчика сбрасывать все возможные запросы от этого блока периферии, несмотря на то, что блок не используется.
Цитата(esaulenka @ Jun 27 2016, 11:52)

PS вроде б можно крутить приоритет текущего прерывания.
Поделитесь информацией, если что-то узнаете. Логика NVIC может быть заточена на отработку инструкции BX со служебными значениями (паттерн 0xffffffxx).
Сообщение отредактировал GetSmart - Jun 27 2016, 21:22