感慨
做一个产品,学一门技术,最需要的就是不断抠细节,对于嵌入式,省电是一个主题,大大小小的嵌入式产品,走的是量,如果能降低功耗,也算是给环保事业做出了点微薄的心理安慰。
废话少说,主要是查资料的时候,发现大部分资料讲的是在FreeRTOSConfig.h 文件中配置configUSE_TICKLESS_IDLE,但实际操作时,不起作用。
/* USER CODE BEGIN Defines */
/* Section where parameter definitions can be added (for instance, to override default ones in FreeRTOS.h) */
#define configUSE_TICKLESS_IDLE 1
/* USER CODE END Defines */
说明
FreeRTOS.h中设置
#ifndef configUSE_TICKLESS_IDLE
// 这个设置改为1即可开启低功耗模式
#define configUSE_TICKLESS_IDLE 1
#endif
或者直接设置工程Symbols
低功耗的具体实现是在port.c中,有如下代码,必须设置为1才能起作用:
#if( configUSE_TICKLESS_IDLE == 1 )
__attribute__((weak)) void vPortSuppressTicksAndSleep( TickType_t xExpectedIdleTime )
{
……(具体细节不贴出)
}
#endif /* #if configUSE_TICKLESS_IDLE */
然而其并没有引用FreeRTOSConfig.h,故在FreeRTOSConfig.h中定义,并不能起到打开低功耗的效果
#include "FreeRTOS.h"
#include "task.h"
实验结果
在本人使用的板子上,跑一个打印任务,1s打印字符“ok\r\n”,从0.2A降到了0.14A,还是比较可观的。