基于蓝牙4.0,协议栈版本是1.3.2
在OSAL中的OSAL_PwrMgr.c与OSAL_PwrMgr.h两个文件实现对功耗的控制。
首先是功耗管理的结构体定义
pwrmgr_task_state的bit0~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主循环调用而不能再其它地方调用,当没有预定的任务执行的时候,执行该函数使系统进入睡眠模式。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!