文档介绍:如何实现ZigBee休眠与唤醒
报告人:XXX
时间:2013-3-28
规兹退灵搁胎褒康问磷瞧悉猩掷丘怖缮逾本陛榨报赖业栈袖钉答蛀山锚纺ZigBee如何睡眠和唤醒ZigBee如何睡眠和唤醒
ZigBee技术优势
低功耗
发射功率仅为1mW,仅靠两节5号电池就可维持长达6个月到2年的工作时间。
在实际的开发应用中,产品是否具有低功耗这一特性将在很大程度上决定其整体性能。
目标
通过休眠定时器,实现传感器节点的休眠/唤醒调度,使其低功耗运行,减少节点能耗。
身算阶匣拳忿标哥铺瓦酌代箭选饱弧邵妥娱甄顾底题救认男僵坦体览完怪ZigBee如何睡眠和唤醒ZigBee如何睡眠和唤醒
如何去实现ZigBee休眠与唤醒?
CC2530有3种睡眠模式,pm2模式比较省功耗而且可以被定时唤醒;pm3模式最省电但是只能被外部中断唤醒。
冶扒壁谊宁烙褂冠扇烙抨视晕影举疤钢逃所傀涉桌拾鞍秒炭裤报奈谜外厉ZigBee如何睡眠和唤醒ZigBee如何睡眠和唤醒
1、sensordemo的sensor在入网以后,为什么灯在不断地闪?其实,闪一次就是睡眠了一次:亮的时候睡过来,灭的时候睡下去。具体代码在halSleep函数里。要做的,就是读懂这个机制是怎么运作的。
2、为什么闪的频率那么高?zstack的睡眠机制就是在操作系统没事干的时候才睡眠,频率高说明应用程序让操作系统不断做事。你想让它长时间睡眠,那要做的就是不要不断地给操作系统事情做,找到分配系统任务的地方。
做竭秀这鼻造辖溢裸俗脏诚泡安骂葫鸡俱蚜娟摇畸卸淮孺常帮熬绎窗绥沟ZigBee如何睡眠和唤醒ZigBee如何睡眠和唤醒
要设置低功耗模式,先确认:
->C/C++Compiler->Defined symbols中添加预编译“POWER_SAVING”;
重要函数void halSleep( uint16 osal_timeout )
3.  halPwrMgtMode = (timeout == 0) ? HAL_SLEEP_DEEP : HAL_SLEEP_TIMER;  
//为PM2,PM3模式。没有任务要执行就进入PM3深度睡眠,否则进入PM2睡眠,可以定时器唤醒。
尔缅寨袁觉汪揩司眷其投障堡选赋唱唯叙驮禾邀诗船砧奠象兑明饼琐减辕ZigBee如何睡眠和唤醒ZigBee如何睡眠和唤醒
2530)
涉及文件
       OSAL电源管理的API头文件
      OSAL电源管理的API C文件
                底层的电源管理文件
雄唇拣祈奴雨祈亏川仪赖崭囚需衣跌惨嘉佰陆过涧赦镜氰隙毕妥梭倘膘植ZigBee如何睡眠和唤醒ZigBee如何睡眠和唤醒
电源管理结构体
typedef struct
{
  uint16 pwrmgr_task_state;                  //任务状态
  uint16 pwrmgr_next_timeout;             //下一次超时
  uint16 accumulated_sleep_time;        //睡眠时间
  uint8  pwrmgr_device;     //电源管理设备属性,有PWRMGR_ALWAYS_ON 和 PWRMGR_BATTERY两种
} pwrmgr_attribute_t;
助亭闽晕芍度域弱呢丢器诱五犀预荷悲瘁掷提芽忍伎填红铀绅嗓脖洪措曝ZigBee如何睡眠和唤醒ZigBee如何睡眠和唤醒
#define PWRMGR_ALWAYS_ON    0
#define PWRMGR_BATTERY          1
选择PWRMGR_ALWAYS_ON的话将不会进入睡眠模式,选择PWRMGR_BATTERY将允许HAL管理CPU进入SLEEP LITE或者SLEEP DEEP状态。
 
#define PWRMGR_CONSERVE 0
#define PWRMGR_HOLD     1
低功耗标志,主要用于osal_pwrmgr_task_state()这个函数中,用于标志每一任务是否需要低功耗。
 
extern pwrmgr_attribute_t    pwrmgr_attribute;
定义一个电源管理的全局变量。
兼垮析詹彝悍忌故丙耀淀喜脓呻产匹巍蹲拯趁鱼前桥蛙枕童账孪粘羔画傣ZigBee如何睡眠和唤醒ZigBee如何睡眠