求教!UCOSIII任务切换是MSP和PSP切换的问题?

2019-08-17 04:40发布

下面以不带浮点(即不开启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出栈的,那出栈的内容就不是上次进栈时保存的内容了,不知道这个过程哪里分析错了。哪位大神来解答下?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
peavey
1楼-- · 2019-08-17 04:58
 精彩回答 2  元偷偷看……
smcdef
2楼-- · 2019-08-17 05:24
出栈的时候会使用PSP的,ORR LR, LR, #0x04就是设置出栈使用PSP
shibinjie
3楼-- · 2019-08-17 08:07
smcdef 发表于 2017-6-30 13:15
出栈的时候会使用PSP的,ORR LR, LR, #0x04就是设置出栈使用PSP

就是说出栈的时候自动出栈的那8个寄存器是用PSP出栈的?

一周热门 更多>