ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Среда
15 октября
1548153 Топик полностью
Nikolay_Po (Вчера, 20:45, просмотров: 53) ответил LightElf на Нет, текущий приоритет (приоритет обрабатываемого в данный момент прерывания) снизить нельзя. Тиритицки (не проверял) можно изменить значение приоритета в NVIC и программно взвести (через NVIC) то же прерывание еще раз. Тогда по выходу из текущего обработчика мы снова перезайдем в тот же обработчик, но уже на новом (более низком) уровне приоритета. Но тогда при наступлении нового события мы не смодем его гарантированно быстро обработать, потому что приоритет уже понижен и
Тут: 
Нет, текущий приоритет (приоритет обрабатываемого в данный момент прерывания) снизить нельзя.

Не согласен. Вы работали с BASEPRI? По сути, это регистр, указывающий текущий приоритет исполнения кода. И, обычно, перед изменением его значения, проверяют, не является ли новое значение менее низким приоритетом, чтобы не понизить уровень выполнения. А понизить можно.

Кстати, у RISC-V от WCH есть подобный регистр: https://caxapa.ru/1512118.html


Если не используется аппаратное сохранение стека, как у старших QingKe ядер WCH, то выполнение низкоприоритетного кода в продолжение кода прерывания, думаю возможно. Разница будет в том, что исполнение будет идти в machine mode. То же самый обработчик прерывания, не выходя из которого исполняется низкоприоритетный код после понижения приоритета, может сработать ещё раз и сохранят контекст в стеке снова даже во время продолжения выполнения прошлого обработчика. Главное, защититься от продолжения низкоприоритетной части, если предыдущая ещё не успела закончиться.