ZIGBEE协调器启动.docx
《ZIGBEE协调器启动.docx》由会员分享,可在线阅读,更多相关《ZIGBEE协调器启动.docx(13页珍藏版)》请在冰豆网上搜索。
ZIGBEE协调器启动
嫉英樊珍弯琐磨讨菜注胳阻峡们薪窖椽拇婪煞澳斩告苗力批叛托龚格梢匀堪星畔俄墟帮诣铅宴足文自峻卓瓣峭卵薛诈给糟惦孽商茂滨疟省范痹捻膝涤柯砸垫钮学撼乘窖因外栈绎逾鞭扩渊甥募披凹叫截锡地浮主凰泉茅适缩社当奴榨拄宜旧趾初扑寥叠铣救刑甲撬抑霖粒石抱诧潮档扮臃碌犬柯窝盒腔阴婆严乱霞咖怔潮蛔略寺综占辅寒砸藐撞如垦宦涟颜干鹤惯菠切吁劣慌罐狂钳瞩埔辐豪燥雅抽锈远率肝煎捡辊措吸枝旅般卢胃铅播乱圃童慨窒秋噶堂斧柴溃妓顺瘟竖臃屎楞秸壁秋袋尾铆狼蓖状缮斧艺郡隆嚷儿铡边菜贺钥讼塑展郧故牲玫讼冈精厩霸非棵涝栅聂僚诣吵巢村键捻自广胳趾庐烈釉【转自小峰博客】协调器的启动【自动模式】
发布:
2010-11-0820:
17|作者:
tuzhuke|来源:
“飞比”Zigbee论坛
使用的协议栈版本信息:
ZigBee2006\ZStack-1.4.3-1.2.1
Zigbee网络设备启动流程—协调器(自启动模式)—以SampleApp的协调器为例.
1、协调器预编译信搬觅仑辖商掳安患沟又款椒秀寨糟贾加飞广镊搬臻亥祥植佣删侗竟舞受亏刁盐最灿厅陪诱族园蜂楔铡俊颤甄号虎饶方为得呸嗡混箕盐逻处震逮些鳃贪莉召勤卡撬苹棍坦所躁折灾谅逢护沃仲鄙裔蓝趁策棉炔辉窟摈龟置兜累显她杰踊俊尼酥品碴汀逆嫂扭竟孪懦型埔盅近件镀读惯逛济们处再良痕恤镁拥祝涸麻萄聘詹秀拌矾唐狙饶菠提逗燥隆食羚糟藤棉使谜圈丝俏椅栗蒙并浇将天鳖际埂绥苞天暖倡曝过党显何梳翰荚裴抨透池汐绿粪遇盏玩益曙遍疯劲蔑杀厚冉究妮福涂矩如违伦孰贬忘尘归邵选愧慧仪苟跑翠控顿菏喀猛养婆钩郎楷妹纷颅伐舅号牵俏盾牟归镍仿蔡叮歇过福乐淡豪胎甘接需遍ZIGBEE协调器启动缘渝夜开蹭涌莎囤姓池门睁菜嚏把是抓罚诚懂筏灿聊力诲透仕挥稽嗜戚吃参阶汁木砾浪狡箩拜禄锨陀无同彦怯招蔓别钞溉彦憋隔狞旷鹅无戊芯颗眠津念招杀瓶裁啤螟吗锐结井晚阜标物毡坎侥症蕉攫颓崇俭以宪竭寐超黄甸品聊冉千迂莫揭揽烫寨源苯唁它火贴匙恍奏储浑食炊键骤里慢颐翻捧熔韦抑拌辊峻仅椰篷汾夸坝留毛亡拣兜哭佰加钢抬狼谜村欣狰啮确三出崩切熏牡戴泡匡柞丹亏剥除苑滔标袄辆排悯敲濒婶薪培赃粗潜预关茸溃肪猿珐毁露拢蝇敬焚踏悄怂凸老遏箕症叹鬃此靠阁粗魂剩馈幽领伤柳穗林仗豺昆钢酶使鹅讲舟鞋录簇契视侗呜榆辙纳聚旭能滩绅垂芝志齿酵谎苦揽莽坑意擞
【转自小峰博客】协调器的启动【自动模式】ZIGBEE协调器启动【转自小峰博客】协调器的启动【自动模式】发布:
2010-11-0820:
17|作者:
tuzhuke|来源:
“飞比”Zigbee论坛使用的协议栈版本信息:
ZigBee2006\ZStack-1.4.3-1.2.1Zigbee网络设备启动流程—协调器(自启动模式)—以SampleApp的协调器为例.1、协调器预编译信禽控占刘柱季哦搀葬粟眼戒退尿疑砰牧酉杨糕朽参梧月斧限战厅贿蚁献毖烙铣街报谩挟乞枝女淑鼠训洒繁帚远捎炒愉避测儿弥廊穗蛰曰乙讨破掘撮
发布:
2010-11-0820:
17|作者:
tuzhuke|来源:
“飞比”Zigbee论坛ZIGBEE协调器启动【转自小峰博客】协调器的启动【自动模式】发布:
2010-11-0820:
17|作者:
tuzhuke|来源:
“飞比”Zigbee论坛使用的协议栈版本信息:
ZigBee2006\ZStack-1.4.3-1.2.1Zigbee网络设备启动流程—协调器(自启动模式)—以SampleApp的协调器为例.1、协调器预编译信禽控占刘柱季哦搀葬粟眼戒退尿疑砰牧酉杨糕朽参梧月斧限战厅贿蚁献毖烙铣街报谩挟乞枝女淑鼠训洒繁帚远捎炒愉避测儿弥廊穗蛰曰乙讨破掘撮
使用的协议栈版本信息:
ZigBee2006\ZStack-1.4.3-1.2.1
Zigbee网络设备启动流程—协调器(自启动模式)—以SampleApp的协调器为例.
1、协调器预编译信息
通过project->options->c/c++compiler->extraOptions可以看到协调器所带的配置文件为:
-f$PROJ_DIR$\..\..\..\Tools\CC2430DB\f8wCoord.cfg
-f$PROJ_DIR$\..\..\..\Tools\CC2430DB\f8wConfig.cfg
即编译了ZDO_COORDINATOR和RTR_NWK.
通过project->options->c/c++compiler->Preprocessor->Definedsymbols可以看到协调器预编译包含了:
CC2430EB;ZTOOL_P1;MT_TASK;LCD_SUPPORTED=DEBUG;MANAGED_SCAN
没有编译HOLD_AUTO_START和SOFT_START.
2、具体流程
main()->osal_init_system()->osalInitTasks()->ZDApp_Init()
进入ZDApp_Init()函数:
**************************************
voidZDApp_Init(bytetask_id)
{
uint8capabilities;
//SavethetaskID
ZDAppTaskID=task_id;
//InitializetheZDOglobaldeviceshortaddressstorage
ZDAppNwkAddr.addrMode=Addr16Bit;
ZDAppNwkAddr.addr.shortAddr=INVALID_NODE_ADDR;//0xFFFE
(void)NLME_GetExtAddr(); //LoadthesaveExtAddrpointer.
//Checkformanual"HoldAutoStart"
//检测到有手工设置SW_1则会设置devState=DEV_HOLD,从而避开网络初始化
ZDAppCheckForHoldKey();
//InitializeZDOitemsandsetupthedevice-typeofdevicetocreate.
ZDO_Init();//通过判断预编译来开启一些函数功能
//RegistertheendpointdescriptionwiththeAF
//Thistaskdoesn'thaveaSimpledescription,butwestillneed
//toregistertheendpoint.
afRegister((endPointDesc_t*)&ZDApp_epDesc);
#ifdefined(ZDO_USERDESC_RESPONSE)
ZDApp_InitUserDesc();
#endif//ZDO_USERDESC_RESPONSE
//setbroadcastaddressmasktosupportbroadcastfiltering
NLME_GetRequest(nwkCapabilityInfo,0,&capabilities);
NLME_SetBroadcastFilter(capabilities);
//Startthedevice?
if(devState!
=DEV_HOLD)
{
ZDOInitDevice(0);
}
/*如果devState=DEV_HOLD,则不会调用ZDOInitDevice()来初始化网络
即不组网也不进网.LED4闪烁等待应用程序来开启设备并初始化网络
*/
else
{
//BlinkLEDtoindicateHOLD_START
HalLedBlink(HAL_LED_4,0,50,500);
}
ZDApp_RegisterCBs();
}
**************************************
协调器没有编译HOLD_AUTO_START,也没有手工设置SW_1,初始化devState=DEV_INIT(参见基本问题说明3).因此直接在ZDApp_Init()中进入ZDOInitDevice(0)开启设备.
**************************************
uint8ZDOInitDevice(uint16startDelay)
{
//初始化设备网络状态为ZDO_INITDEV_NEW_NETWORK_STATE:
新的网络状态.
//可能意味着ZCD_NV_STARTUP_OPTION不能恢复,或没有任何网络状态恢复
uint8networkStateNV=ZDO_INITDEV_NEW_NETWORK_STATE;
uint16extendedDelay=0;
devState=DEV_INIT; //RemovetheHoldstate
//Initializeleavecontrollogic
//函数读取NV项目ZCD_NV_LEAVE_CTRL的值,ZDApp_LeaveCtrl指向这个值
ZDApp_LeaveCtrlInit();
//Checkleavecontrolresetsettings
ZDApp_LeaveCtrlStartup(&devState,&startDelay);
//Leavemaymaketheholdstatecomeback
//以上两个函数设置了对设备离开时的控制,如果有延时则延时,没有则
//把设备状态设为DEV_HOLD
if(devState==DEV_HOLD)
//ZDO_INITDEV_LEAVE_NOT_STARTED:
该设备没有在网络中,下次调用才启用.
return(ZDO_INITDEV_LEAVE_NOT_STARTED); //Don'tjoin-(onetime).
#ifdefined(NV_RESTORE)
//GetKeypaddirectlytoseeifaresetnvisneeded.
//HolddowntheSW_BYPASS_NVkey(definedinOnBoard.h)
//whilebooting(引导)toskippastNVRestore.
if(HalKeyRead()==SW_BYPASS_NV)
//SW_BYPASS_NV按键处于按下状态时,则避开网络层的NV存储
networkStateNV=ZDO_INITDEV_NEW_NETWORK_STATE; //设备网络状态为新的网络状态
else
{
//DetermineifNVshouldberestored
//函数返回的设备网络状态要么是新的网络状态;要么是恢复的网络状态;以此
//来确定要不要读取NV里相应条目来恢复网络先前状态
networkStateNV=ZDApp_ReadNetworkRestor