ImageVerifierCode 换一换
格式:DOC , 页数:25 ,大小:51.50KB ,
资源ID:2242230      下载积分:10 金币
快捷注册下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/2242230.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请

   平台协调中心        【在线客服】        免费申请共赢上传

权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

注意事项

本文(ZigBee协议栈初始化网络启动流程.doc)为本站上传会员【精****】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

ZigBee协议栈初始化网络启动流程.doc

1、精品文档 ZigBee协议栈初始化网络启动流程 ZigBee的基本流程:由协调器的组网(创建PAN ID),终端设备和路由设备发现网络以及加入网络。 基本流程:main()->osal_init_system()->osalInitTasks()->ZDApp_Init(),进协议栈初始化函数ZDApp_Init()。 1.1 进入程序入口main()。 ZMain.c中 C++ Code int main( void )         {                 // Turn off interrupts                 osal_int_di

2、sable( INTS_ALL );                 // Initialization for board related stuff such as LEDs                 HAL_BOARD_INIT();                 // Make sure supply voltage is high enough to run                 zmain_vdd_check();                 // Initialize board I/O                 InitBoa

3、rd( OB_COLD );                 // Initialze HAL drivers                 HalDriverInit();                 // Initialize NV System                 osal_nv_init( NULL );                 // Initialize the MAC                 ZMacInit();                 // Determine the extended address  

4、               zmain_ext_addr();                 // Initialize basic NV items                 zgInit();                 #ifndef NONWK                 // Since the AF isn't a task, call it's initialization routine                 afInit();                 #endif                 // Initia

5、lize the operating system                 osal_init_system();                 // Allow interrupts                 osal_int_enable( INTS_ALL );                 // Final board initialization                 InitBoard( OB_READY );                 // Display information about this device   

6、              zmain_dev_info();                 /* Display the device info on the LCD */                 #ifdef LCD_SUPPORTED                 zmain_lcd_init();                 #endif                 #ifdef WDT_IN_PM1                 /* If WDT is used, this is a good place to enable it. */

7、                 WatchDogEnable( WDTIMX );                 #endif                 osal_start_system(); // No Return from here                 return 0; // Shouldn't get here.         } // main() 1.2 给任务添加ID sapi.c中 C++ Code void osalInitTasks( void ) //为各自进程添加ID 用于任务的查找         {      

8、           uint8 taskID = 0;                 tasksEvents = (uint16 *)osal_mem_alloc( sizeof( uint16 ) * tasksCnt);                 osal_memset( tasksEvents, 0, (sizeof( uint16 ) * tasksCnt));                 macTaskInit( taskID++ );                 nwk_init( taskID++ );                 Hal_

9、Init( taskID++ );//硬件抽象层初始化                 #if defined( MT_TASK )                 MT_TaskInit( taskID++ );                 #endif                 APS_Init( taskID++ );                 ZDApp_Init( taskID++ );//判断如果协调器节点建立网络、如果终端节点加入网络                 SAPI_Init( taskID );                 } 1.

10、3 初始化ZigBee协议栈网络 ZDApp.c C++ Code void ZDApp_Init( uint8 task_id )         {                 // Save the task ID                 ZDAppTaskID = task_id;                 // Initialize the ZDO global device short address storage                 ZDAppNwkAddr.addrMode = Addr16Bit;             

11、    ZDAppNwkAddr.addr.shortAddr = INVALID_NODE_ADDR;                 (void)NLME_GetExtAddr(); // Load the saveExtAddr pointer.                 // Check for manual "Hold Auto Start"                 //检测到有手工设置HAL_KEY_SW_1则会设置devState = DEV_HOLD,从而避开网络初始化                 ZDAppCheckForHoldKey();

12、                 // Initialize ZDO items and setup the device - type of device to create.                 ZDO_Init(); //通过判断预编译来开启一些函数功能                 // Register the endpoint description with the AF                 // This task doesn't have a Simple description, but we still need          

13、       // to register the endpoint.                 afRegister( (endPointDesc_t *)&ZDApp_epDesc );                 #if defined( ZDO_USERDESC_RESPONSE )                 ZDApp_InitUserDesc();                 #endif // ZDO_USERDESC_RESPONSE                 // Start the device?                

14、 if ( devState != DEV_HOLD )                 {                         ZDOInitDevice( 0 );                 }                 else                 {                         // Blink LED to indicate HOLD_START                         HalLedBlink ( HAL_LED_4, 0, 50, 500 );                 }

15、                ZDApp_RegisterCBs();         } /* ZDApp_Init() */ 如果设置devState为DEV_HOLD,则不会执行ZDOInitDevice;反之,系统会调用此函数是设备组网或者入网。看下这个函数完成的功能是什么样子的。ZDOInitDevice是设备在网络中启动。它会读取NV中的ZCD_NV_STARTUP_OPTION选项决定是否恢复网络状态。如果应用层强制进行新的join操作,它应该在调用这个函数之前设置ZCD_NV_STARTUP_OPTION中的ZCD_STARTOPT_DEFAULT_NETWORK_STA

16、TE位。可以调用zgWrieStartupOptions()函数完成这些设置。 1.4 初始化设备(启动网络和设置网络类型) ZDApp.c C++ Code uint8 ZDOInitDevice( uint16 startDelay )         {                 uint8 networkStateNV = ZDO_INITDEV_NEW_NETWORK_STATE;                 uint16 extendedDelay = 0;                 if ( devState == DEV_HOLD )   

17、              {                         // Initialize the RAM items table, in case an NV item has been updated.                         zgInitItems( FALSE );                 }                 ZDConfig_InitDescriptors();                 //devtag.071807.todo - fix this temporary solution      

18、           _NIB.CapabilityInfo = ZDO_Config_Node_Descriptor.CapabilityFlags;                 devState = DEV_INIT; // Remove the Hold state                 // 函数读取NV项目ZCD_NV_LEAVE_CTRL的值,ZDApp_LeaveCtrl指向这个值                 // Initialize leave control logic                 ZDApp_LeaveCtrlInit

19、);                 // Check leave control reset settings//设备的断开会造成DEV_HOLD状态                 ZDApp_LeaveCtrlStartup( &devState, &startDelay );                 // Leave may make the hold state come back                 if ( devState == DEV_HOLD )                 {                         /

20、/设置启动选项                         // Set the NV startup option to force a "new" join.                         zgWriteStartupOptions( ZG_STARTUP_SET, ZCD_STARTOPT_DEFAULT_NETWORK_STATE );                         //通知应用层触发事件                         // Notify the applications                      

21、   osal_set_event( ZDAppTaskID, ZDO_STATE_CHANGE_EVT );                         return ( ZDO_INITDEV_LEAVE_NOT_STARTED ); // Don't join - (one time).                 }                 #if defined ( NV_RESTORE )                 // Get Keypad directly to see if a reset nv is needed.          

22、       // Hold down the SW_BYPASS_NV key (defined in OnBoard.h)                 // while booting to skip past NV Restore.                 if ( HalKeyRead() == SW_BYPASS_NV )                 networkStateNV = ZDO_INITDEV_NEW_NETWORK_STATE;                 else                 {                  

23、       // 通过读取ZCD_NV_STARTUP_OPTION选项决定是否进行网络恢复                         // Determine if NV should be restored                         networkStateNV = ZDApp_ReadNetworkRestoreState();                 }                 if ( networkStateNV == ZDO_INITDEV_RESTORED_NETWORK_STATE )                

24、 {                         networkStateNV = ZDApp_RestoreNetworkState();                 }                 else                 {                         // Wipe out the network state in NV                         NLME_InitNV();                         NLME_SetDefaultNV();                 }

25、                 #endif                 if ( networkStateNV == ZDO_INITDEV_NEW_NETWORK_STATE )//如果是要启动新的网络                 {                         ZDAppDetermineDeviceType();//根据选项设置设备的网络类型,默认路由类型                         // Only delay if joining network - not restoring network state      

26、                   extendedDelay = (uint16)((NWK_START_DELAY + startDelay)                         + (osal_rand() & EXTENDED_JOINING_RANDOM_MASK));                 }                 // Initialize the security for type of device                 ZDApp_SecInit( networkStateNV );                 

27、// 触发启动网络                 // Trigger the network start                 ZDApp_NetworkInit( extendedDelay );                 // set broadcast address mask to support broadcast filtering 用于处理合法的广播地址                 NLME_SetBroadcastFilter( ZDO_Config_Node_Descriptor.CapabilityFlags );         

28、        return ( networkStateNV );         } 这个函数注意功能:初始化设备配置,ZDAppDetermineDeviceType()设置网络类型(协调、路由、终端),ZDApp_NetworkInit( extendedDelay )初始化网络并开启或加入网络。 1.5 定时开启网络 ZDApp.c 进入ZDApp_NetworkInit()函数,等待一段时间在执行ZDO_NETWORK_INIT,跳入事件处理ZDApp层ZDAPP_EVENT_LOOP()函数开启网络。 C++ Code void ZDApp_NetworkInit(

29、 uint16 delay )         {                 if ( delay )                 {                         // Wait awhile before starting the device                         osal_start_timerEx( ZDAppTaskID, ZDO_NETWORK_INIT, delay );                          //发送ZDO_NETWORK_INIT(网络初始化)消息到 ZDApp层,转到ZDApp层

30、ZDApp_event_loop()函数。                 }                 else                 {                         osal_set_event( ZDAppTaskID, ZDO_NETWORK_INIT );                 }         } 1.6 启动设备 ZDApp.c ZDApp_event_loop()函数是回调函数,循环处理主事件。设备逻辑类型,启动模式,信标时间,超帧长度 C++ Code UINT16 ZDApp_event_loop( u

31、int8 task_id, UINT16 events )         {                 uint8 *msg_ptr;                 if ( events & SYS_EVENT_MSG )                 {                         while ( (msg_ptr = osal_msg_receive( ZDAppTaskID )) )                         {                                 ZDApp_ProcessOSALMs

32、g( (osal_event_hdr_t *)msg_ptr );                                 // Release the memory                                 osal_msg_deallocate( msg_ptr );                         }                         // Return unprocessed events                         return (events ^ SYS_EVENT_MSG);   

33、              }                 if ( events & ZDO_NETWORK_INIT )                 {                         // Initialize apps and start the network                         devState = DEV_INIT;                         //设备逻辑类型,启动模式,信标时间,超帧长度,接着转到去启动设备,转到ZDO_StartDevice()                    

34、     ZDO_StartDevice( (uint8)ZDO_Config_Node_Descriptor.LogicalType, devStartMode,                         DEFAULT_BEACON_ORDER, DEFAULT_SUPERFRAME_ORDER );                         // Return unprocessed events                         return (events ^ ZDO_NETWORK_INIT);                 }    

35、             if ( ZSTACK_ROUTER_BUILD )                 {                         if ( events & ZDO_NETWORK_START )                         {                                 ZDApp_NetworkStartEvt();                                 // Return unprocessed events                                 

36、return (events ^ ZDO_NETWORK_START);                         }                         if ( events & ZDO_ROUTER_START )                         {                                 if ( nwkStatus == ZSuccess )                                 {                                         if ( devSta

37、te == DEV_END_DEVICE )                                         devState = DEV_ROUTER;                                         osal_pwrmgr_device( PWRMGR_ALWAYS_ON );                                 }                                 else                                 {                      

38、                   // remain as end device!!                                 }                                 osal_set_event( ZDAppTaskID, ZDO_STATE_CHANGE_EVT );                                 // Return unprocessed events                                 return (events ^ ZDO_ROUTER_START);

39、                        }                 }                 if ( events & ZDO_STATE_CHANGE_EVT )                 {                         ZDO_UpdateNwkStatus( devState );                         // At start up, do one MTO route discovery if the device is a concentrator                    

40、     if ( zgConcentratorEnable == TRUE )                         {                                 // Start next event                                 osal_start_timerEx( NWK_TaskID, NWK_MTO_RTG_REQ_EVT, 100 );                         }                         // Return unprocessed events   

41、                      return (events ^ ZDO_STATE_CHANGE_EVT);                 }                 if ( events & ZDO_COMMAND_CNF )                 {                         // User defined logic                         // Return unprocessed events                         return (events ^ ZDO_

42、COMMAND_CNF);                 }                 if ( events & ZDO_NWK_UPDATE_NV )                 {                         ZDApp_SaveNetworkStateEvt();                         // Return unprocessed events                         return (events ^ ZDO_NWK_UPDATE_NV);                 }  

43、               if ( events & ZDO_DEVICE_RESET )                 {                         // The device has been in the UNAUTH state, so reset                         // Note: there will be no return from this call                         SystemReset();                 }                 if (

44、 ZG_SECURE_ENABLED )                 {                         return ( ZDApp_ProcessSecEvent( task_id, events ) );                 }                 else                 {                         // Discard or make more handlers                         return 0;                 }         }

45、 1.7 开启网络 ZDObject.c C++ Code void ZDO_StartDevice( byte logicalType, devStartModes_t startMode, byte beaconOrder, byte superframeOrder )         {                 ZStatus_t ret;                 #if defined ( ZIGBEE_FREQ_AGILITY )                 static uint8 discRetries = 0;               

46、  #endif                 #if defined ( ZIGBEE_COMMISSIONING )                 static uint8 scanCnt = 0;                 #endif                 ret = ZUnsupportedMode;                 if ( ZG_BUILD_COORDINATOR_TYPE && logicalType == NODETYPE_COORDINATOR ) //当设备作为协调器时,执行这个条件语句。              

47、   {                         if ( startMode == MODE_HARD )                         {                                 devState = DEV_COORD_STARTING;                                 //向网络层发送网络形成请求。当网络层执行 NLME_NetworkFormationRequest()建立网络后,将给予ZDO层反馈信息。                                 // 接着转去执行Z

48、DApp层的 ZDO_NetworkFormationConfirmCB()函数                                 ret = NLME_NetworkFormationRequest( zgConfigPANID, zgApsUseExtendedPANID, zgDefaultChannelList,                                 zgDefaultStartingScanDuration, beaconOrder,                                 superframeOrder, fal

49、se );                         }                         else if ( startMode == MODE_RESUME )                         {                                 // Just start the coordinator                                 devState = DEV_COORD_STARTING;                                 ret = NLME_StartRo

50、uterRequest( beaconOrder, beaconOrder, false );                         }                         else                         {                                 #if defined( LCD_SUPPORTED )                                 HalLcdWriteScreen( "StartDevice ERR", "MODE unknown" );                 

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服