AliOS Things 电源管理框架使用说明

一、电源管理框架简介

电源管理框架的目的在于节约CPU的功耗。传统上,当操作系统处于空闲状态时,比如所有用户任务和系统任务处于阻塞状态,将执行idle task。idle task的通常做法是一个while(1)空循环,从汇编视角看是不断执行跳转指令,也就是说当操作系统空闲时,CPU将处于空转状态。使能电源管理框架后,当系统进入idle task后,将设置CPU进入低功耗状态,从而节省CPU的功耗。

 

AliOS Things电源管理框架具有如下特点:

(1)应用配置电源管理框架并添加初始化代码后,整个框架的运行对应用透明,用户无需为了支持电源管理框架而修改应用代码;

(2)支持多级低功耗状态;

在某些MCU上,根据不同的节电程度和唤醒时间分为多级睡眠,电源管理框架提供了对该特性的支持,在进入低功耗状态时将根据睡眠时间和节电程度选择最佳睡眠等级。

(3)支持tickless机制

当MCU决定进入低功耗状态时,将关闭系统tick中断,并在醒来的时候恢复系统tick中断并补偿睡眠过程中丢失的tick数。这种策略通过减少系统时钟中断来最大程度降低系统空闲时的功耗。

(4)支持精简的低功耗模式

当MCU进入低功耗后,不关闭系统tick中断,系统tick也能唤醒系统。它的优点是实现简单,但当系统长时间空闲时,由于系统时钟频繁唤醒系统,不利于节能。

在某基于nrf52832 MCU的开发板上测试电源管理框架的运行效果如下:

在普通运行模式下nrf52832 MCU的平均运行电流在4mA左右,在添加电源管理模块后MCU的电流测试如下表所示:

测试项

平均电流

说明

低功耗状态

2.06uA

 

BLE广播态功耗(开启低功耗模块,广播intervel 100ms)

120uA

电压3v,发送负载21字节,TX功率0dBm。

BLE广播态功耗(开启低功耗模块,广播intervel 1000ms)

14.7uA

电压3v,发送负载21字节,TX功率0dBm。

BLE广播态功耗(开启低功耗模块,广播intervel 2000ms)

8.1uA

电压3v,发送负载21字节,TX功率0dBm。

从测试结果可以看出,在对功耗敏感的系统上,比如依靠电池供电的系统,非常有必要使用电源管理框架,它可显著降低系统功耗,增加系统待机时间。

 

二、应用配置(为应用添加低功耗支持)

应用若要使用电源管理框架,需进行如下配置:

(1)应用目录的.mk文件中添加对电源管理模块的依赖,示例:

     GLOBAL_DEFINES += RHINO_CONFIG_CPU_PWR_MGMT=1

$(NAME)_COMPONENTS := rhino/pwrmgmt

(2)在应用初始化函数中(比如application_start(int argc, char *argv[]))调用电源管理模块初始化函数。

    cpu_pwrmgmt_init();

 

三、示例应用(app/example/pwr_test)

目前AliOS Things 2.0版本在developerkit和PCA10040平台上对电源管理框架进行了适配,可用如下命令编译示例应用并下载到develoerkit上运行:

aos make pwr_test@developerkit

aos upload pwr_test@developerkit

示例应用创建了2个任务demo1和demo2。demo1的主要逻辑是一个while循环:count1增1,同时打印count1和g_idle_count[0]的值,然后睡眠1秒。demo2的主要逻辑也是一个while循环:count2增1,同时打印count2的值,然后睡眠2秒。

其中g_idle_count[0]是一个全局变量,idle任务在执行时会累加该值。

若没有开启低功耗模块,那么当demo1和demo2处于睡眠状态时,idle任务持续执行,g_idle_count[0]不断增加。输出示例如下:

count1 = 0, idle = 0

count2 = 0

count1 = 1, idle = 2347298

count1 = 2, idle = 4693421

count2 = 1

count1 = 3, idle = 7036926

count1 = 4, idle = 9383049

count2 = 2

count1 = 5, idle = 11726554

count1 = 6, idle = 14072465

 

开启低功耗时,当demo1和demo2处于睡眠状态时,idle任务执行g_idle_count[0]增1后,调用cpu_pwr_down()进入低功耗状态。因此系统每次进入空闲状态,g_idle_count[0]只增加1。输出示例如下:

count1 = 0, idle = 0

count2 = 0

count1 = 1, idle = 1

count2 = 1

count1 = 2, idle = 3

count1 = 3, idle = 4

count2 = 2

count1 = 4, idle = 6

count1 = 5, idle = 7

 

说明:如果条件允许,直接测试功耗,比如测试MCU的电流,效果更直观。 

 

