STM32 xPortPendSVHandler说明记录
关键点:
1、进入PendSV前,硬件自动压栈了PSR、PC、LR、R12、R3~R0的寄存器(使用PSP指针,压入任务堆栈,即硬件自动保存“调用者保存寄存器”),对应图中的①
2、进入PendSV后,手动保存R4-R11,对应xPortPendSVHandler函数中的stmdb r0!, {r4-r11}语句(也就是手动保存“被调用者保存寄存器”),对应图中的②
3、切换新的TCB后,找到该TCB对应的PSP,手动弹出R4-R11,对应xPortPendSVHandler函数中的ldmia r0!, {r4-r11}语句,对应图中的③
4、bx r14 ,异常发生时,R14中保存异常返回标志,包括返回后进入线程模式还是处理器模式、使用PSP堆栈指针还是MSP堆栈指针,当调用 bx r14指令后,硬件会知道要从异常返回,然后出栈,这个时候堆栈指针PSP已经指向了新任务堆栈的正确位置,当新任务的运行地址被出栈到PC寄存器后,新的任务也会被执行。对应图中的④
参考博文:https://blog.csdn.net/tao475824827/article/details/105622087