如何实现ZigBee休眠与唤醒ppt课件_第1页
如何实现ZigBee休眠与唤醒ppt课件_第2页
如何实现ZigBee休眠与唤醒ppt课件_第3页
如何实现ZigBee休眠与唤醒ppt课件_第4页
如何实现ZigBee休眠与唤醒ppt课件_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、如何实现ZigBee休眠与唤醒报报告人:告人:XXXXXX时时 间间:2021-3-282021-3-28 发射功率仅为发射功率仅为1mW,仅靠两节,仅靠两节5号电池就可维持长达号电池就可维持长达6个月到个月到2年的任务时间。年的任务时间。 在实践的开发运用中,产品能否具有低功耗这一特性将在很大程度上决议其整体性能。目的经过休眠定时器,实现传感器节点的休眠/唤醒调度,使其低功耗运转,减少节点能耗。 如何去实现ZigBee休眠与唤醒? CC2530有3种睡眠方式,pm2方式比较省功耗而且可以被定时唤醒;pm3方式最省电但是只能被外部中断唤醒 。1、sensordemo的sensor在入网以后,为

2、什么灯在不断地闪?其实,闪一次就是睡眠了一次:亮的时候睡过来,灭的时候睡下去。详细代码在halSleep函数里。要做的,就是读懂这个机制是怎样运作的。2、为什么闪的频率那么高?zstack的睡眠机制就是在操作系统没事干的时候才睡眠,频率高阐明运用程序让操作系统不断做事。他想让它长时间睡眠,那要做的就是不要不断地给操作系统事情做,找到分配系统义务的地方。要设置低功耗方式,先确认:要设置低功耗方式,先确认:1.f8wConfig.cfg1.f8wConfig.cfg文件中文件中DRFD_RCVC_ALWAYS_ONDRFD_RCVC_ALWAYS_ON定义为定义为FALSEFALSE2.Optio

3、ns-C/C+Compiler-Defined symbols2.Options-C/C+Compiler-Defined symbols中添加预编译中添加预编译“POWEPOWER_SAVINGR_SAVING;重要函数重要函数void halSleep( uint16 osal_timeout )void halSleep( uint16 osal_timeout )1.1.首先将首先将osal_timeoutosal_timeout转成以转成以320US320US为单位为单位2.2.获取下一次获取下一次MACMAC定时器到期时间定时器到期时间3. halPwrMgtMode = (tim

4、eout = 0) ? HAL_SLEEP_DEEP : HAL_SL3. halPwrMgtMode = (timeout = 0) ? HAL_SLEEP_DEEP : HAL_SLEEP_TIMER; EEP_TIMER; /为为PM2PM2,PM3PM3方式。方式。 没有义务要执行就进入没有义务要执行就进入PM3PM3深度睡眠,否那么进深度睡眠,否那么进入入PM2PM2睡眠,可以定时器唤醒。睡眠,可以定时器唤醒。4.4.唤醒唤醒OSALOSAL机制的机制的ZigBeeZigBee低功耗管理低功耗管理(CC2530) (CC2530) 涉及文件OSAL_PwrMgr.h OSAL电源管理

5、的API头文件OSAL_PwrMgr.C OSAL电源管理的API C文件hal_sleep.c 底层的电源管理文件电源管理构造体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;#define PWRMGR_ALWAYS_ON 0#defin

6、e 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;定义一个电源管理的全局变量。/* brief 初始化电源管理函数,这个函数在OSAL.C里面的osal_i

7、nit_system( )调用,也就是在OSAL系统初始化的时候将电源管理方式调成了不会进入睡眠方式的形状。*/void osal_pwrmgr_init( void ) pwrmgr_attribute.pwrmgr_device = PWRMGR_ALWAYS_ON; /默许没有睡眠方式 pwrmgr_attribute.pwrmgr_task_state = 0; /清零/* fn osal_pwrmgr_device* brief 设置电源管理设备属性。* param pwrmgr_device -选择PWRMGR_ALWAYS_ON的话将不会进入睡眠方式,选择 PWRMGR_BATT

8、ERY将允许HAL管理CPU进入SLEEP LITE或者SLEEP DEEP形状。*/void osal_pwrmgr_device( uint8 pwrmgr_device ) pwrmgr_attribute.pwrmgr_device = pwrmgr_device;/* 这个函数可以被每一个义务调用,用于设置这个义务能否支持低功耗运转,假设每一个义务不支持低功耗将无法进入低功耗方式运转。*/uint8 osal_pwrmgr_task_state( uint8 task_id, uint8 state ) if ( task_id = tasksCnt ) return ( INVAL

9、ID_TASK ); if ( state = PWRMGR_CONSERVE ) pwrmgr_attribute.pwrmgr_task_state &= (1 task_id ); / 清零 else pwrmgr_attribute.pwrmgr_task_state |= (1 task_id); /置位 return ( SUCCESS );#if defined( POWER_SAVING )#if defined( POWER_SAVING )/ /* * osal_pwrmgr_powerconserve osal_pwrmgr_powerconserve 这个函数在

10、这个函数在OSALOSAL循环中假设没有任何事件需求执行的话将被循环中假设没有任何事件需求执行的话将被调用,将设备进入调用,将设备进入 睡眠方式,不可以在其他地方调用该函数。需求翻开睡眠方式,不可以在其他地方调用该函数。需求翻开POWER_SAVINGPOWER_SAVING的宏定的宏定义。义。* */ /void osal_pwrmgr_powerconserve( void )void osal_pwrmgr_powerconserve( void ) uint16 next; uint16 next; halIntState_t intState halIntState_t intSta

