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

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-10106060.html】到电脑端继续下载(重复下载不扣费)。

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

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(ZigBee协议栈初始化网络启动流程.docx)为本站会员(b****8)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

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

1、ZigBee协议栈初始化网络启动流程ZigBee协议栈初始化网络启动流程ZigBcc的基本流程:由协调器的组网(创建PAN ID),终端设笛和路由设备发现网络 以及加入网络。基本流程:main0-osaljnit_sysicm()-osallniiTasksO-Zr)App_lnitO,进协议栈初始化函数 ZDAppJnii-Oo1.1进入程序入口 main。ZMain.c 中C+ Codeint main( void)/ Turn off interruptsosaUnt_disablc( INTSALL);/ Initialization for board related stuff s

2、uch as LEDsHAL.BOARDJNITO;/ Make sure supply voltage is high enough to run zmain_vdd_chcckO;/ Initialize board 1/0IniiBoard(OB_COLD);/ Initialzc HAL driversHalDrivcrlnitO;/ Initialize NV Systemosal_nv_init( NULL);/ Initialize the MACZMacIniiQ;/ Determine the extended addresszmain_cxt_addr0;/ Initial

3、ize basic NV itemszglnitO;#iftidcf NONWK/ Since the AF isnt a task, call its initialization routineaflnitQ;/ Initialize the operating systemosal_ini t_sy s tem 0;/ Allow interruptsosaUnt_cnablc( INTS_ALL);/ Final board initializationInitBoard( OB_READY);/ Display information about this devicezm;iin_

4、dcv_inf()O;/* Display the device info on the LCD */#ifdcf LCO.SUPPORTEDzmain_lcdaii:0;#cndif#ifdcfWT)TJN_PMl/* If VCT)T is used, this is a good place to enable it. */WatchDogEnablc( VCT)TIMX);return 0; / Shouldn i get here. / mainO12给任务添加IDsapi.c 中C+ Codevoid osallniLTasks(void) 为各自进程添加ID用于任务的査找uint

5、8 tasklD = 0;tasks Events = (uintl6 *)osaLmcm_alloc( sizcof( uint l6 ) * tasksCnt);osal_mcmsct( tasksEvents, 0, (sizcof( uint!6) * tasksCnt); macTasklnitf taskID+ );nwk_init( taskir)+);Hal_Inii_N()DE_ADDR;(void)NLME_GctExtAddrQ; / Load the savcExtAddr pointer./ Check for manual nHold Auto Startu/检测到

6、有手工设置HAL_KEY_SW_1则会设置dcvStatc二DEV_H()LD,从而 避开网络初始化ZDAppChcckForHoIdKcyO;/ Initialize ZD( ) items and setup the device type of device to createZDOJnitO; /通过判断预编译来开启一些函数功能/ Register the endpoint description with the AF/ This task docsnrt have a Simple description, but we still need/ to register the en

7、dpoint.afRcgistcr( (cndPointDcsc_t *)&ZDAppepDese );#ifdcfincd( ZD( )_USERPESC_RESPONSE)ZDAppJniiUscrDcscO;#cndif / ZD()_USERPESC_RESPONSE/ Start the device?if (dStatc != DEV_HOLD)ZDOInitDevice( 0); else/ Blink LED to indicate H()LD_STARTHalLcdBliiik (HAL_LED_4,0, 50, 500);ZDApp_RcgistcrCBsO; /* ZDA

8、ppJnitO */如果设 dStatc为DEV_H()LD,则不会执行ZDOlnitPcce;反之,系统会调用此函 数是设备组网或者入网。看下这个函数完成的功能是什么样于的。ZDOlniiDicc是设 备在网络中启动。它会读取NV中的ZCD_NV_STARTLP_OPTION选项决定是否恢复 网络状态。如果应用层强制进行新的Qin操作,它应该在调用这个函数之前设置 ZCD_NV_STARTUP_()PTI()N 中的 ZCr)_STARTOPT_r)EFAULT_NETW()RK_STATE 位。可以调用zgWricSiariup()ptions()函数完成这些设置。1.4初始化设备(启动网

9、络和设:网络类型)ZDApp.cC+ Codeuini8 ZDOInitDevicc( uintl6 startDelay)uint8 networkSuteW = ZD()_INITDEV_NEW_NETW( )RK_STATE;uint!6 cxtcndcdDclay = 0;if (dcvSimc 二二 DEV_H()LD)/ Initialize the RAM items table, in case an NV item has been updated zglnidtcms( FALSE);Zr)Config_Init:r)cscriptorsO;/dcvtag.071807.t

10、odo - fly this temporan solution_NIB.Capabilitlnfo 二 Zr)O_Config_Nodc_rcscripior.CapabiIiu Flags;devStatu = D EV J NIT; / / Remove the Hold stale个值/函数读取NV项目ZCP_NV_LEAVE_CTRL的值,ZDApp_Lc他Ctrl指向这/ Initialize leave control logicZr)App_LcavcCtrllnitO;/ Check leave control reset setrings/设备的断开会造成 DEV.HOLP

11、 状态Zr)App_LcavcCtrlStartup( &devState, &startf)clay);/ Leave may make the hold state come backif (dcvSi毗二二 PEV_H()LP )设賈启动选项/ Set the WApp_Proccss( )SALMsg( (osal_cvcm_hdr_r *)msg_ptr);/ Release the memoryosal_m sg_dcalloca tc (msg_ptr); reixirn (events A SYS.EVENT.MSG);/ Initialize apps and start t

