
还是比亚迪,换嵌入式系统工程师。实时OS和上一篇聊的自动驾驶转机器人算法工程师相关但问法不同,这篇拆开对比着讲。实时OS:背熟概念的人,大多折在这一题面比亚迪的嵌入式系统工程师,实时OS几乎必考。面试官通常从一个实际现象切入,让候选人分析根因再给方案。面试官开口就问:“FreeRTOS里任务优先级反转怎么发生、怎么解决?比亚迪的人形机器人(研发中)上控制任务怎么调度?”回答思路:优先级反转是低优先级任务持有互斥锁时被中优先级任务抢占,导致高优先级任务被间接阻塞。比亚迪的人形机器人(研发中)里电机控制任务(RT优先级最高)和日志任务共享一条串口缓冲锁时踩过:日志任务拿到锁后被打断,控制任务等锁等了2ms,控制周期从1ms抖到3ms。解决用互斥量(带优先级继承)而非二值信号量:持锁的低优先级任务临时提升到等待者优先级,中优先级任务无法抢占,锁释放后恢复。控制任务本身用固定优先级调度:1kHz控制循环SCHED_FIFO跑最高优先级,网络任务次之,日志最低且可降级丢弃。把思路落到代码上,是这样:// 用带优先级继承的互斥量替代二值信号量 SemaphoreHandle_t lock = xSemaphoreCreateMutex(); // 继承优先级 // 控制任务:1kHz 硬实时 void CtrlTask(void* p) { TickType_t w = xTaskGetTickCount(); for(;;){ xSemaphoreTake(lock, portMAX_DELAY);