四、电源管理框架的适配

由于电源管理框架的运行依赖于硬件能力,因此在适配时首先要分析目标硬件是否有能力支持,然后要基于硬件能力为电源管理框架提供相关驱动。

4.1 硬件要求

要想支持电源管理框架,目标MCU需要支持如下特性:

(1)至少支持一种低功耗模式。在该低功耗模式下,RAM和寄存器的值能够被维持。

(2)在低功耗模式下,存在可用的定时器,且该定时器能唤醒系统。在tickless机制下,该定时器用于计算低功耗时间,以补偿系统时钟。

4.2 适配接口

为了支持电源管理模块需完成如下接口适配: 

适配接口

功能说明

board_cpu_pwr_init

初始化CPU的电源管理能力,比如注册CPU电源状态设置函数,注册CPU电源管理能力,注册唤醒延迟时间,注册唤醒/计时定时器。

cpu_cstate_set_t

设置CPU的低功耗状态

systick_suspend

挂起系统时钟,系统时钟在低功耗状态下停止运行

systick_resume

恢复系统时钟

one_shot_timer_t

低功耗下运行的唤醒/计时定时器。在低功耗下的计时,用于退出低功耗状态时补偿系统时钟。

 注:可参考developerkit和PCA10040平台上的适配示例(pwrmgmt_hal目录)。

在适配过程中用户可以调用如下接口:

可用接口

功能概述

cpu_pwr_node_init_static

初始化CPU节点

cpu_pwr_node_record

注册CPU节点

cpu_pwr_c_state_capability_set

设置CPU支持的低功耗模式

cpu_pwr_c_state_latency_save

设置某个指定低功耗状态的唤醒延迟时间

tickless_one_shot_timer_save

注册支持tickless机制的定时器

cpu_pwr_c_method_set

注册CPU状态设置函数

        
原文链接
本文为云栖社区原创内容,未经允许不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/520764.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

i 智慧 | 深度广度并举,AWS容器服务再推利器!

戳蓝字“CSDN云计算”关注我们哦!作者 | 晶少责编 | 阿秃出品 | CSDN云计算(ID:CSDNcloud)据晶少了解,国庆假期后的首个工作日,AWS就在中国区域放出了一款“重量级”容器服务,名为 AWS Fargate…

阿里巴巴研究员刘国华:阿里巴巴智能运维体系建设

导语:在2018年开放数据中心峰会(Open Data Center Summit 2018)开幕式上阿里巴巴研究员刘国华发表了《阿里巴巴智能运维体系建设》的主题演讲。演讲中,刘国华介绍了智能化给阿里巴巴未来基础设施带来的三大价值:数据驱…

Jmeter5 语言中文

文章目录1. 临时调整2. 永久中文1. 临时调整 2. 永久中文 默认启动中文 进入安装目录:apache-jmeter-5.1.1\bin\ 找到 jmeter.properties,打开 搜索“ languageen ”,前面带有“#”号 去除“#”号,并修改为:language…

13岁小孩都跟我抢Python了,完了!

以下来自一位程序员母亲和工作人员的对话。程序员妈妈:您好,可以帮我推荐一本适合我家小孩看的编程书籍吗?兔子:可以的呀,《Scratch从入门到精通》,这本书适合小孩学习,您可以先看一下哦~程序员…

Nacos服务发现控制台预览

Nacos是阿里巴巴中间件部门最近开源的一款用于服务发现和配置管理的产品。在既0.1版本发布基本功能和0.2版本发布与Spring生态结合的功能后,0.3版本将释放全新的控制台界面。配置管理功能相关的控制台,将会由阿里云商业产品ACM控制台改造而来&#xff0c…

阿里巴巴高级技术专家至简:聊工程师思维

为什么想到写这篇文章?作者是想通过对工程师思维的分析和解读,让工程师能正确对待那些在现实工作中看上去与本职岗位无关,却对团队效能影响极大的一些点和一些事。 至简:阿里巴巴高级技术专家,是集团Service Mesh方向的…

SoapUI 5.4.0 中文乱码

测试案例&#xff1a; <soapenv:Envelope xmlns:soapenv"http://schemas.xmlsoap.org/soap/envelope/" xmlns:cus"CustomNamespaces"><soapenv:Header/><soapenv:Body><cus:getUser><cus:in0><![CDATA[测试中文乱222码]…

IDEA的基本使用:让你的IDEA有飞一般的感觉 | CSDN 博文精选

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者 | 琦彦责编 | 阿秃转自 &#xff5c; CSDN 博客1.设置maven在File->settings->搜索maven Mavan home directory--设置maven安装包的bin文件夹所在的位置 User settings file--设置setting文件所在的位置 Local repo…

