【PM2.0组件优化】优化建议集思广益交流

发布于 2020-09-04 08:39:01

RT-Thread PM2.0组件优化建议


背景

目前 rt-thread 组件中,有一套 PM 管理的组件。但在具体项目中,未能使用起来。客户表示使用起来非常别扭。我们深入一线,切身参与到功耗开发的整个流程中,也发现了,当前 PM 组件的编程思想,与实际不符。所以开发第二代 PM 管理框架,让他在下个项目中,能够用起来,并能很好的管理整个系统的功耗。

大家可以都提些建议或更好的意见,扩展性、易用性、更好的在产品中使用并发挥作用。

查看更多

关注者
1
被浏览
631
11 个回答
Aladdin-Wang
Aladdin-Wang 认证专家 2020-09-04

一、对于需要长时间休眠,通过中断事件,或者定时事件唤醒的使用场景,比如汽车电子上,用户并不需要运行时降频或者主动降低功耗,也不需要休眠时对时钟进行补偿。对于这样的场景,我再使用的过程中,感觉想进入休眠很麻烦,不像使用裸机那样,睡眠前对外设进行反初始化就行了,使用PM组件后,还需要阻塞掉所有的线程,检查所有使用低功耗请求和释放的地方,最后还是要再自己关闭外设,打开想要唤醒的中断源。我比较怀疑PM组件好像并不适合用在这样的场景。
二、关于PM组件的驱动,对于用户来说适配PM组件的驱动是一件及其麻烦的事情,需要用户不仅要懂PM组件的框架,还需要懂单片机低功耗的原理,这对于小白来说直接就劝退了。我希望PM组件不仅做好框架,把驱动包也做起来,用户只需要简单的勾选,和几个简单的API,就能在自己的使用场景上使用起来。

shao7936626
shao7936626 2020-09-07

Rt thread PM组件优化

针对平台:Stm32

传感器类:

解释:这边的传感器类别一般是购买现成的传感器模组或者芯片,然后传感器与mcu 进行通讯,mcu将传感器数据协议打包发送的场景;

遥信传感器: 水浸传感器,烟雾传感器,倾角开关等等;
遥测传感器: 气体传感器,温湿度传感器,光照传感器,液位、流量、流速传感器,三轴传感器等等;

以上传感器(只罗列一小部分):目前各行业都会使用,而且越来越多的要求都是安装方便,电池供电,不需要布线;对数据的精准度,及时性等不是那么高;

通讯类:

用Lora 通讯的设备:上述提到的各类传感器,城市里面现在非常流行的井盖位移传感器,广告牌倾倒传感器,高精度的桥梁监测传感器等等。
目前大部分小厂家采购直接购买Lora模组的形式,这样不用关心射频的问题,有部分lora模块自身已经支持低功耗,有部分未支持低功耗;其中大部分厂家为了支持lora模块的空中唤醒机制,都会将mcu的lpuart 给lora模块,但是往往lpuart不够用;

用Nb-iot通讯的设备:最常见的智能门锁,智慧烟感,手动报警器,声光报警器等等,目前nb-iot的通讯模组价格大部分已经比Lora模组要低百分之20到30了,而且不用自己去建立基站,除非是特殊项目,大部分需要上公网的传输数据的模组都会选择使用nb方式;
目前rtt中如果使用at组件去控制nb模组,进入psm状态,如果模组接收到信息,这个时候一般是需要通过普通串口来唤醒Mcu的(实现方式大家都清楚,裸机实现也不是太难),而在目前rtt上面是比较难实现的。

复杂类:

复杂一些的场景:有主电和备电,主电插着的时候,需要全速全功率运行和计算等等,到那时一旦主电断开,设备需要根据备电的电量进行自动的降低运行速率,甚至进度休眠状态,隔一段时间唤醒检测备电的情况等等。

个人建议:

