久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 7694|回復: 0
打印 上一主題 下一主題
收起左側

Zstack中終端設備失去父節(jié)點時的重新入網方法

[復制鏈接]
跳轉到指定樓層
樓主
ID:71477 發(fā)表于 2015-1-1 18:43 | 只看該作者 回帖獎勵 |正序瀏覽 |閱讀模式
在TI的Zstack協(xié)議棧中End Device(ED)在失去父節(jié)點的時候就不會重新入網了那么我們該如何處理才能夠讓ED重新入網呢我所能想到的辦法有以下幾種

1、 入網之后通過網絡管理相關函數(shù)獲取父節(jié)點短地址然后定時同父節(jié)點進行數(shù)據交互即很多人稱之為心跳數(shù)據包的方式如果ED長時間得不到父節(jié)點的ACK那么就復位自己方法是調用OnBoard.h中的宏函數(shù)SystemReset()。該函數(shù)的實現(xiàn)是通過禁止中斷然后寫看門狗之后死等看門狗復位具體可以去看協(xié)議棧相關代碼。

2、 有TI原裝開發(fā)板的同學(帶LCD的)?赡軙l(fā)現(xiàn)在ED節(jié)點上加裝LCD后如果協(xié)調器被關掉了,那么會在LCD上顯示Assoc Cnf fail

這說明在我們不人為為ED和其父節(jié)點增加心跳包的條件下,網絡間一定是在不停地進行著某種信息的交換。

那么我們看看Assoc Cnf fail是哪里來的,用source insight之類的代碼閱讀工具找一下Assoc Cnf fail,我們會發(fā)現(xiàn)它出現(xiàn)在Nwk_globals.c里面,即

#if defined ( LCD_SUPPORTED )

const char PingStr[] = "Ping Rcvd from";

const char AssocCnfStr[] = "Assoc Cnf";

const char SuccessStr[] = "Success";

const char EndDeviceStr[] = "EndDevice:";

const char ParentStr[]= "Parent:";

const char ZigbeeCoordStr[]= "ZigBee Coord";

const char NetworkIDStr[]= "Network ID:";

const char RouterStr[]= "Router:";

const char OrphanRspStr[]= "Orphan Response";

const char SentStr[]= "Sent";

const char FailedStr[] = "Failed";

const char AssocRspFailStr[] = "Assoc Rsp fail";

const char AssocIndStr[]="Assoc Ind";

const char AssocCnfFailStr[] = "Assoc Cnf fail";

const char EnergyLevelStr[] = "Energy Level";

const char ScanFailedStr[] = "Scan Failed";

#endif

我們再找一下AssocCnfFailStr他出現(xiàn)在Nwk_globals.c里面的一個函數(shù)nwk_Status()

該函數(shù)的說明指出它的功能是status report,也就是報告狀態(tài)的。

該函數(shù)中的case NWK_ERROR_ASSOC_CNF_DENIED: 位置里面是把AssocCnfFailStr字符串寫到LCD上的函數(shù)。 如果能夠看看那個函數(shù)調用了nwk_Status()該多好,可惜調用部分被TI和諧掉了。更深層次的理解沒法子了,但是不影響我們的最終目標。也就是說如果能夠在AssocCnfFailStr被寫到LCD上的地方軟件復位CC2530就行了。

那么好我們添加一個軟件復位函數(shù)在這里。這個軟件復位函數(shù)有現(xiàn)成的可用即OnBoard.h中的那個SystemReset()。 再多做點兒工作,如果你的ED沒有LCD那么編譯的時候就不能選擇LCD_SUPPORT了

nwk_Status()函數(shù)的主實現(xiàn)也沒辦法執(zhí)行了,怎么辦。

為了不破壞協(xié)議棧原來代碼我們可以用編譯選項來控制一下。即在該函數(shù)開始之初添加

#if defined (MY_BOARD)  switch(statusCode)

{   

case NWK_ERROR_ASSOC_CNF_DENIED:   

   SystemReset();  

   break;

default:break;  

  }

#endif

這樣就好了

在編譯器compiler的預編譯選項中添加MY_BOARD,但是不要LCD_SUPPORT?梢粤。

采用上面方法,可以在ED失去同父節(jié)點聯(lián)系的時候自動復位ED了。

討論 1、 如果你不想在失去聯(lián)系的時候復位整個CC2530系統(tǒng)可能系統(tǒng)上帶著其它硬件設備不能亂復位那么在調用SystemReset的地方你可以自己實現(xiàn)一個重新入網的尋找過程而不是復位整個硬件系統(tǒng) 2、 這個network status的變化ED是如何實現(xiàn)的呢具體沒有找到源碼但是我個人認為是在ED poll父節(jié)點要數(shù)據的時候得不到父節(jié)點的ack就認為失去了聯(lián)系從而network status 被改變了。

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产日本在线观看 | 亚洲最大黄色 | 在线观看日韩av | 最新av在线播放 | 成年免费视频黄网站在线观看 | 国产亚洲视频在线观看 | 99视频网站| 蜜桃精品视频 | 成人视屏在线观看 | 亚洲天堂中文字幕 | 五月激情综合网 | 国产一及片 | 国产日韩视频 | 久久精品美女 | 久久精品国产亚洲 | 亚洲高清在线视频 | 日本中文字幕在线播放 | 99re久久 | 中文字幕免费av | 欧美 日韩 国产 在线 | 精品久久久久久久久久久久久久久久 | 黄色片网站免费 | 欧美视频在线播放 | 成人毛片100免费观看 | 一区二区三区在线看 | 中文字幕免费看 | 99热网站| 亚洲人在线观看 | 日韩综合精品 | 蜜桃视频一区 | 人人干人人澡 | 国产美女一区二区三区 | 欧美精品日韩少妇 | 日日夜夜草 | 亚洲天堂免费视频 | 激情导航| 国产成人精品毛片 | 十八岁毛片 | 天天射av | 国产精品一区二区在线播放 | 中文字幕在线观看日韩 |