下面以不带浮点(即不开启FPU)为例讨论:任务切换时MSP和PSP如何运作的?
我们知道UCOSIII的任务切换是在PendSV_Handler这个最低优先级的异常中进行的,UCOSIII任务线程中用的PSP,而PendSV_Handler中用的是MSP,
在进入PendSV_Handler时,会自动的把8个寄存器(xPSR、LR、PC、R12、R0、R1、R2、R3)进行入栈,而这8个寄存器入栈用的是PSP,自动入栈完成后会切换到MSP,然后进行剩余寄存器(R4-R11)的手动入栈和下个任务8个寄存器(R4-R11)的手动出栈,最后PendSV_Handler函数返回时把剩下8个寄存器自动出栈,而此时出栈用的是MSP吧?那么问题来了,每次进栈时用的PSP,而出栈时是用MSP出栈的,那出栈的内容就不是上次进栈时保存的内容了,不知道这个过程哪里分析错了。哪位大神来解答下?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
就是说出栈的时候自动出栈的那8个寄存器是用PSP出栈的?
一周热门 更多>