11、te if ( pwrmgr_attribute.pwrmgr_device != PWRMGR_ALWAYS_ON ) / if ( pwrmgr_attribute.pwrmgr_device != PWRMGR_ALWAYS_ON ) / 首先检查能否支持低首先检查能否支持低功功 if ( pwrmgr_attribute.pwrmgr_task_state = 0 ) /if ( pwrmgr_attribute.pwrmgr_task_state = 0 ) /能否一切义务支持低功耗能否一切义务支持低功耗 HAL_ENTER_CRITICAL_SECTION( intState );

12、 / HAL_ENTER_CRITICAL_SECTION( intState ); /关中断关中断 next = osal_next_timeout(); / next = osal_next_timeout(); /查询软件定时器链表得到最近一次溢出时间查询软件定时器链表得到最近一次溢出时间 HAL_EXIT_CRITICAL_SECTION( intState ); / HAL_EXIT_CRITICAL_SECTION( intState ); /开中断开中断 OSAL_SET_CPU_INTO_SLEEP( next ); / OSAL_SET_CPU_INTO_SLEEP( nex

13、t ); /将系统进入睡眠方式将系统进入睡眠方式 #endif /#endif /* * POWER_SAVING POWER_SAVING * */ /加红部分是一个宏定义,在加红部分是一个宏定义,在OnBoard.hOnBoard.h里面定义的。里面定义的。#define OSAL_SET_CPU_INTO_SLEEP(timeout) halSl#define OSAL_SET_CPU_INTO_SLEEP(timeout) halSleep(timeout); eep(timeout); halSleep(timeout)halSleep(timeout)是在是在hal_sleep.c

14、hal_sleep.c中定义的。中定义的。这里面涉及的就是关于这里面涉及的就是关于CC2530CC2530的电源管理存放器的一些操的电源管理存放器的一些操作。详细可以看代码。作。详细可以看代码。/ /* * HAL HAL电源管理方式是设置电源管理形状的,默许形状是电源管理方式是设置电源管理形状的,默许形状是HAL_SLEEP_OFFHAL_SLEEP_OFF。其。其他设置均会关他设置均会关* *闭系统时钟停顿闭系统时钟停顿CPUCPU。 * * HAL_SLEEP_TIMER HAL_SLEEP_TIMER方式可以被睡眠定时器中断和方式可以被睡眠定时器中断和IOIO中断以及复位唤起。中断以及

15、复位唤起。 * * HAL_SLEEP_DEEP HAL_SLEEP_DEEP方式可以被方式可以被IOIO中断以及复位唤起。中断以及复位唤起。 * */ /#define HAL_SLEEP_OFF CC2530_PM0#define HAL_SLEEP_OFF CC2530_PM0#define HAL_SLEEP_TIMER CC2530_PM2#define HAL_SLEEP_TIMER CC2530_PM2#define HAL_SLEEP_DEEP CC2530_PM3#define HAL_SLEEP_DEEP CC2530_PM3 #define CC2530_PM0 0 #d

16、efine CC2530_PM0 0 #define CC2530_PM1 1 #define CC2530_PM1 1 #define CC2530_PM2 2 #define CC2530_PM2 2 #define CC2530_PM3 3 #define CC2530_PM3 3 #define MAX_SLEEP_TIME 510000 #define MAX_SLEEP_TIME 510000 最大睡眠时间是最大睡眠时间是510000ms510000ms。总结总结可以看到在可以看到在OSALOSAL中是运用睡眠定时器来控制睡眠时间的,在中是运用睡眠定时器来控制睡眠时间的,在系统初始

17、化的时候是将电源控制构造体中的系统初始化的时候是将电源控制构造体中的pwrmgr_devicepwrmgr_device设备属性设置为设备属性设置为PWRMGR_ALWAYS_ONPWRMGR_ALWAYS_ON,这样默许就不进,这样默许就不进入休眠形状。必需在运用层里面调用入休眠形状。必需在运用层里面调用void osal_pwrmgr_devivoid osal_pwrmgr_device( uint8 pwrmgr_device )ce( uint8 pwrmgr_device )这个这个OSALOSAL的的APIAPI来设置使得来设置使得OSAOSAL L可以进入休眠形状。可以进入休眠

18、形状。在用户义务中需求用的这样一个在用户义务中需求用的这样一个APIuint8 osal_pwrmgr_APIuint8 osal_pwrmgr_task_state( uint8 task_id, uint8 state )task_state( uint8 task_id, uint8 state )来设置这个义务能否来设置这个义务能否支持休眠,假设有一个义务不支持休眠的话,整个系统就将支持休眠,假设有一个义务不支持休眠的话,整个系统就将不会进入休眠方式。这个在不会进入休眠方式。这个在void osal_pwrmgr_powerconsevoid osal_pwrmgr_powerconserve( void )rve( void )中有相关的查询。中有相关的查询。在在OSALOSAL的主循环中的主循环中void osal_start_system( void )void osal_start_system( void )调用了调用了ososal_pwrmgr_powerconserveal_pwrmgr_powerconserve这个函数。这个函数。void osal_start_system( void )void osal_start_system( void ) #if !defined ( ZBIT ) & !defined ( UBIT )

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论