OSAL 之功耗管理


基于蓝牙4.0,协议栈版本是1.3.2
在OSAL中的OSAL_PwrMgr.c与OSAL_PwrMgr.h两个文件实现对功耗的控制。

首先是功耗管理的结构体定义

pwrmgr_task_statebit0~bit15分别对应着16个任务的功耗状态,如果某一位为0,则它对应的任务进入节电模式。
pwrmgr_next_timeout记录着最短的超时时间,从定时器管理列表获得,在这段时间内,系统处于空闲状态,所以pwrmgr_next_timeout实际上是记录当次系统睡眠的时间。
accumulated_sleep_time则记录这系统累计睡眠时间。
pwrmgr_device则标明系统的供电设备,有两种:一种是正常供电另外一种是电池供电。一般正常供电下不需要也没有必要控制功耗,只有电池供电是,功耗的控制才有意义。
另外定义了一个对应的变量用于存储功耗管理结构体类型变量

一些宏的定义

2、设定任务功耗状态的宏

#define PWRMGR_CONSERVE 0

#define PWRMGR_HOLD 1

其中PWRMGR_CONSERVE表示进入节电模式,而PWRMGR_HOLD则关闭节电模式。
3、设备供电方式的设定宏

#define PWRMGR_ALWAYS_ON 0

#define PWRMGR_BATTERY 1

其中PWRMGR_ALWAYS_ON表示正常供电,PWRMGR_BATTERY表示使用电池供电。

功耗API函数

void osal_pwrmgr_init( void )

函数对芯片的设备供电方式,任务是否能进入节能模式进行设置;默认是正常供电模式,所有的任务都可以进入节能模式。

void osal_pwrmgr_device( uint8 pwrmgr_device )

函数设置功耗管理系统设备的供电方式
参数: pwrmgr_device 可为下面宏的其中一个

#define PWRMGR_ALWAYS_ON 0

#define PWRMGR_BATTERY 1

其中PWRMGR_ALWAYS_ON表示正常供电,PWRMGR_BATTERY表示使用电池供电。

uint8 osal_pwrmgr_task_state( uint8 task_id, uint8 state )

函数被每个任务调用以设定每个任务的功耗模式

void osal_pwrmgr_powerconserve( void )

该函数只能由OSAL主循环调用而不能再其它地方调用,当没有预定的任务执行的时候,执行该函数使系统进入睡眠模式。

来源:JQ_AK47

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2015年4月9日
下一篇 2015年4月9日

相关推荐