优先级反转(Priority Inversion)
当高优先级任务被低优先级任务间接阻塞时,系统进入非预期调度状态, 导致实时性被中断破坏。
机制定义
High Task Waits Low Task Resource + Mid Task Preemption → Scheduling Inversion
触发条件
资源占用
低优先级任务持有互斥资源(Mutex/Semaphore)。
高优先级阻塞
高优先级任务等待资源释放。
中优先级抢占
中优先级任务持续运行,阻止低优先级释放资源。
系统影响
实时响应时间不可预测,系统抖动增加,可能违反硬实时约束。
解决方案
优先级天花板
资源绑定最高优先级限制,避免中断抢占。
核心API链路
演示代码
#include "hrtos.h"
sbit LED_HIGH = P1^0;
sbit LED_MID = P1^1;
sbit LED_LOW = P1^2;
static void high_task(void)
{
while(1)
{
os_mutex_lock(0);
LED_HIGH = ~LED_HIGH;
os_mutex_unlock(0);
os_delay(10);
}
}
static void mid_task(void)
{
while(1)
{
LED_MID = ~LED_MID;
volatile u16 i;
for(i = 0; i < 2000; i++);
os_delay(20);
}
}
static void low_task(void)
{
while(1)
{
os_mutex_lock(0);
LED_LOW = ~LED_LOW;
os_delay(50);
os_mutex_unlock(0);
}
}
void hrtos_main(void)
{
os_mutex_init(0);
os_task_create((unsigned int)high_task, 1, 5, 5);
os_task_create((unsigned int)mid_task, 2, 3, 5);
os_task_create((unsigned int)low_task, 3, 1, 5);
}
总结
Priority Inversion 是 RTOS 调度系统必须通过 IPC 机制解决的核心问题。