首页天道酬勤ucoslll系统,ucos2812

ucoslll系统,ucos2812

张世龙 05-13 12:12 97次浏览

任务优先级每个任务都有优先级。任务越重要,赋予的优先级应越高

静态优先级应用程序执行过程中诸任务优先级不变,则称之为静态优先级

在执行动态首选APP应用程序时,任务的优先级是可变的称为动态优先级实时内核应当避免出现优先级反转问题。

在优先级反转的图中,任务1的优先级高于任务2,任务2的优先级高于任务3。 任务1和任务2处于挂起状态,等待某个事件的发生,并且任务3运行如下。 在这种情况下,任务3使用共享资源。 在使用共享资源之前,必须首先获得该资源的信号(Semaphore )。 任务3获得此信号量,开始使用共享资源。 由于任务1的优先级高,在等待事件发生后,剥夺任务3的CPU使用权,开始执行任务1。 执行中任务1也必须使用该任务3使用的资源,该资源的信号量也被任务3占用,因此任务1只能处于挂起状态,等待任务3释放该信号量。 任务3继续执行。 由于任务2的优先级高于任务3,任务2等待的事件发生后,任务2剥夺任务3的CPU使用权并开始执行。 处理应该处理的事件,在处理结束之前将CPU的控制权返回给任意3。 运行任务3,直到释放该共享资源的信号量。 直到这时,实时内核才知道优先级高的任务正在等待该信号量,所以内核进行任务切换,以使任务1得到该信号量并执行。

在这种情况下,任务1的优先顺序实际上降低到任务3的优先顺序级别。 因为任务1要等到释放任务3占用的共享资源。 任务2剥夺任务3的CPU使用权进一步恶化了任务1的状况,任务2迫使任务1添加额外的延迟时间。任务1和任务2的优先级发生了反转

修改方法是在任务3使用共享资源时提高任务3的优先级。 任务完成后恢复。 任务3的优先级必须高于允许使用此资源的任务。多任务内核应允许动态改变任务的优先级以避免发生优先级反转现象但是,改变任务的优先顺序需要时间。 如果任务3没有先被任务1夺取CPU使用权,而是被任务2夺取了CPU使用权,则在使用共享资源前提高任务3的优先级,然后在使用资源后花很多时间返回任务3的优先级,将会浪费很多看不见的CPU时间。真正需要的是,为防止发生优先级反转,内核能自动变换任务的优先级,这叫做优先级继承(Priority inheritance)但C/OS-不支持优先级继承。

下图:优先级继承进程。 任务3正在运行,任务3申请信号以获得共享资源的使用权,并且任务3获得共享资源并开始使用。 然后,CPU使用权被任务1夺走,任务1开始运行,任务1申请共享资源的信号通知。 此时,内核知道任务3占用了其信号量,任务3的优先级低于任务1,因此内核将任务3的优先级提高到与任务1相同,但返回任务3继续执行,直到任务3释放共享资源的信号量为止在这种情况下,内核恢复任务3的原始优先级,并将信号传递给任务1,从而顺利执行任务1。 此外,在任务1完成后,具有任务1和任务3之间优先级的任务(例如任务2 )可以获得CPU使用权并开始执行。

任务优先级给任务排序不是小事。 因为实时系统相当复杂。 在许多系统中,所有的任务都不重要。 不重要的任务当然优先级可以低。 实时系统大多集成了软实时和硬实时两种需求。 软实时系统只要求尽快执行任务,而不要求在特定时间内完成。 在硬实时系统中,任务不仅要准确执行,而且要按时完成。

3358 www.Sina.com/(ratemonotonicscheduling )用于分配任务的优先级。 此方法适用于运行了哪些任务的单调执行率调度法RMS

指向uCOS-II基础入门教程的链接如下:

uCOS-II基础入门教程(2) )。

uCOS-II基础入门教程(1) ) ) ) )。

关注微信公众号“嵌入式软件开发学习圈”,获取更多学习资料和信息。 你们的关心是我最大的动力。

次数最频繁,执行最频繁的任务优先级最高

rtos系统,ucos和freertos ,