发 帖  

请问UCOSIII中的任务调度和任务切换有什么区别?

2889 UCOSIII
2020-5-25 07:27:43   1 评论 分享淘帖 邀请回答 举报
1 条评论
  • 2023-1-13 10:27

    看到各楼回答内容不太正确我来纠正下,其实这个和ucosIII系统无关,首先要从概念上区分任务调度和任务切换的区别与联系。所谓任务调度,通俗来讲就是让优先级最高的就绪任务处于运行态。而实现任务调度,无非就两步,第一步就是找到优先级最高的就绪任务,第二步就是执行任务切换。所以讲到这里你应该知道任务切换实际上只是任务调度的其中一步了。任务切换的实质是实现任务间上下文的切换,而其通俗来讲就是改变任务的sp栈指针来实现指向不同的任务栈空间,具体而言,就是先将任务A的上下文进行压栈,然后将SP指向B的任务栈,将B任务栈进行弹栈恢复到CPU通用寄存器中。需要注意的是,目前的处理器一般没有对PC寄存器进行弹栈压栈的指令,所以只能借用其他办法比如中断触发。任务切换的方法就是通过触发一次中断(具体而言是PendSV中断),在PendSV中断内实现上下文切换。也就是说汇编PendSV中断中做的就是先将任务A的上下文入栈,然后修改SP指向任务B,将任务B的上下文进行弹栈就实现任务切换。ucos任务级的调度器函数是OS_Sched(),该函数主要包括两个接口,OS_SchedNew()实现优先级查找,OSCtxSw()实现任务切换。

4个回答
2020-5-25 15:25:54 评论

举报

2020-5-25 15:45:44 评论

举报

2020-5-25 16:04:31 评论

举报

2020-5-25 16:19:59 评论

举报

只有小组成员才能发言,加入小组>>

10420个成员聚集在这个小组

加入小组

创建小组步骤

快速回复 返回顶部 返回列表
关注微信公众号

电子发烧友网

电子发烧友论坛

社区合作
刘勇
联系电话:15994832713
邮箱地址:liuyong@huaqiu.com
社区管理
elecfans短短
微信:elecfans_666
邮箱:users@huaqiu.com
关闭

站长推荐 上一条 /9 下一条

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