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

 

posted @ 2021-07-30 11:02  olivertian  阅读(1339)  评论(0编辑  收藏  举报