感慨
做一個產品,學一門技術,最需要的就是不斷摳細節,對於嵌入式,省電是一個主題,大大小小的嵌入式產品,走的是量,如果能降低功耗,也算是給環保事業做出了點微薄的心理安慰。
廢話少說,主要是查資料的時候,發現大部分資料講的是在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,還是比較可觀的。