核心思路是区分‘抢占’与‘饥饿’:高优先级中断长时间运行本质是ISR设计问题,而非RTOS调度问题。优雅处理分三层:1) ISR最小化——中断里只做标记或拷贝数据,具体处理放任务(如通过信号量/队列唤醒高优先级任务),避免在ISR中执行耗时逻辑;2) 优先级反转与互斥——若低优先级任务持有资源,高优先级任务等待时,使用优先级继承或优先级天花板协议(如FreeRTOS的mutex)防止中优先级任务无限抢占;3) 任务级抢占控制——若低优先级任务有硬实时要求,可临时提升其优先级(如通过vTaskPrioritySet)或使用调度锁(但慎用,避免影响系统响应)。实操建议:先用逻辑分析仪测量ISR实际耗时,若>100us则必须重构;同时为低优先级任务设置看门狗或超时恢复机制。最终目标是让ISR像‘闪电’一样快,任务调度像‘水流’一样自然。
mcuku 阿沐 · 2026-08-27