亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码
標題:
Zstack中終端設備失去父節(jié)點時的重新入網(wǎng)方法
[打印本頁]
作者:
shaonv
時間:
2015-1-1 18:43
標題:
Zstack中終端設備失去父節(jié)點時的重新入網(wǎng)方法
在TI的Zstack協(xié)議棧中End Device(ED)在失去父節(jié)點的時候就不會重新入網(wǎng)了那么我們該如何處理才能夠讓ED重新入網(wǎng)呢我所能想到的辦法有以下幾種
1、 入網(wǎng)之后通過網(wǎng)絡管理相關函數(shù)獲取父節(jié)點短地址然后定時同父節(jié)點進行數(shù)據(jù)交互即很多人稱之為心跳數(shù)據(jù)包的方式如果ED長時間得不到父節(jié)點的ACK那么就復位自己方法是調(diào)用OnBoard.h中的宏函數(shù)SystemReset()。該函數(shù)的實現(xiàn)是通過禁止中斷然后寫看門狗之后死等看門狗復位具體可以去看協(xié)議棧相關代碼。
2、 有TI原裝開發(fā)板的同學(帶LCD的)可能會發(fā)現(xiàn)在ED節(jié)點上加裝LCD后如果協(xié)調(diào)器被關掉了,那么會在LCD上顯示Assoc Cnf fail
這說明在我們不人為為ED和其父節(jié)點增加心跳包的條件下,網(wǎng)絡間一定是在不停地進行著某種信息的交換。
那么我們看看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ù)調(diào)用了nwk_Status()該多好,可惜調(diào)用部分被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)上帶著其它硬件設備不能亂復位那么在調(diào)用SystemReset的地方你可以自己實現(xiàn)一個重新入網(wǎng)的尋找過程而不是復位整個硬件系統(tǒng) 2、 這個network status的變化ED是如何實現(xiàn)的呢具體沒有找到源碼但是我個人認為是在ED poll父節(jié)點要數(shù)據(jù)的時候得不到父節(jié)點的ack就認為失去了聯(lián)系從而network status 被改變了。
歡迎光臨 (http://www.denmoz.com/bbs/)
Powered by Discuz! X3.1