tqOS的PendSV抢占式任务调度

参考文献为:
1、Cortex-M3权威指南
4、tqOS V1.2
其实PendSV的原理就是软中断,将PendSV的中断优先级设置为最低,不可以打断任何其他中断服务程序。为什么这样呢?因为其他中断服务程序种必定用到了R0-R3、LR、PC、SP,如果在其他中断执行了一半的时候PendSV中断将其打断,则在PendSV中断处理函数中入栈的寄存器不是原始的线程留下来的寄存器的值了,而是被那个被打断的中断处理函数所修改过的值了。所以PendSV中断优先级必须是最低的,这样在所有其他中断都执行完并返回之后(返回的时候自动恢复寄存器R0-R3、LR、PC、SP)再执行PendSV异常时就可以完整的将线程的上下文保存到栈之中。
这里有几点说明一下,Cortex-M3处理器进入中断的时候只对R0-R3、LR、PC、SP进行自动压栈处理,而不对R4-R11寄存器进行处理。在中断返回的时候也弹出R0-R3、LR、PC、SP。PendSV也是一种中断,所以要完整的保存任务环境就要在PendSV中断中将R4-R11寄存器压栈,并且出栈的时候要先弹出R4-R11,然后再返回,中断返回过程中自动将剩余的R0-R3、LR、PC、SP寄存器组弹出。
移植的时候不要忘了在startup头文件中对PendSV进行初始化并设置中断优先级为最低优先级。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值