首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >uCOS II中高优先级任务到低优先级任务的切换

uCOS II中高优先级任务到低优先级任务的切换
EN

Stack Overflow用户
提问于 2013-11-18 02:04:40
回答 3查看 2.4K关注 0票数 3

我刚接触实时操作系统(uCOS II),通过阅读uCOS作者写的书来学习它。我有一个疑问,我无法找到它的答案。

在uCOS中,优先级最高的任务按照调度算法分配中央处理器。因此,如果我通过创建两个任务来创建一个uCOS应用程序,一个任务具有高优先级(对于ex,Prio =1),另一个任务具有低优先级(对于ex Prio = 9)。例如,如果最高优先级的任务正在等待事件,那么调度器应该开始执行下一个更高优先级的任务吗?如果这是正确的,那么代码的哪一部分将高优先级切换为低优先级?

这三个arch依赖代码是: 1.中断级上下文切换2.启动准备运行的最高优先级任务3.任务级上下文切换

在情况1中,在服务中断之后,调度器返回到最高优先级的任务。在第二种情况下,当我们在第三种情况下通过OSStart()启动操作系统时,当一个更高优先级的任务准备就绪并被定时器中断调用时,它就会被调用

现在,如果高优先级任务处于等待状态,调度器将在何处或如何将CPU分配给低优先级任务?

谢谢

EN

回答 3

Stack Overflow用户

发布于 2013-11-18 04:38:38

考虑你的问题的另一种方法是问问你自己,高优先级任务是如何进入等待状态的。这两个问题的答案都是高优先级任务调用一个RTOS例程,比如GetEvent()。(我不知道这是否是真正的uCOS-II例程--我只是泛化一下。)RTOS例程将高优先级任务置于等待状态(即阻塞),然后RTOS调度器找到准备运行的下一个最高优先级任务,并切换到该任务的上下文。RTOS将具有几个允许任务上下文切换的阻塞功能。例如,当您从队列或邮箱读取数据时,或者当您等待信号量或互斥量时。

票数 1
EN

Stack Overflow用户

发布于 2013-11-20 04:33:00

每当发生调度事件时,调度程序都会运行。在您的示例中,当高优先级任务调用事件wait时,就会发生这种情况。通常,可能会阻塞或产生的OS调用会导致调度程序运行。调度程序也会在退出ISR时运行,包括IS计时器ISR。

通常,当调度器执行上下文切换时,它将当前处理器核心寄存器复制到任务的控制块,并将要切换到的任务的存储寄存器值复制到处理器寄存器中,堆栈指针和程序计数器复制在最后。对程序计数器的更改导致使用任务自己的堆栈在新任务中继续执行,其状态与上次阻塞或被抢占时的状态相同。当ISR中发生调度事件,导致更高优先级的任务准备就绪时,可能会发生抢占。

关于uC/OS-II的事情是,Jean Labrosse的书中对其进行了复杂的详细描述。Jack Ganssle在this online course中描述了实时操作系统的一般原理,并以uC/OS-II为例进行了说明。

票数 1
EN

Stack Overflow用户

发布于 2017-03-04 08:18:22

中断级上下文切换用于抢占式切换,例如,您有一个低优先级任务正在运行,而高优先级任务需要运行(例如OSTimeDly超时),在这种情况下,中断级上下文切换将暂停低优先级任务,然后切换到高优先级任务。

对于高优先级到低优先级的切换,需要高优先级的交换机通过调用OS_Sched来释放CPU资源

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20034244

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档