042、功耗管理与动态频率电压调整(DVFS)集成:从一次电池续航翻车说起
042、功耗管理与动态频率电压调整(DVFS)集成:从一次电池续航翻车说起
上个月调试一个电池供电的传感器节点,客户反馈待机时间只有理论值的一半。用电流探头一测,发现系统在空闲时居然还有十几毫安的底电流——这明显是任务调度策略出了问题。FreeRTOS的默认配置是为性能而生的,可没考虑过电池的感受。今天我们就聊聊怎么让FreeRTOS学会“省电”。
功耗管理的三个层次
嵌入式系统的功耗管理大致分三层:应用层通过业务逻辑控制设备开关,OS层调度任务让CPU有机会休眠,芯片层提供硬件低功耗模式。很多项目只做了第一层,结果就是任务空转时CPU还在全速运行。FreeRTOS的vTaskDelay()和vTaskDelayUntil()虽然会让出CPU,但如果没有配套的空闲任务钩子,芯片根本进不了睡眠。
先搞定空闲任务钩子
FreeRTOS内核在找不到就绪任务时会执行vApplicationIdleHook(),这里是挂起CPU的最佳时机:
voidvApplicationIdleHook(void