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. */
每个任务的任务控制块都有一个变量来保存实际(基本)优先级,以防低优先级任务继承高优先级任务的优先级 - 顺便说一句 - 也在等待与低优先级任务相同的资源。
配置为抢占式调度时,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. */
每个任务的任务控制块都有一个变量来保存实际(基本)优先级,以防低优先级任务继承高优先级任务的优先级 - 顺便说一句 - 也在等待与低优先级任务相同的资源。