我在Raspberry Pi Pico上运行(RP2040,Cortex-M0+内核,通过VSCode cortex调试-使用JLink SWD调试),我看到了关于PendSV的奇怪行为。在此之前,SVCall异常处理程序通过ICSR寄存器请求PendSV。但在异常返回时,执行将返回到调用代码并继续非异常执行,而不是对PendSV进行尾链。即使线程代码指令被重复单步执行,ICSR寄存器也始终显示挂起的PendSV。系统处理程序
我正在研究Cortex-M4上的上下文保存和恢复机制,这样我就可以实现简单的多任务处理。我使用arm-none-eabi-g++编译这段代码。可移植性目前并不是一个问题。我将其用于协作多任务处理,当任务可以调用yield函数时,该函数将通过引发PendSV异常使执行返回到内核。(然后内核可以调度另一个运行任务,并最终返回到当前任务。)(Context saving code goes here) ...
// Set the PEND
当我由于异常而处于处理程序模式时,我正在评估一些条件,并决定是返回到线程模式到相同的函数,还是返回到另一个函数,只是为了在完成后返回到原始函数。最初,我想像使用Cortex R4一样,从中断模式切换到特权模式。; do your thing但现在我用的是Cortex M7 OriginalLR,{R0-R12}");
但我不知道如何返回,如果我退出或BL,那么它将从堆栈中弹出。更换个人电脑