基於rt-thread功耗調優與PM管理實戰經驗分享-日誌篇
除錯篇 開始搭環境,動手調起來
驅動篇 想要調功耗,程式碼也要有
系統篇 如何利用rtos或PM框架,配合PMS執行緒,管理功耗
日誌篇 通過console log_file parse_log,搭建功耗日誌輸出與解析
本篇為日誌篇,也可以叫做功耗LOG日誌篇。
問:為何需要功耗的日誌呢?
答:其實,你可以通過高精的電源,把板子接入,然後,把vbat引出來,接到高精度電源上,然後,高精度電源,連線到電腦上,然後,開啟excel,記功耗資料,直接用excel儲存,後期,可以生成各種統計功耗的曲線等。
我之前除錯的一些低功耗的產品,其實就是這樣做的,測試環境比較難,測試的裝置過於龐大。並且,不是所以的公司,都具備這麼高階全套的裝置讓你用。
如果有條件,如產品有較大flash,有檔案系統,有emmc 或 sd卡裝置等,可以把功耗的資料,寫到檔案裡,這樣讓板子跑上一晚上,第二天,過來匯出功耗日誌檔案,放在電腦上,然後用python寫個處理指令碼,基本上,也能明白功耗的情況,並且,日誌可以搞的更豐富,明白更多的事件,遠比給你一張電流圖看的直爽。
功耗除錯的中後期,老闆想看功耗成果時,你可以生成一個比較不錯的表格或是曲線出來,這樣,更具有說服力,關鍵是,功耗LOG裡的資料,很有利於你分析整個系統的執行情況,何時電量消耗快,何時進入或是退出睡眠,都非常的利於功耗的調優。
開始搭建你的功耗日誌的環境吧!!
一、功耗日誌環境的搭建
如果你的產品,已經有日誌(如ulog),並且已經可以寫檔案了,那麼,你只要定義你的功耗的資料結構,獲取電池電壓、電量、一些事件、執行的時間、睡眠時間等,就可以完成功耗日誌的記錄了,當然,你要開一個定時器,週期性的列印,或是開一個執行緒,用來做更多的處理。
如果你還沒有日誌的環境,可以參考我的功耗日誌的demo。
git clonehttps://gitee.com/zhangsz0516/rtt_pm_log.git
環境為pandora stm32l475,檔案系統,spi flash,目前可以寫LOG到檔案了。
(1)工程clone下來,進入:
rtt_pm_log\examples\15_component_fs_flash
然後:
開啟env工具,menuconfig看一下。
接下來,scons --target=mdk5,就可以構建好工程了。
開啟:project.uvprojx 工程檔案,第一次開啟,全編譯一下。
(2)這裡基於spi flash 檔案系統,使用現有的例程,接下來,就是開啟ulog元件、PM元件,預設沒有log到檔案的功能,只有串列埠輸出的。
(3)適配一個file_be.c檔案,註冊到ulog,這樣,通過LOG_D,就可以把日誌資料,按指定的格式,寫到檔案裡儲存。
file_be.c暫時放在了 ulog相關的目錄下,定義了一個巨集:ULOG_BACKEND_USING_FILE
(4)spi flash,感覺上不是特別的好用,初始化,還不能太早,否則,檔案系統沒有正常跑起來,一寫LOG會卡住。
(5)目前加入了一個測試的程式,開啟定時器,列印LOG到檔案,還有點小問題,不過資料可以儲存了,這是關鍵。
二、功耗日誌的匯出方式:
(1)如果有USB,可以開啟,使用U盤的方式匯出,
(2)如果有BLE BT,可以通過手機匯出。
(3)串列埠,理論上,也可以匯出檔案,採用ymodem協議等,配合xshell。
(4)如果其他方式都不行,但有串列埠,可以用xshell, cat pm.log的方式,列印到xshell終端,然後複製出來。
總之,有了功耗資料,就可以分析了。這是解決功耗問題(時間段功耗、估算續航時長)的利器!!
三、功耗日誌程式的分析:
(1)如果給你一行功耗資料,
如:時間, 電量, 電壓, 睡眠時間,我估計,你很難發現有什麼作用。
如果給你一個檔案,裡面1分鐘一條這樣的資料,你會分析嗎?
有了時間,有了電量,就可以明白,一小時耗了多少電,估算一天耗了多少電。如果還有其他的事件的LOG,(最好寫在不同的log檔案裡),就可以分析每段時間裡,系統的工作情況,耗電情況,如開了GPS、或是BT等,或是開了LCD等,就可以簡單的計算出,一個小時幾個mAh,從而估算出整個系統的續航資料來!!
(2)如果分析LOG資料,直接匯入excel檢視?生成表格?
可以的,當然,你也可以用python工具,寫個簡單的處理指令碼,一行行的讀入,一條條的處理,最終,獲取到各個統計的資料。功耗的資料格式,前期調功耗,最好統一,資料可以多一些,如一些喚醒的事件標誌、喚醒次數,進入深睡眠的時間等,都可以加入。這些日誌,多了,就可以很快的定位到功耗問題的所在,或是可以很快的估算出續航情況。
(3)使用python指令碼,可以生成一些excel圖表,看起來更直觀,如可以看到電量消耗情況,看到哪個時間段,功耗資料最好或是最差等,接下來,就要與業務一起分析,如果去降功耗了。
(4)當然,也可以上一些高精的裝置,配合日誌,配合測試程式,把高功耗點找出來,優化。功耗除錯後期,基本上是靠功耗日誌來確認功耗是否有異常的。
(5)如果允許,可以把功耗的日誌,發到雲端處理,那樣會更省心。
(6)功耗日誌的擴充套件:別人家的功耗日誌!!
https://github.com/google/battery-historian
希望我們自己也能搞個出來!!
好吧,希望大家動手,認真搞一下吧,功耗是一個持久戰,當然,如果做的好,同時也可以給硬體、驅動把把技術關,如硬體改進、驅動加固等。
我想,功耗之路,沒有盡頭,但專案有盡頭,儘可能多想出一些行之有效的方法。磨好刀,用於實戰!