Stm32L系列mcu 时钟树非常复杂,外设的时钟源也非常复杂,如果新手直接上手,会非常难弄,这边是否有大神能够优化,提供几种常用的api,满足几种常用的场景;

基本上休眠还是和老白之前提的一样,一般只有stop2和shandy了,stop2模式,老白的版本,对所有的引脚不做任何变化,这边留给用户自己去优化,这个难度其实还是挺高的,这边我觉得可以提供一种极限的方式,根据目前stm32l4xx_hal_conf.h中开启的设备,除了rtc lpuart lptimer; 都进行反初始化;

aozima
aozima 2020-09-07
拒绝白嫖,拒绝键盘侠!

感觉除了低功耗模式或待机模式下,正常运行时的功耗同样考虑。
最基本的就是idle WFI指令,另外就是tickless可以做成标配,或是很方便启用。

aprilhome
aprilhome 2020-09-04

支持支持!
是否可以考虑实际应用,例如潘多拉板,平时是待机状态,接收到串口命令后唤醒,执行完成后再进待机。如何进入低功耗,如何唤醒,进入低功耗好像比较方便,直接一个函数就可以,退出呢,比如想用串口接收到数据唤醒,如何配置,时钟修改,唤醒事件设置这些,应该在哪里实现。
再就是支持文档,看的一知半解,是否可以有移植步骤,在什么地方添加什么功能函数之类,看制作BPS的步骤文档就很清楚。
谢谢!

HappyTime
HappyTime 2020-09-04

希望文档能够丰富一些😂

ching
ching 2020-09-04

任务一空闲就进入休眠,不符合实际场景,实际使用中,某个事件完成了或者到了指定的运行时间才进入休眠状态。

李子成
李子成 2020-09-04

rt_system_power_manager 可以不放在idel里面么。我stm32f1放在idel里面不知道为什么有异常。可能是idel太快的原因吧。

_Dong
_Dong 2020-09-04

新接触的PM组件,谈一下我自己的感受。
我感觉这个组件的文档教程不是很好,目前我看完文档以后添加组件以后,在使用的过程中设备没有反应。不知道是自己哪一方面出错了,也不知道是不是自己没有添加到位。
在FinSH控制台中输入pm_run 设备消耗电流也没有降低

JQRR_7669
JQRR_7669 认证专家 2020-09-04

抛砖引玉,提几点不成熟的建议供讨论:

  1. 建议PM组件通过挂载方式安装运行,具体方案是空闲线程提供一个功耗管理回调接口,PM组件通过挂接回调函数形式实现挂载运行。这样用户可选择性就大了,可以选择使用系统提供的功耗管理组件,也可以挂载其它的功耗管理组件,甚至可以编写自己的功耗管理组件挂载使用。
  2. 功耗管理组件提供的可选运行频率须增加,最好可提供最低、低、中、高、最高共5个档次。每个档次使用的时钟源可选择,例如:最低选用LSE、低选用MSI 2M、中选用MSI 16M、高选用MSI 48M、最高选用PLL 128M。
  3. 功耗管理组件的唤醒源采用组件挂载方式驱动,即功耗管理组件提供唤醒源组件挂载接口,用户可灵活地挂载唤醒源,甚至可以在运行中根据需要变更唤醒源。
张世争
张世争 2020-09-07

PM组件用户反馈,目前总结的反馈如下:

2020-09-07_151111.png

归类为:

  • 文档与例程较少,【不会用】
  • 睡眠理解问题【各个功耗模式不理解】
  • 多线程功耗管理与裸机实现的区别
  • 主流平台适配,用户需要更多平台的适配。
ForestRain
ForestRain 2020-09-23

有一个想法是针对需要低功耗且处理任务较轻的事件触发型场景(可应用在rt-thread nano),提供如下一种模式————os tick来自低功耗定时器(LPTIM),同时内核提供实时的64位低功耗软件定时器扩展,这样的话,可不需要tickless,低功耗设备应用起来也会比较方便

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友