Apache JMeter 测试webservice接口

文章目录Apache JMeter 测试webservice接口流程一、设置基础组件1. 添加一个线程组2. HTTP信息头管理器3. HTTP请求4. 添加一个察看结果树5. 添加一个聚合报告二、配置基础组件2.1. 找到SoapUI 请求头信息2.2. 设置http头管理器2.3. 接口信息同步三、发送测试3.1. 发送请求3.2.…

函数计算搭建 Serverless Web 应用(三)- 三分钟搭建 Web 应用

简介 阿里云 函数计算(Function Compute) 是事件驱动的全托管计算服务&#xff0c;是阿里云的 Serverless 计算平台。基于函数计算构建应用&#xff0c;您无需管理服务器等基础设施&#xff0c;而是专注于应用逻辑的开发&#xff0c;大幅提高开发效率。 函数计算搭建 Serverl…

备战双 11!蚂蚁金服万级规模 K8s 集群管理系统如何设计?

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者 | 沧漠责编 | 阿秃导读&#xff1a;Kubernetes 的出现使得广大开发同学也能运维复杂的分布式系统&#xff0c;它大幅降低了容器化应用部署的门槛&#xff0c;但运维和管理一个生产级的高可用 Kubernetes 集群仍十分困难。本文…

移动互联网+智能运营体系搭建=你家有金矿啊!

每个企业都有许多的数据&#xff0c;但能否将数据转化成商业价值&#xff0c;是企业非常关心的问题。阿里巴巴曾自嘲是一家坐在数据的金矿上啃着馒头的企业&#xff0c;前几年集团积累了很多的数据&#xff0c;但这些数据并没有真正应用起来&#xff0c;受限于几个原因&#xf…

Apache JMeter 测试webservice接口 中文乱码

文章目录1. http请求编码设置utf-82. jmeter.properties修改默认编码1. http请求编码设置utf-8 2. jmeter.properties修改默认编码 找到apache-jmeter-5.2.1\bin\jmeter.properties文件 在jmeter.properties文件中找到 #sampleresult.default.encodingISO-8859-1 替换为 samp…

【实操手册】如何把一场直播录制下来?

许多用户使用直播服务时&#xff0c;需要把正在直播的视频录制下来进行存储或方便后续的回看。为了满足用户需求&#xff0c;阿里云视频直播服务提供了直播录制功能&#xff0c;本文将对这两种形式的录制方法进行简单介绍。 一、按场景录制 针对不同的场景进行录制配置 • 按…

搞不清边缘计算几款产品差异?动动小手点这里!

最近阿里云新上了一款产品&#xff0c;边缘节点服务&#xff08;简称ENS&#xff09;&#xff0c;随着产品运营推广不断深入&#xff0c;偶尔会遇到用户关于ENS产品与其他几款产品的疑惑&#xff0c;典型问题比如&#xff1a; ENS是部署在CDN位置&#xff0c;用户是不是可以直…

Apache JMeter 压测webservice接口

文章目录一、压测设置和参数说明二、服务台控制监控三、查看结果树四、查看聚合报告一、压测设置和参数说明 压测设置说明线程数并发数量&#xff0c;能跑多少量。具体说是一次存在多少用户同时访问。Rame-Up Period(in seconds)表示JMeter每隔多少秒发动并发。理解成准备时长…

阿里云自研新一代企业云数据库POLARDB背后的技术

从2008年到2018年&#xff0c;阿里巴巴的数据库技术已经发展了10年的时间&#xff0c;10年的时间从AliSQL到RDS&#xff0c;再到自研POLARDB&#xff0c;阿里巴巴数据库技术得到了极大的提升。那么在阿里云自研新一代企业云数据库POLARDB背后有哪些技术呢&#xff1f;本文中&am…

python wxpython radiobutton 能不能默认不选择_Python啥都行_Robot自动化测试

文章目录Robot介绍与环境搭建Robot特性初探Robot 技术架构WxPython GUI工具箱Robot FrameworkRIDE安装第一个案例启动RIDE自定义一个函数新建项目及测试用例导入自定义库函数使用自定义函数运行测试用例及查看其报告Robot介绍与环境搭建Robot特性初探Robot Framework是一个基于…

为什么嫁人就选程序员!

本文的重点是&#xff1a;“为什么年轻漂亮的小姑娘都瞄准了程序员小哥哥”“理发38&#xff1f;太奢侈了&#xff01;淘宝20买套剪刀自己可以用好几年。”“衣服太贵了&#xff0c;我觉得优衣库的那件打折就已经很好了”“上个月的一千块钱的零花钱没花完&#xff0c;这个月先…