OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4537|回复: 3

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

[复制链接]

38

主题

196

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1179
金钱
1179
注册时间
2015-11-9
在线时间
249 小时
发表于 2017-6-30 12:37:33 | 显示全部楼层 |阅读模式
1金钱
下面以不带浮点(即不开启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出栈的,那出栈的内容就不是上次进栈时保存的内容了,不知道这个过程哪里分析错了。哪位大神来解答下?

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手上路

积分
27
金钱
27
注册时间
2014-11-14
在线时间
1 小时
发表于 2017-6-30 13:03:53 来自手机 | 显示全部楼层
中断出栈时设置使用psp即可
回复

使用道具 举报

1

主题

16

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2017-6-27
在线时间
15 小时
发表于 2017-6-30 13:15:59 | 显示全部楼层
出栈的时候会使用PSP的,ORR LR, LR, #0x04就是设置出栈使用PSP
回复

使用道具 举报

38

主题

196

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1179
金钱
1179
注册时间
2015-11-9
在线时间
249 小时
 楼主| 发表于 2017-6-30 14:38:24 | 显示全部楼层
smcdef 发表于 2017-6-30 13:15
出栈的时候会使用PSP的,ORR LR, LR, #0x04就是设置出栈使用PSP

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

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-8-17 12:09

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表