FreeRTOS在配置为抢先调度时是否支持优先级反转?我无法从FreeRTOS网站上找到这些信息。
优先级反转是使用RTOS的应用程序的一个功能,而不是RTOS的一个特性,因此没有RTOS"支持"优先级反转。然而,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. */
每个任务的任务控制块都有一个变量,用于在低优先级任务继承高优先级任务的优先级的情况下保存实际(基本)优先级,顺便说一句,高优先级任务也在等待与低优先级任务相同的资源。