基于rt-thread功耗调优与PM管理实战经验分享-日志篇

基础篇 概念,基础,理解什么是功耗

调试篇 开始搭环境,动手调起来

驱动篇 想要调功耗,代码也要有

系统篇  如何利用rtos或PM框架,配合PMS线程,管理功耗

实战篇 具体问题的实战思考与解决思路

日志篇 通过console log_file parse_log,搭建功耗日志输出与解析

收尾篇 高调做好功耗,低调掌握知识的回顾。

 

本篇为日志篇,也可以叫做功耗LOG日志篇。

问:为何需要功耗的日志呢?

答:其实,你可以通过高精的电源,把板子接入,然后,把vbat引出来,接到高精度电源上,然后,高精度电源,连接到电脑上,然后,打开excel,记功耗数据,直接用excel保存,后期,可以生成各种统计功耗的曲线等。

         我之前调试的一些低功耗的产品,其实就是这样做的,测试环境比较难,测试的设备过于庞大。并且,不是所以的公司,都具备这么高级全套的设备让你用。

        如果有条件,如产品有较大flash,有文件系统,有emmc 或 sd卡设备等,可以把功耗的数据,写到文件里,这样让板子跑上一晚上,第二天,过来导出功耗日志文件,放在电脑上,然后用python写个处理脚本,基本上,也能明白功耗的情况,并且,日志可以搞的更丰富,明白更多的事件,远比给你一张电流图看的直爽。

      功耗调试的中后期,老板想看功耗成果时,你可以生成一个比较不错的表格或是曲线出来,这样,更具有说服力,关键是,功耗LOG里的数据,很有利于你分析整个系统的运行情况,何时电量消耗快,何时进入或是退出睡眠,都非常的利于功耗的调优。

开始搭建你的功耗日志的环境吧!!

 

 

一、功耗日志环境的搭建

如果你的产品,已经有日志(如ulog),并且已经可以写文件了,那么,你只要定义你的功耗的数据结构,获取电池电压、电量、一些事件、运行的时间、睡眠时间等,就可以完成功耗日志的记录了,当然,你要开一个定时器,周期性的打印,或是开一个线程,用来做更多的处理。

如果你还没有日志的环境,可以参考我的功耗日志的demo。

 

git clone https://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

 

 

基于rt-thread功耗调优与PM管理实战经验分享-日志篇

 

(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)功耗日志的扩展:别人家的功耗日志!!

 

基于rt-thread功耗调优与PM管理实战经验分享-日志篇

 

https://github.com/google/battery-historian

 

希望我们自己也能搞个出来!!

 

 

好吧,希望大家动手,认真搞一下吧,功耗是一个持久战,当然,如果做的好,同时也可以给硬件、驱动把把技术关,如硬件改进、驱动加固等。

 

我想,功耗之路,没有尽头,但项目有尽头,尽可能多想出一些行之有效的方法。磨好刀,用于实战!