Zigbee OSAL睡眠管理

本文详细介绍了Zigbee设备如何进入和管理睡眠模式,包括F8wConfig.cfg的配置、IAR工程的预编译设置、进入睡眠模式的条件以及OSAL如何判断和执行睡眠。在满足电源管理设备属性、任务低功耗支持及无事件处理的情况下,通过OSAL函数控制设备进入睡眠,并阐述了定时器和事件在唤醒设备中的作用。
摘要由CSDN通过智能技术生成
Zigbee节点只有终端设备类型可以设置休眠模式,要设置休眠模式,在配置上先要确保:

1.f8wConfig.cfg文件中DRFD_RCVC_ALWAYS_ON定义为FALSE;

/****************************************
 * The following are for End Devices only
 ***************************************/

-DRFD_RCVC_ALWAYS_ON=FALSE

2.在IAR的工程Options->C/C++Compiler->Preprocessor->Defined symbols中预编译POWER_SAVING;


除此之外,设备在运行过程中进入睡眠模式需要满足:

1.电源管理设备属性为PWRMGR_BATTERY;

2.所有任务都支持低功耗;

3.当前无事件需要处理;

满足以上条件后终端设备将进入睡眠状态。第三个条件实际上也暗示了终端设备的唤醒条件,进入睡眠模式需要保证当前无事件处理,假如在睡眠之前存在定时触发事件,那么当这个定时时间到后事件被设置,终端设备就要被唤醒去处理这个事件,这种机制也决定了Zigbee睡眠时间的长短是由事件的调度所决定的。

那Zigbee OSAL到底是怎样管理睡眠的呢?从ZMain.c中的main()函数中进入OSAL的主循环osal_start_system(),程序会在这个函数中一遍又一遍地轮询是否有事件需要处理,每次轮询时,当没有事件需要处理时并且定义了POWER_SAVING时则会调用osal_pwrmgr_powerconserve()考虑是否进入睡眠模式。


进入osal_pwrmgr_powerconserve()


发现这个函数可以调用 OSAL_SET_CPU_INTO_SLEEP( next )使设备进入睡眠模式,但需要满足两个条件:

1.pwrmgr_attribute.pwrmgr_device != PWRMGR_ALWAYS_ON;

2. pwrmgr_attribute.pwrmgr_task_state == 0

两个条件都涉及了一个pwrmgr_attribute_t类型的全局变量pwrmgr_attribute,这个变量是用于电源管理的。

/* This global variable stores the power management attributes.
 */
pwrmgr_attribute_t pwrmgr_attribute;
/* These attributes define sleep beheaver. The attributes can be changed
 * for each sleep cycle or when the device characteristic change.
 */
typedef struct
{
  uint16 pwrmgr_task_state;       //任务状态
  uint16 pwrmgr_next_timeout;     //下一次超时时间
  uint16 accumulated_sleep_time;  //睡眠时间
  uint8  pwrmgr_device;          
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值