配置为抢占式调度时,FreeRTOS是否支持优先级倒置?我无法从FreeRTOS网站上找到这些信息。
答案 0 :(得分:4)
优先级倒置是使用RTOS的应用程序的一个功能,而不是RTOS的功能,因此没有RTOS支持优先级倒置。但是,RTOS支持优先级继承和优先级上限算法等功能,以最大限度地降低其影响。文献将告诉您这些算法删除优先级倒置,这当然是无意义的,并且必须已经存在反转才能触发算法。算法所做的是使反演时间有限 - 尽管如果可能的话,最好只是尝试避免反演。
FreeRTOS互斥锁(http://www.freertos.org/Real-time-embedded-RTOS-mutexes.html)使用优先级继承来限制时间优先级。
答案 1 :(得分:1)
Freertos支持优先级继承作为解决优先级倒置的机制。请检查freertos源代码的tasks.c文件,并参考任务控制块的结构:
#if ( configUSE_MUTEXES == 1 )
unsigned portBASE_TYPE uxBasePriority; /* The priority last
assigned to the task -
used by the priority
inheritance mechanism. */
每个任务的任务控制块都有一个变量来保存实际(基本)优先级,如果低优先级任务继承了高优先级任务的优先级 - 顺便说一下 - 也在等待相同的资源作为低优先级的任务。