我正在寻求建议如何在嵌入式应用程序中实现低功耗管理。我的想法是根据RTOS信息+应用程序约束来处理IDLE任务中启用的WFI。
具有应用程序功能,以了解应用程序是否允许启用WFI
基于RTOS计时(任务,计时器,信号量超时,....)计算最大睡眠时间。
使用硬件功能唤醒系统(可能是EXTI)
因此,如果有人已经管理过这种应用程序,我有兴趣了解这些解决方案,也许可以获得一些代码示例
答案 0 :(得分:2)
支持它的体系结构的大多数RTOS实现已默认将WFI置于空闲循环中,如果没有后台工作或用户挂钩处理 - 我不认为FreeRTOS有任何不同。系统将在包括RTOS systick在内的任何中断时唤醒,因此无需进一步支持低功耗操作 - 如果它不在空闲循环中,那么它正在工作且无法进入低功耗状态。
为了进一步降低功耗,一些RTOS支持无滴答模式,其中RTOS systick中断周期是可变的,并设置为最长有效剩余超时或延迟,然后在启动时根据数字校正滴答计数器蜱虫实际上已经睡着了。当然,它仍然可以唤醒其他中断。
无中断操作对于具有相对较大的中断和定时间隔的系统(与RTOS定时速率相比)是有益的。如果你确实在每个刻度线上工作,那么它没什么用处,因为无论如何它都会唤醒它。
FreeRTOS支持configUSE_TICKLESS_IDLE
使用var
在ARM Cortex-M上进行无滴答操作,如Low Power RTOS For ARM Cortex-M MCUs所述。