文档介绍:CC2530有3种睡眠模式,pm2模式比较省功耗而且可以被定时唤醒;pm3模式最省电但是只能被外部中断唤醒1、sensordemo的sensor在入网以后,为什么灯在不断地闪?其实,闪一次就是睡眠了一次:亮的时候睡过来,灭的时候睡下去。具体代码在halSleep函数里。要做的,就是读懂这个机制是怎么运作的。2、为什么闪的频率那么高?zstack的睡眠机制就是在操作系统没事干的时候才睡眠,频率高说明应用程序让操作系统不断做事。你想让它长时间睡眠,那要做的就是不要不断地给操作系统事情做,找到分配系统任务的地方。要设置低功耗模式,先确认:->C/C++Compiler->Definedsymbols中添加预编译“POWER_SAVING”;重要函数voidhalSleep(uint16osal_timeout)首先将osal_timeout转成以320US为单位获取下一次MAC定时器到期时间halPwrMgtMode=(timeout==0)?HAL_SLEEP_DEEP:HAL_SLEEP_TIMER;//为PM2,PM3模式。没有任务要执行就进入PM3深度睡眠,否则进入PM2睡眠,可以定时器唤醒。)底层的电源管理文件typedefstruct{uint16pwrmgr_task_state;//任务状态uint16pwrmgr_next_timeout;//umulated_sleep_time;//睡眠时间uint8pwrmgr_device;//电源管理设备属性,有PWRMGR_ALWAYS_ON和PWRMGR_BATTERY两种}pwrmgr_attribute_t;#definePWRMGR_ALWAYS_ON0#definePWRMGR_BATTERY1选择PWRMGR_ALWAYS_ON的话将不会进入睡眠模式,选择PWRMGR_BATTERY将允许HAL管理CPU进入SLEEPLITE或者SLEEPDEEP状态。#definePWRMGR_CONSERVE0#definePWRMGR_HOLD1低功耗标志,主要用于osal_pwrmgr_task_state()这个函数中,用于标志每一任务是否需要低功耗。externpwrmgr_attribute_tpwrmgr_attribute定义一个电源管理的全局变量。/*************************************************************************@brief初始化电源管理函数,()调用,也就是在OSAL系统初始化的时候将电源管理模式调成了不会进入睡眠模式的状态。*/voidosal_pwrmgr_init(void){=PWRMGR_ALWAYS_ON;//默认没有睡眠模式pwrmgr_attribute