016、低功耗Tickless模式:让MCU在空闲时真正“睡下去”

张开发
2026/4/7 21:17:06 15 分钟阅读

分享文章

016、低功耗Tickless模式:让MCU在空闲时真正“睡下去”
016、低功耗Tickless模式:让MCU在空闲时真正“睡下去”最近调一个电池供电的传感器节点,发现待机电流怎么都降不下来。用电流探头一看,好家伙,即使所有任务都挂起,系统依然每隔1ms就有一次电流尖峰——典型的Tick中断没停掉。客户要求两节AA电池撑一年,这功耗根本扛不住。今天咱们就彻底搞明白FreeRTOS的Tickless模式,让MCU在没事干的时候能真正深度睡眠。为什么需要Tickless?标准FreeRTOS的时钟节拍(Tick)就像个闹钟,每隔1ms(假设configTICK_RATE_HZ=1000)就把CPU叫醒一次,检查要不要任务切换。问题在于,很多低功耗应用里,任务可能几十秒才需要执行一次,但每毫秒都被Tick中断吵醒,功耗直接炸了。Tickless模式的核心思想很简单:没有任务需要跑的时候,直接关掉Tick中断,让MCU进入深度睡眠。等下一个定时器事件(比如某个任务的延时到期)该发生的时候,再一次性补上这段时间缺失的Tick计数。底层原理:如何计算该睡多久?实现Tickless需要硬件定时器支持,这个定时器要能在深度睡眠下保持计数。关键逻辑在portSUPPRESS_TICKS_AND_SLEEP()函数里,它会在空闲任务里被调用。// 以STM32L4的LPTIM为例,展示核心逻辑(简化版)

更多文章