Z-Stack中的HOLD-AUTO-START编译选项分析

Z-Stack中的HOLD_AUTO_START编译选项分析(2010-12-2214:33)分类:ZigBee技术学习如果使用HOLD_AUTO_START选项,那么本工程就会禁止自动启动ZDApp事件处理循环中的ZDO_NETWORK_INIT事件,也就是上电后不自动调用ZDOInitDevice(),需要通过外部事件,或者用户自己调用这个函数,下面我们看看定义了这个函数后,程序的流程是怎么样的。在ZDApp.c文件中,可以看到下面的定义:#ifdefined(HOLD_AUTO_START)devStates_tdevState=DEV_HOLD;//初始化-不会自动启动#elsedevStates_tdevState=DEV_INIT;//初始化-没有连接到任何东西#endif#ifdefined(ZDO_COORDINATOR)&&!defined(SOFT_START)//SetthedefaulttocoodinatordevStartModes_tdevStartMode=MODE_HARD;#elsedevStartModes_tdevStartMode=MODE_JOIN;//Assumejoining//devStartModes_tdevStartMode=MODE_RESUME;//ifalready"directlyjoined"//toparent.SettomakethedevicedoanOrphanscan.#endif#if!defined(ZDO_COORDINATOR)||defined(SOFT_START)staticuint8retryCnt;#endif在调用用户自己定义的任务初始化函数之前,调用下面的初始函数,看看这里怎么处理,devState状态的。voidZDApp_Init(bytetask_id){uint8capabilities;//SavethetaskIDZDAppTaskID=task_id;//InitializetheZDOglobaldeviceshortaddressstorageZDAppNwkAddr.addrMode=Addr16Bit;ZDAppNwkAddr.addr.shortAddr=INVALID_NODE_ADDR;(void)NLME_GetExtAddr();//LoadthesaveExtAddrpointer.加载IEEE地址//Checkformanual"HoldAutoStart"//打开电源时,检测到有手工设置SW_1则会设置devState=DEV_HOLD,从而不进行网络初始化ZDAppCheckForHoldKey();//InitializeZDOitemsandsetupthedevice-typeofdevicetocreate.ZDO_Init();//初始化ZDO条目,并设置设备的启动方式是协调器,还是别的//RegistertheendpointdescriptionwiththeAF//Thistaskdoesn'thaveaSimpledescription,butwestillneed//toregistertheendpoint.afRegister((endPointDesc_t*)&ZDApp_epDesc);#ifdefined(ZDO_USERDESC_RESPONSE)ZDApp_InitUserDesc();#endif//ZDO_USERDESC_RESPONSE//setbroadcastaddressmasktosupportbroadcastfilteringNLME_GetRequest(nwkCapabilityInfo,0,&capabilities);NLME_SetBroadcastFilter(capabilities);//Startthedevice?是否启动设备?如果devState不是DEV_HOLD时,则启动设备,在上面的代码分析中,也可以看到,如果定义了HOLD_AUTO_START宏,则devState等于DEV_HOLD,不会启动设备。如果按下了SW_1键devState也等于DEV_HOLD,也不会启动网络。也就是说有两种方式可以设置非自动启动模式,一种是通过按键,一种通过宏定义if(devState!=DEV_HOLD){ZDOInitDevice(0);}else{//如果定义了HOLD_AUTO_START,则等待延时或外部事件启动网络,并且LED4灯,也就是蓝色的灯闪烁//BlinkLEDtoindicateHOLD_STARTHalLedBlink(HAL_LED_4,0,50,500);}ZDApp_RegisterCBs();}/*ZDO_Init()*/voidZDAppCheckForHoldKey(void){#if(definedHAL_KEY)&&(HAL_KEY==TRUE)//通过判断按键来决定是否采用HOLD_AUTO_START方式。当按下SW_BYPASS_START按键,也就是SW1键,将避开自动启动设备,也就是设置devState=DEV_HOLD//GetKeypaddirectlytoseeifaHOLD_STARTisneeded.//HolddowntheSW_BYPASS_STARTkey(seeOnBoard.h)//whilebootingtoavoidstartingupthedevice.if(HalKeyRead()==SW_BYPASS_START){//ChangethedevicestatetoHOLDonstartupdevState=DEV_HOLD;}#endif//HAL_KEY}说明:(1)这里HAL_KEY的初始化在hal_board_cfg.h文件中:#ifndefHAL_KEY#defineHAL_KEYTRUE#endif而对SW_BYPASS_START的初始化在OnBoard.h文件中://TheseKeydefinitionsareuniquetothisdevelopmentsystem.//Theyareusedtobypassfunctionswhenstartingupthedevice.//这些键的定义仅适用于本应用例子,可以在设备启动时避开一些功能://避开网络层的NV存储和避开网络初始化#defineSW_BYPASS_NVHAL_KEY_SW_5//BypassNetworklayerNVrestore#defineSW_BYPASS_STARTHAL_KEY_SW_1//BypassNetworkinitialization因此避开网络层NV存储也...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供参考,付费前请自行鉴别。
3、如文档内容存在侵犯商业秘密、侵犯著作权等,请点击“举报”。

常见问题具体如下:

1、问:已经付过费的文档可以多次下载吗?

      答:可以。登陆您已经付过费的账号,付过费的文档可以免费进行多次下载。

2、问:已经付过费的文档不知下载到什么地方去了?

     答:电脑端-浏览器下载列表里可以找到;手机端-文件管理或下载里可以找到。

            如以上两种方式都没有找到,请提供您的交易单号或截图及接收文档的邮箱等有效信息,发送到客服邮箱,客服经核实后,会将您已经付过费的文档即时发到您邮箱。

注:微信交易号是以“420000”开头的28位数字;

       支付宝交易号是以“2024XXXX”交易日期开头的28位数字。

客服邮箱:

biganzikefu@outlook.com

所有的文档都被视为“模板”,用于写作参考,下载前须认真查看,确认无误后再购买;

文档大部份都是可以预览的,笔杆子文库无法对文档的真实性、完整性、准确性以及专业性等问题提供审核和保证,请慎重购买;

文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为依据;

如果您还有什么不清楚的或需要我们协助,可以联系客服邮箱:

biganzikefu@outlook.com

常见问题具体如下:

1、问:已经付过费的文档可以多次下载吗?

      答:可以。登陆您已经付过费的账号,付过费的文档可以免费进行多次下载。

2、问:已经付过费的文档不知下载到什么地方去了?

     答:电脑端-浏览器下载列表里可以找到;手机端-文件管理或下载里可以找到。

            如以上两种方式都没有找到,请提供您的交易单号或截图及接收文档的邮箱等有效信息,发送到客服邮箱,客服经核实后,会将您已经付过费的文档即时发到您邮箱。

注:微信交易号是以“420000”开头的28位数字;

       支付宝交易号是以“2024XXXX”交易日期开头的28位数字。

文秘专家
机构认证
内容提供者

1

确认删除?