12、he networkdevState = DEVJNIT;设备逻辑类型,启动模式,信标时间,超帧长度,接着转到去启动设备,转到 ZDO.StartDcviccOZr)O_StariDcvicc( (uini8)Zn( )_Config_Nodc_DcscripLor.LogicalTypc,devStartMode,DEFAULT_BEACON_()RDER, DEFAULT.SLPERFRAME.ORDER);/ Return unprocessed eventsreturn (events A ZDO.NETOORKJNIT);if (ZSTACK_R()UTER_BUILD)if ( e

13、vents & ZD( )_NETWORK_START)ZDApp_NcorkStartEvtOi/ Return unprocessed events return (events 八 ZD( )_NETW( )RK_START);if (events & ZDO_ROUTER_START)if ( nwkStatus = ZSucecss)if (devStaw = DEV_END_D EVICE)dStatc = DEV.ROCTER;osal_pwrmgr_dcvicc( PWUMGR.ALWAYS.ON);else/ remain as end device!osaLsct_cvcn

14、t( ZDAppTaskID, ZIX)_STATE_CH ANGE_EVT);return (events 八 ZD( )_R( )UTER_START);Zr)O_UpdatcNvkStaius( devState);/ At start up, do one MTO route discovery if the device is a concentrator if ( zgConccntratorEnablc = TRUE)/ Start next eventosaLstart_timcrEx( NWK.TaskIP, NWK_IT( )_RTG_REQ_EVT, 100);/ Ret

15、urn unprocessed events return (events 八 ZD( )_STATE_CHANGE_EVT);if ( events & ZP( )_C()MMAND_CNF)/ User defined logicif ( events & ZD( )_NWK_UPDATE_NV)Z r)App_SavcN c two rkS tatc EvtQ;/ Return unprocessed eventsreturn (events 八 ZD()_NVCK_UPDATE_NV);if (events & ZDO_DEVICE_RESET)/ The device has bee

16、n in the UNAUTH state, so reset/ Note: there will be no return from this callSystemReSetQ;if (ZG_SECURE_ENABLED )rcitirn ( Zf)App_ProccssSccEvcnt( task_id, events);else/ Discard or make more handlers return 0;1.7开启网络ZDObjcci.cC+ Code void ZD()_StartDcvicc(byte logicalTypc, dcrStartModcs_t startModc,

17、 byte bcacon( )rdcr, byte supcrframcOrdcr )ZStatus_t ret;#if defined (ZIGBEE_FREQ_AGIL1TY)static uint8 diseRctries = 0;#cndif#if defined (ZIGBEE.COMMISSIONING)static uint8 scanCnt = 0;# endifret = ZUnsupportedMode; if ( ZG_B(JILD_CO()RD1NAT()R_TYPE & logicalTypc 二二NODETYPE_CO()RDINAT()R) 当设备作为协调器时,执

18、行这个条件语句。if(startModc = MODE_HARD)dcvStaic = DEV_COORD_STARTING;向网络层发送网络形成请求。当网络层执行NLME-NciworkFormationRcqucst ()逹立网络后,将给予ZDO层反馈信息。/ 接着转去执行 ZDApp 层的 ZD()_NctworkFormationConfirmCB () 函数ret = N LM E_N c twork Forma tionRcq ucs t( zgConfigPANin,zgApsUscExtcndcdPANID, zgDcfaultChanndList,zgOcfauItStart

19、ingScaiiDuration, bcacon( )rdcr,supcrframcOrdcr, false );else if ( startModc = MODE.RESUME)/Just start the coordinator devSute 二 PEV_C()ORP_START! NG; ret 二 NLNf E_StartR()utcrRequcsr( bcaconOrdcr, bcacon( )rdcr, false );else#ifdcfincd( LCD.SUPPORTEP)HalLcdVCVitcScrccn( StariPcvncc ERR, MOPE unknown

20、11);#cndifif(ZG_BUILP()IMNG_TYPE & (logicalTypc = N()DETYPE_R()UTER | | logicalTypc二二N()DETYPE_DEVICE)当设备作为节点时,执行迂个条件语句。if(siariModc 二二 MOPEJOIN) | | (startModc 二二 MODE.REJOIN)dcvStaic 二 DEV_NVCK_D1SC;#if dcfincd( MANAGEP.SCAN)ZD()ManagpdScan_Ncxt();ret = NLME_NciworkDiscover Requcst( managedScanCha

21、nndMask,BEACON_ORDER_15_MSEC);#clscret 二 NLME_NctworkDiscoveryRequcst( zgDcfaultChanndList, zgOcfaultStarringScaiiDuration);#if defined (ZIGBEE_FREQ_AGIL1TY)if (!( Zr)O_Config_Nodc_r)cscriptor.CapabilitFlags &C APINFO_RCVR_ON J OLE) &(ret 二二 ZSucccss ) & ( +discRcirics = 4)/ For devices with RxOnWhc

22、iiIdlc equals to FALSE, any Rework channel/ change will not be recited()n these devices or routers that have/ lost the network, an active scan shall be conducted on the Default/ Channel list using the extended PANID to find the Rework. If the/ extended PANID isrft found using the Default Channel list, an scan/ should be completed using all channels.zgDcfaultChaiinclList = MAX_CHANN

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2