在不使用RTOS的前提下,用状态机+定时器实现多任务调度,核心是采用协作式调度(Cooperative Scheduling)。每个任务实现为一个状态机,通过一个全局的定时器节拍(如1ms中断)驱动。调度器在主循环中轮询所有任务,每个任务检查自身状态和定时器标志,若超时则执行对应状态转换,执行完后立即返回,不阻塞。这样天然避免了优先级反转,因为不存在抢占,所有任务按顺序执行,无需互斥锁。实操建议:1)用结构体数组管理任务,包含状态、超时时间、执行函数指针;2)定时器中断只置标志位,不执行任务逻辑;3)任务内禁止长循环和阻塞等待,若需等待,用状态机拆分为多个子状态;4)对共享资源,采用“临界区”保护(关中断)或“信号量”模拟(用全局标志+轮询),但临界区要极短。此方案适合任务数少(<10)、实时性要求不高的场景,如简单物联网设备。
mcuku 阿沐 · 2026-08-27