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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 7580|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

Zstack中終端設(shè)備失去父節(jié)點(diǎn)時(shí)的重新入網(wǎng)方法

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:71477 發(fā)表于 2015-1-1 18:43 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
在TI的Zstack協(xié)議棧中End Device(ED)在失去父節(jié)點(diǎn)的時(shí)候就不會(huì)重新入網(wǎng)了那么我們?cè)撊绾翁幚聿拍軌蜃孍D重新入網(wǎng)呢我所能想到的辦法有以下幾種

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

2、 有TI原裝開(kāi)發(fā)板的同學(xué)(帶LCD的)可能會(huì)發(fā)現(xiàn)在ED節(jié)點(diǎn)上加裝LCD后如果協(xié)調(diào)器被關(guān)掉了,那么會(huì)在LCD上顯示Assoc Cnf fail

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

那么我們看看Assoc Cnf fail是哪里來(lái)的,用source insight之類(lèi)的代碼閱讀工具找一下Assoc Cnf fail,我們會(huì)發(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

我們?cè)僬乙幌翧ssocCnfFailStr他出現(xiàn)在Nwk_globals.c里面的一個(gè)函數(shù)nwk_Status()

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

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

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

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

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

#if defined (MY_BOARD)  switch(statusCode)

{   

case NWK_ERROR_ASSOC_CNF_DENIED:   

   SystemReset();  

   break;

default:break;  

  }

#endif

這樣就好了

在編譯器compiler的預(yù)編譯選項(xiàng)中添加MY_BOARD,但是不要LCD_SUPPORT可以了。

采用上面方法,可以在ED失去同父節(jié)點(diǎn)聯(lián)系的時(shí)候自動(dòng)復(fù)位ED了。

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

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

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 欧美国产精品一区二区 | 午夜男人天堂 | 免费观看成人鲁鲁鲁鲁鲁视频 | 国产视频久久 | 在线国产小视频 | 国产成人精品一区二区三 | 久久九 | 亚洲欧美综合精品另类天天更新 | 国产精品久久久久久影院8一贰佰 | 日韩在线观看网站 | 欧美区在线观看 | 中文字幕影院 | 成人国产精品久久 | 国产精品免费一区二区三区 | 欧美理论片在线 | 国产色婷婷精品综合在线播放 | 97精品超碰一区二区三区 | 久久青青| 天天天操操操 | 国产91精品久久久久久久网曝门 | 四虎永久免费黄色影片 | 噜久寡妇噜噜久久寡妇 | 一级在线毛片 | 一级片在线观看视频 | 一区二区三区亚洲 | 国产在线精品一区二区 | 国产成人高清视频 | 亚洲成av人片在线观看无码 | 婷婷综合| 欧美成年黄网站色视频 | 国产高清精品一区二区三区 | 91大片| 日本精品网站 | 久久精品成人 | 亚洲精品视频免费 | 欧美成人免费在线 | 日本一区二区高清不卡 | 91亚洲国产成人久久精品网站 | ww 255hh 在线观看 | 久久久影院 | 久久久精品一区二区三区 |