AliOS Things电源管理框架怎么使用

77次阅读
没有评论

共计 2989 个字符,预计需要花费 8 分钟才能阅读完成。

这篇文章主要讲解了“AliOS Things 电源管理框架怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着丸趣 TV 小编的思路慢慢深入,一起来研究和学习“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

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

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

可用接口

功能概述

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 状态设置函数

感谢各位的阅读,以上就是“AliOS Things 电源管理框架怎么使用”的内容了,经过本文的学习后,相信大家对 AliOS Things 电源管理框架怎么使用这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是丸趣 TV,丸趣 TV 小编将为大家推送更多相关知识点的文章,欢迎关注!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-16发表,共计2989字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)