FreeRTOS 和优先级反转

FreeRTOS and Priority Inversion

配置为抢占式调度时,FreeRTOS 是否支持优先级反转?我无法从 FreeRTOS 网站上找到此信息。

优先级反转是使用 RTOS 的应用程序的一项功能,而不是 RTOS 的功能,因此没有 RTOS 'supports' 优先级反转。然而,RTOS 确实支持优先级继承和优先级上限算法等功能,以最大限度地减少其影响。文献会告诉您这些算法消除了优先级倒置,这当然是无稽之谈,并且必须已经存在倒置才能触发算法。算法所做的是使反转时间有界——如果可能的话,最好首先尝试避免反转。

FreeRTOS 互斥体 (http://www.freertos.org/Real-time-embedded-RTOS-mutexes.html) 使用优先级继承来限制优先级反转。

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. */

每个任务的任务控制块都有一个变量来保存实际(基本)优先级,以防低优先级任务继承高优先级任务的优先级 - 顺便说一句 - 也在等待与低优先级任务相同的资源。