我在 Raspberry Pi Pico(RP2040,Cortex-M0+ 内核,使用 JLink SWD 通过 VSCode cortex-debug 进行调试)上运行,我看到有关 PendSV 的奇怪行为。
紧接着,SVCall 异常处理程序通过 ICSR 寄存器请求 PendSV。但是在异常返回时,不是尾链 PendSV,而是执行返回到调用代码并继续非异常执行。
ICSR 寄存器始终显示待处理的 PendSV,即使在重复执行线程代码指令时也是如此。系统处理程序优先级全部为零,IRQ 优先级较低。
根据 ARMv6-M 参考手册,PendSV 不能被禁用。
那么,我错过了什么会导致这种行为?
编辑添加:
也许这是一个调试器交互?JLink 软件 (v4.95d) 仍处于测试阶段...
我看到调试器实际上可以禁用 PendSV 和 Systick - C1.5.1 调试步进:“可选地,调试器可以将 DHCSR.C_MASKINTS 设置为 1 以防止发生 PendSV、SysTick 和外部可配置中断。这被描述为屏蔽这些中断. C1-326 页的表 C1-7 总结了指令步进控制。