Я работаю на Raspberry Pi Pico (RP2040, ядро Cortex-M0+, отладка через VSCode cortex-debug с использованием JLink SWD) и наблюдаю странное поведение в отношении PendSV.
Непосредственно перед этим обработчик исключений SVCall запросил PendSV через регистр ICSR. Но при возврате исключения, а не в хвостовой цепочке PendSV, выполнение вместо этого возвращается к вызывающему коду и продолжается выполнение без исключения.
Все это время регистр ICSR показывает ожидающий PendSV, даже если инструкции кода потока многократно повторяются. Приоритеты системных обработчиков равны нулю, приоритеты IRQ ниже.
Согласно справочному руководству ARMv6-M, PendSV нельзя отключить.
Итак, что мне не хватает, что может вызвать такое поведение?
Отредактировано, чтобы добавить:
Возможно, это взаимодействие с отладчиком? Программное обеспечение JLink (v4.95d) все еще находится в стадии бета-тестирования...
Я вижу, что отладчик может фактически отключить PendSV и Systick — C1.5.1 Пошаговая отладка: Дополнительно отладчик может установить для DHCSR.C_MASKINTS значение 1, чтобы предотвратить возникновение PendSV, SysTick и внешних настраиваемых прерываний. Это описывается как маскирование этих прерываний. Таблица C1-7 на странице C1-326 обобщает пошаговое управление инструкциями.