为了可以降低功耗,又不影响系统运行,该如何做?
可以在本该空闲任务执行的期间,让MCU进入相应的低功耗模式;当其他任务准备运行的时候,唤醒MCU退出低功耗模式。
难点:
1、进入低功耗之后,多久唤醒?也就是下一个要运行的任务如何被准确唤醒。
2、任何中断均可唤醒MCU,若滴答定时器频繁中断则会影响低功耗的效果,可以关掉滴答定时器中断吗?答案是不可以。
解决方案:将滴答定时器的中断周期修改为低功耗运行时间,这样不就两全其美了!
退出低功耗后,需补上系统时钟节拍数。
值得庆幸的是:FreeRTOS 的低功耗 Tickless 模式机制已经处理好了这些难点。我们只需要直接应用就可以了!
上文提到的技术要点涉及嵌入式系统低功耗设计与实时操作系统(RTOS)的协同工作,我将从原理、难点和解决方案三个层次进行系统性讲解:
一、低功耗机制的核心原理
- 状态切换策略:
MCU通过动态切换运行模式(如运行/睡眠/深度睡眠)降低功耗,核心逻辑为:
- 空闲时进入低功耗模式(通过WFI/WFE指令)
- 中断事件唤醒恢复运行
- 功耗模型:
P_avg = P_active * D_active + P_sleep * (1-D_active)
其中D_active为活跃时间占比,降低D_active可指数级降低整体功耗
二、技术难点与挑战
- 精准唤醒定时(Temporal Accuracy)
- 调度器需预测下一个任务触发时间t_next
- 设置硬件定时器在(t_next - t_wakeup_latency)时唤醒
- 误差容限需小于任务时间约束(通常<1%时钟周期)
- 系统节拍补偿(Tick Compensation)
- 传统节拍中断(如1ms周期)导致频繁唤醒
- 关闭节拍中断会破坏时间基准
- 解决方案:动态节拍缩放(Dynamic Tick)
三、FreeRTOS Tickless模式实现
- 架构设计:
void vPortSuppressTicksAndSleep(TickType_t xExpectedIdleTime)</

最低0.47元/天 解锁文章
628

被折叠的 条评论
为什么被折叠?



