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