無線傳感器網(wǎng)絡(luò)(8)_第1頁
無線傳感器網(wǎng)絡(luò)(8)_第2頁
無線傳感器網(wǎng)絡(luò)(8)_第3頁
無線傳感器網(wǎng)絡(luò)(8)_第4頁
無線傳感器網(wǎng)絡(luò)(8)_第5頁
已閱讀5頁,還剩84頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、無線傳感器網(wǎng)絡(luò)第第8 8章章 Z-StackZ-Stack協(xié)議棧協(xié)議棧計(jì)計(jì)算機(jī)科算機(jī)科學(xué)學(xué)系系 宋文強(qiáng)宋文強(qiáng)1 什什么么是是協(xié)議棧協(xié)議棧?v 協(xié)議協(xié)議是一系列的通信是一系列的通信標(biāo)標(biāo)準(zhǔn),通信準(zhǔn),通信雙雙方需要共同按照方需要共同按照這這一一標(biāo)標(biāo)準(zhǔn)準(zhǔn)進(jìn)進(jìn)行正常行正常的的數(shù)數(shù)據(jù)據(jù)發(fā)發(fā)射和接收。射和接收。v 協(xié)議棧協(xié)議棧是是協(xié)議協(xié)議的具體的具體實(shí)現(xiàn)實(shí)現(xiàn)形式,是形式,是協(xié)議協(xié)議和用和用戶戶之之間間的一的一個(gè)個(gè)接口,接口,開發(fā)開發(fā)人人員員通通過過使用使用協(xié)議棧來協(xié)議棧來使用使用這個(gè)協(xié)議這個(gè)協(xié)議,進(jìn)進(jìn)而而實(shí)現(xiàn)實(shí)現(xiàn)無無線數(shù)線數(shù)據(jù)收據(jù)收發(fā)發(fā)。 v ZigBeeZigBee協(xié)議棧協(xié)議棧就是就是將將各各個(gè)層個(gè)層定定

2、義義的的協(xié)議協(xié)議都集合在一直,以函都集合在一直,以函數(shù)數(shù)的形的形式式實(shí)現(xiàn)實(shí)現(xiàn),并給并給用用戶戶提供提供 API(API(應(yīng)應(yīng)用用層層) ) ),用,用戶戶可以直接可以直接調(diào)調(diào)用。用。2 ZigBee ZigBee 協(xié)議棧協(xié)議棧v ZigBee ZigBee 的的協(xié)議協(xié)議分分為兩為兩部分,部分,IEEE 802.15.4 IEEE 802.15.4 定定義義了了 PHYPHY(物理(物理層層)和和 MACMAC(介(介質(zhì)訪問層質(zhì)訪問層)技)技術(shù)規(guī)術(shù)規(guī)范;范;ZigBeeZigBee聯(lián)聯(lián)盟定盟定義義了了 NWKNWK(網(wǎng)絡(luò)網(wǎng)絡(luò)層層)、)、APSAPS(應(yīng)應(yīng)用程序支持子用程序支持子層層)、)、APL

3、APL(應(yīng)應(yīng)用用層層)技)技術(shù)規(guī)術(shù)規(guī)范。范。3 安裝安裝協(xié)議棧協(xié)議棧雙擊雙擊4 安裝安裝過過后的后的啟動(dòng)啟動(dòng)v 安裝之后的安裝之后的資資源管理器窗口源管理器窗口6 內(nèi)內(nèi)容容說說明明v ComponentsComponents,存放,存放庫庫的文件的文件夾夾,里面放了一些我,里面放了一些我們們用到的用到的 ZDOZDO,driverdriver,halhal,zcl zcl 等等庫庫的代的代碼碼v DocumentsDocuments,存放,存放 TI TI 的的開發(fā)開發(fā)文文檔檔,里面很多都是,里面很多都是講講述述協(xié)議棧協(xié)議棧的的 APIAPIv ProjectsProjects,存放,存放 T

4、I TI 協(xié)議棧協(xié)議棧的例程序,一的例程序,一個(gè)個(gè)個(gè)個(gè)例程例程序都是以序都是以 projectproject的形式提供的,的形式提供的,學(xué)學(xué)好好這這些例程序些例程序里面的一里面的一兩個(gè)兩個(gè),基本上就能做事情了,基本上就能做事情了v ToolsTools,存放,存放 TI TI 例程序的一些上位機(jī)之例程序的一些上位機(jī)之類類的程序,的程序,作作為為工具使用工具使用7 協(xié)議棧協(xié)議棧是是協(xié)議協(xié)議的的實(shí)現(xiàn)實(shí)現(xiàn)v 協(xié)議棧協(xié)議棧是是協(xié)議協(xié)議的的實(shí)現(xiàn)實(shí)現(xiàn),可以理解,可以理解為為代代碼碼,函,函數(shù)庫數(shù)庫,供上,供上層應(yīng)層應(yīng)用用調(diào)調(diào)用,用,協(xié)協(xié)議較議較底下的底下的層與應(yīng)層與應(yīng)用是相互用是相互獨(dú)獨(dú)立的。立的。v 商

5、商業(yè)業(yè)化的化的協(xié)議棧給協(xié)議棧給用用戶寫戶寫好了底好了底層層的代的代碼碼,符合,符合協(xié)議標(biāo)協(xié)議標(biāo)準(zhǔn),提供一準(zhǔn),提供一個(gè)個(gè)功功能模能模塊塊供用供用戶調(diào)戶調(diào)用。用。v 用用戶戶需要需要關(guān)關(guān)心的就是心的就是應(yīng)應(yīng)用用邏輯邏輯,數(shù)數(shù)據(jù)據(jù)從哪從哪里到里到哪哪里,里,怎么怎么存存儲(chǔ)儲(chǔ)、處處理,理,還還有系有系統(tǒng)內(nèi)設(shè)備統(tǒng)內(nèi)設(shè)備之之間間的通信的通信順順序。序。v 當(dāng)應(yīng)當(dāng)應(yīng)用需要用需要數(shù)數(shù)據(jù)通信據(jù)通信時(shí)時(shí),調(diào)調(diào)用用組網(wǎng)組網(wǎng)函函數(shù)組數(shù)組建想要的建想要的網(wǎng)絡(luò)網(wǎng)絡(luò);v 想想從從一一個(gè)設(shè)備發(fā)數(shù)個(gè)設(shè)備發(fā)數(shù)據(jù)到另一據(jù)到另一個(gè)設(shè)備時(shí)個(gè)設(shè)備時(shí),調(diào)調(diào)用無用無線數(shù)線數(shù)據(jù)據(jù)發(fā)發(fā)送函送函數(shù)數(shù);接收端;接收端就就調(diào)調(diào)用接收函用接收函數(shù)數(shù);v

6、 當(dāng)設(shè)備閑當(dāng)設(shè)備閑置置時(shí)時(shí),調(diào)調(diào)用睡眠函用睡眠函數(shù)數(shù);工作;工作時(shí)調(diào)時(shí)調(diào)用用喚喚醒函醒函數(shù)數(shù)。v 當(dāng)當(dāng)用用戶戶做具體做具體應(yīng)應(yīng)用用時(shí)時(shí),不需要,不需要關(guān)關(guān)心心協(xié)議棧協(xié)議棧是是怎么寫怎么寫的,里面的每的,里面的每條條代代碼碼是什是什么么意思。除非意思。除非你你要做要做協(xié)議研協(xié)議研究。究。v 每每個(gè)廠個(gè)廠商的商的協(xié)議棧協(xié)議棧有有區(qū)別區(qū)別,即函,即函數(shù)數(shù)名名稱稱和和參數(shù)參數(shù)可能有可能有區(qū)別區(qū)別,要看具體的,要看具體的例子、例子、說說明文明文檔檔。8 8.1.1 Z-Stack8.1.1 Z-Stack協(xié)議棧簡協(xié)議棧簡介介 v TITI公司在推出公司在推出CC2530CC2530射射頻頻芯片同芯片同時(shí)

7、時(shí),也向用,也向用戶戶提供了提供了ZigBeeZigBee協(xié)議棧軟協(xié)議棧軟件件Z-StackZ-Stack。v 這這是一款是一款經(jīng)過經(jīng)過ZigBeeZigBee聯(lián)聯(lián)盟的盟的認(rèn)認(rèn)可,可,為為全球全球眾眾多多開發(fā)開發(fā)商所廣泛商所廣泛采用的商采用的商業(yè)級(jí)協(xié)議棧業(yè)級(jí)協(xié)議棧v 使用使用IAR Embedded Workbench for 8051IAR Embedded Workbench for 8051作作為為集成集成開發(fā)環(huán)開發(fā)環(huán)境境v TITI公司公司為為Z-StackZ-Stack協(xié)議棧協(xié)議棧中提供了一中提供了一個(gè)個(gè)名名為為操作系操作系統(tǒng)統(tǒng)抽象抽象層層OSALOSAL的的協(xié)議棧調(diào)協(xié)議棧調(diào)度程序。

8、度程序。對對于用于用戶來說戶來說,除了能,除了能夠夠看到看到這個(gè)這個(gè)調(diào)調(diào)度程序外,其度程序外,其它它任何任何協(xié)議棧協(xié)議棧操作的具體操作的具體實(shí)現(xiàn)細(xì)節(jié)實(shí)現(xiàn)細(xì)節(jié)都被封裝在都被封裝在庫庫代代碼碼中。用中。用戶戶在在應(yīng)應(yīng)用用開發(fā)時(shí)開發(fā)時(shí)只能通只能通過調(diào)過調(diào)用用APIAPI接口接口來進(jìn)來進(jìn)行,行,而無法知道而無法知道ZigBeeZigBee協(xié)議棧實(shí)現(xiàn)協(xié)議棧實(shí)現(xiàn)的具體的具體細(xì)節(jié)細(xì)節(jié)9 8.1.2 Z-Stack8.1.2 Z-Stack協(xié)議棧協(xié)議?;净靖鸥拍钅? 1)協(xié)調(diào)協(xié)調(diào)器器u 負(fù)責(zé)啟動(dòng)負(fù)責(zé)啟動(dòng)整整個(gè)網(wǎng)絡(luò)個(gè)網(wǎng)絡(luò),也是,也是網(wǎng)絡(luò)網(wǎng)絡(luò)的第一的第一個(gè)設(shè)備個(gè)設(shè)備。協(xié)調(diào)協(xié)調(diào)器器選擇選擇一一個(gè)個(gè)信道和一信道和

9、一個(gè)個(gè)PAN IDPAN ID(即(即Personal Area Network ID)Personal Area Network ID),隨隨后后啟動(dòng)啟動(dòng)整整個(gè)網(wǎng)絡(luò)個(gè)網(wǎng)絡(luò)。u 協(xié)調(diào)協(xié)調(diào)器也可以用器也可以用來協(xié)來協(xié)助建立助建立網(wǎng)絡(luò)網(wǎng)絡(luò)中安全中安全層層和和應(yīng)應(yīng)用用層層的的綁綁定定(bindings)(bindings)。u 協(xié)調(diào)協(xié)調(diào)器的角色主要涉及器的角色主要涉及網(wǎng)絡(luò)網(wǎng)絡(luò)的的啟動(dòng)啟動(dòng)和配置。一旦和配置。一旦這這些都完成后,些都完成后,協(xié)調(diào)協(xié)調(diào)器器的工作就和一的工作就和一個(gè)個(gè)路由器相同。由于路由器相同。由于ZigBeeZigBee網(wǎng)絡(luò)網(wǎng)絡(luò)本身的分布特性,因此接本身的分布特性,因此接下下來來整整個(gè)網(wǎng)

10、絡(luò)個(gè)網(wǎng)絡(luò)的操作就不再依的操作就不再依賴協(xié)調(diào)賴協(xié)調(diào)器是否存在。器是否存在。2 2)路由器)路由器u 功能:允功能:允許許其他其他設(shè)備設(shè)備加入加入網(wǎng)絡(luò)網(wǎng)絡(luò),多跳路由,多跳路由協(xié)協(xié)助由助由電電池供池供電電的子的子終終端端設(shè)備設(shè)備的通的通訊訊。u 通常,路由器需要一直通常,路由器需要一直處處于活于活動(dòng)狀態(tài)動(dòng)狀態(tài),因此必,因此必須須使用主使用主電電源供源供電電。但是。但是當(dāng)當(dāng)使用使用樹這種網(wǎng)絡(luò)樹這種網(wǎng)絡(luò)拓?fù)渫負(fù)浣Y(jié)構(gòu)時(shí)結(jié)構(gòu)時(shí),允,允許許路由器路由器間間隔一定的周期操作一次,隔一定的周期操作一次,這樣這樣就可以使用就可以使用電電池池給給其供其供電電。3 3)終終端端設(shè)備設(shè)備u 終終端端設(shè)備沒設(shè)備沒有有維維持

11、持網(wǎng)絡(luò)結(jié)構(gòu)網(wǎng)絡(luò)結(jié)構(gòu)的的職責(zé)職責(zé),它它可以睡眠或者可以睡眠或者喚喚醒,因此可以是醒,因此可以是由由電電池供池供電電的的設(shè)備設(shè)備。u 通常,通常,終終端端設(shè)備對設(shè)備對存存儲(chǔ)儲(chǔ)空空間間( (特特別別是是RAMRAM的需要的需要) )比比較較小。小。 10 8.1.2 Z-Stack8.1.2 Z-Stack協(xié)議棧協(xié)議棧信道信道 u ZigBeeZigBee采用直接序列采用直接序列擴(kuò)頻擴(kuò)頻(DSSSDSSS)在工)在工業(yè)業(yè)科科學(xué)醫(yī)療學(xué)醫(yī)療(ISM)(ISM)頻頻段,段,2.4GHz(2.4GHz(全球全球) )、915MHz(915MHz(美美國國) )和和868MHz(868MHz(歐歐洲洲) )。

12、在在2.4G2.4G頻頻段上段上IEEE802.15.4/ZigBeeIEEE802.15.4/ZigBee規(guī)規(guī)定了定了1616個(gè)個(gè)信道信道, ,每每個(gè)個(gè)信道信道頻帶寬頻帶寬度度為為5MHz5MHz。u ZigBeeZigBee與與其他通信其他通信協(xié)議協(xié)議的信道沖突:的信道沖突: 15 15,2020,2525,2626信道信道與與Wi-FiWi-Fi信道沖突信道沖突較較小小 藍(lán)藍(lán)牙牙 基本不基本不會(huì)會(huì)沖突。無沖突。無繩電話盡繩電話盡量不量不與與ZigBeeZigBee同同時(shí)時(shí)使用使用 11 8.1.2 Z-Stack8.1.2 Z-Stack協(xié)議棧協(xié)議棧PANIDPANIDv 1616位位I

13、DID值值用用來標(biāo)識(shí)來標(biāo)識(shí)唯一一唯一一個(gè)個(gè)ZigBeeZigBee網(wǎng)絡(luò)網(wǎng)絡(luò),主要是用于,主要是用于區(qū)區(qū)分分網(wǎng)絡(luò)網(wǎng)絡(luò),使得同一地,使得同一地區(qū)區(qū)可以同可以同時(shí)時(shí)存在多存在多個(gè)個(gè)ZigBeeZigBee網(wǎng)絡(luò)網(wǎng)絡(luò)。取取值值范范圍圍是是0 x00000 x00000 x3FFF0 x3FFF。v 當(dāng)設(shè)當(dāng)設(shè)置置為為0 xFFFF0 xFFFF時(shí)時(shí),協(xié)調(diào)協(xié)調(diào)器可以器可以隨隨機(jī)機(jī)獲獲取一取一個(gè)個(gè)1616位的位的PANIDPANID建立一建立一個(gè)網(wǎng)絡(luò)個(gè)網(wǎng)絡(luò)。v 路由器或者路由器或者終終端端設(shè)備設(shè)備可以加入任意一可以加入任意一個(gè)個(gè)已已設(shè)設(shè)定信道上的定信道上的網(wǎng)網(wǎng)絡(luò)絡(luò)而不去而不去關(guān)關(guān)心心PANIDPANID。v

14、PANIDPANID用于在用于在邏輯邏輯上上區(qū)區(qū)分同一地分同一地區(qū)區(qū)或者同一信道上的或者同一信道上的ZigBeeZigBee節(jié)節(jié)點(diǎn),在不同地點(diǎn),在不同地區(qū)區(qū)或者同一地或者同一地區(qū)區(qū)不同的信道可以使不同的信道可以使用同一用同一PANIDPANID。 12 8.1.2 Z-Stack8.1.2 Z-Stack協(xié)議棧協(xié)議棧地址地址 v ZigBeeZigBee設(shè)備設(shè)備有有兩種類兩種類型的地址。型的地址。v 6464位位IEEEIEEE地址,即地址,即MACMAC地址地址v 6464位地址是全球唯一的地址,位地址是全球唯一的地址,設(shè)備將設(shè)備將在在它它的生命周期中一的生命周期中一直直擁擁有有它它。它它通

15、常由制造商或者被安裝通常由制造商或者被安裝時(shí)設(shè)時(shí)設(shè)置。置。這這些地址些地址由由IEEEIEEE來維護(hù)來維護(hù)和分配。和分配。v 1616位位網(wǎng)絡(luò)網(wǎng)絡(luò)地址地址v 1616位地址位地址為網(wǎng)絡(luò)為網(wǎng)絡(luò)地址是地址是當(dāng)設(shè)備當(dāng)設(shè)備加入加入網(wǎng)絡(luò)網(wǎng)絡(luò)后分配的,后分配的,協(xié)調(diào)協(xié)調(diào)器器按照一定的算法按照一定的算法進(jìn)進(jìn)行分配。行分配。它它在在網(wǎng)絡(luò)網(wǎng)絡(luò)中是唯一的,用中是唯一的,用來來在在網(wǎng)絡(luò)網(wǎng)絡(luò)中中鑒別設(shè)備鑒別設(shè)備和和發(fā)發(fā)送送數(shù)數(shù)據(jù)。據(jù)。 13 8.1.2 Z-Stack8.1.2 Z-Stack協(xié)議棧協(xié)議棧數(shù)數(shù)據(jù)據(jù)傳傳送方式送方式(1 1)單單點(diǎn)點(diǎn)傳傳送送(Unicast)(Unicast) 將數(shù)將數(shù)據(jù)包據(jù)包發(fā)發(fā)送送給

16、給一一個(gè)個(gè)已已經(jīng)經(jīng)知道知道網(wǎng)絡(luò)網(wǎng)絡(luò)地址的地址的網(wǎng)絡(luò)設(shè)備網(wǎng)絡(luò)設(shè)備。(2 2)間間接接傳傳送送(Indirect)(Indirect) 當(dāng)應(yīng)當(dāng)應(yīng)用程序不知道用程序不知道數(shù)數(shù)據(jù)包的目據(jù)包的目標(biāo)設(shè)備標(biāo)設(shè)備在在哪哪里的里的時(shí)時(shí)候使用的模候使用的模式。式。從發(fā)從發(fā)送送設(shè)備設(shè)備的的棧棧的的綁綁定表中定表中查查找目找目標(biāo)設(shè)備標(biāo)設(shè)備。這種這種特點(diǎn)特點(diǎn)稱稱之之為為源源綁綁定。定。當(dāng)數(shù)當(dāng)數(shù)據(jù)向下?lián)蛳掳l(fā)發(fā)送到送到達(dá)棧達(dá)棧中,中,從綁從綁定表中定表中查查找找并并且使用且使用該該目目標(biāo)標(biāo)地址。地址。 這樣這樣,數(shù)數(shù)據(jù)包據(jù)包將將被被處處理成理成為為一一個(gè)標(biāo)個(gè)標(biāo)準(zhǔn)的準(zhǔn)的單單點(diǎn)點(diǎn)傳傳送送數(shù)數(shù)據(jù)包。如據(jù)包。如果在果在綁綁定表中

17、找到多定表中找到多個(gè)設(shè)備個(gè)設(shè)備,則則向每向每個(gè)設(shè)備個(gè)設(shè)備都都發(fā)發(fā)送一送一個(gè)數(shù)個(gè)數(shù)據(jù)據(jù)包的拷包的拷貝貝。 14 數(shù)數(shù)據(jù)據(jù)傳傳送方式送方式廣播廣播傳傳送送(3 3)廣播廣播傳傳送送(broadcast)(broadcast) 當(dāng)應(yīng)當(dāng)應(yīng)用程序需要用程序需要將數(shù)將數(shù)據(jù)包據(jù)包發(fā)發(fā)送送給網(wǎng)絡(luò)給網(wǎng)絡(luò)的每一的每一個(gè)設(shè)備時(shí)個(gè)設(shè)備時(shí),使用,使用這種數(shù)這種數(shù)據(jù)據(jù)傳傳送方式。目送方式。目標(biāo)標(biāo)地址可以地址可以設(shè)設(shè)置置為為下面廣播地址的一下面廣播地址的一種種: (0 xFFFF)(0 xFFFF)數(shù)數(shù)據(jù)包據(jù)包將將被被傳傳送到送到網(wǎng)絡(luò)網(wǎng)絡(luò)上的所有上的所有設(shè)備設(shè)備,包括睡,包括睡眠中的眠中的設(shè)備設(shè)備。對對于睡眠中的于睡眠中的

18、設(shè)備設(shè)備,數(shù)數(shù)據(jù)包據(jù)包將將被保留在其父被保留在其父親親節(jié)節(jié)點(diǎn)直到點(diǎn)直到查詢查詢到到它它,或者消息超,或者消息超時(shí)時(shí)。 (0 xFFFD)(0 xFFFD)數(shù)數(shù)據(jù)包據(jù)包將將被被傳傳送到送到網(wǎng)絡(luò)網(wǎng)絡(luò)上的所有在空上的所有在空閑時(shí)閑時(shí)打打開開接收的接收的設(shè)備設(shè)備,也就是,也就是說說,除了睡眠中的所有,除了睡眠中的所有設(shè)備設(shè)備。 (0 xFFFC)(0 xFFFC)數(shù)數(shù)據(jù)包據(jù)包發(fā)發(fā)送送給給所有的路由器,包括所有的路由器,包括協(xié)調(diào)協(xié)調(diào)器。器。 15 (4 4)組尋組尋址址v 當(dāng)應(yīng)當(dāng)應(yīng)用程序需要用程序需要將數(shù)將數(shù)據(jù)包據(jù)包發(fā)發(fā)送送給網(wǎng)絡(luò)給網(wǎng)絡(luò)上的一上的一組設(shè)備組設(shè)備時(shí)時(shí),可以使用,可以使用組尋組尋址。址。v

19、在使用在使用這個(gè)這個(gè)功能之前,必功能之前,必須須在在網(wǎng)絡(luò)網(wǎng)絡(luò)中定中定義組義組v 組組可以用可以用來關(guān)聯(lián)間來關(guān)聯(lián)間接接尋尋址址v 綁綁定表中找到的目定表中找到的目標(biāo)標(biāo)地址可能是地址可能是單單點(diǎn)點(diǎn)傳傳送或者是一送或者是一個(gè)組個(gè)組地址地址v 廣播廣播發(fā)發(fā)送可以看作是一送可以看作是一個(gè)組尋個(gè)組尋址的特例址的特例16 8.1.2 Z-Stack8.1.2 Z-Stack協(xié)議棧協(xié)議棧端點(diǎn)端點(diǎn) v 端點(diǎn)(端點(diǎn)(EndPointEndPoint):):為實(shí)現(xiàn)為實(shí)現(xiàn)一一個(gè)設(shè)備個(gè)設(shè)備描述而定描述而定義義的一的一組組群集,定群集,定義義了一了一個(gè)設(shè)備內(nèi)個(gè)設(shè)備內(nèi)的一的一個(gè)個(gè)通信通信實(shí)實(shí)體,體,一一個(gè)個(gè)特定特定應(yīng)應(yīng)用通

20、用通過它過它被被執(zhí)執(zhí)行。行。v ZDOZDO的的EndpointEndpoint為為0 0,其他,其他應(yīng)應(yīng)用程序的用程序的EndpointEndpoint從從12401240,241255241255保留未用。保留未用。v 關(guān)關(guān)于于EndPointEndPoint的理解就是的理解就是虛擬鏈虛擬鏈路。路。 17 8.1.2 Z-Stack8.1.2 Z-Stack協(xié)議棧協(xié)議棧拓?fù)渫負(fù)浣Y(jié)構(gòu)結(jié)構(gòu)v ZigBeeZigBee技技術(shù)術(shù)具有強(qiáng)大的具有強(qiáng)大的組網(wǎng)組網(wǎng)能力,可以形成星型能力,可以形成星型、樹樹型和型和MESHMESH網(wǎng)狀網(wǎng)網(wǎng)狀網(wǎng),可以根據(jù),可以根據(jù)實(shí)際項(xiàng)實(shí)際項(xiàng)目需要目需要來來選擇選擇合適的合適

21、的網(wǎng)絡(luò)結(jié)構(gòu)網(wǎng)絡(luò)結(jié)構(gòu)。v 默默認(rèn)認(rèn)的拓?fù)涞耐負(fù)浣Y(jié)構(gòu)結(jié)構(gòu)是是MESHMESH網(wǎng)狀網(wǎng)狀拓?fù)渫負(fù)浣Y(jié)構(gòu)結(jié)構(gòu)。 18 8.1.2 Z-Stack8.1.2 Z-Stack協(xié)議棧協(xié)議棧簇簇v 簇(簇(clustercluster):一):一個(gè)應(yīng)個(gè)應(yīng)用用規(guī)規(guī)范范內(nèi)內(nèi)的所有的所有設(shè)備設(shè)備,通,通過過簇的方式彼此簇的方式彼此進(jìn)進(jìn)行通信。行通信。v 簇可被簇可被輸輸入入給給一一個(gè)設(shè)備個(gè)設(shè)備,也可,也可從從一一個(gè)設(shè)備個(gè)設(shè)備被被輸輸出。出。v 簇的作用主要在于簇的作用主要在于發(fā)發(fā)送方和接收方送方和接收方關(guān)關(guān)于通信的一于通信的一種種約約定,接收方接收到的信息的簇定,接收方接收到的信息的簇IDID來來判定要判定要對對接收接

22、收到的信息到的信息進(jìn)進(jìn)行行怎樣怎樣的的處處理。理。 19 8.1.2 Z-Stack8.1.2 Z-Stack協(xié)議棧協(xié)議棧路由路由 v 路由能路由能夠夠自愈自愈ZigBeeZigBee網(wǎng)絡(luò)網(wǎng)絡(luò)v 如果某如果某個(gè)個(gè)無無線連線連接接斷開斷開了,路由功能又能自了,路由功能又能自動(dòng)尋動(dòng)尋找找一一條條新的路新的路徑徑避避開開那那個(gè)斷開個(gè)斷開的的網(wǎng)絡(luò)連網(wǎng)絡(luò)連接。接。這這就就極極大大地提高了地提高了網(wǎng)絡(luò)網(wǎng)絡(luò)的可靠性,同的可靠性,同時(shí)時(shí)也是也是ZigBeeZigBee網(wǎng)絡(luò)網(wǎng)絡(luò)的的一一個(gè)關(guān)鍵個(gè)關(guān)鍵特性。特性。 20 8.1.2 Z-Stack8.1.2 Z-Stack協(xié)議棧協(xié)議棧協(xié)議棧規(guī)協(xié)議棧規(guī)范范 v Zig

23、BeeZigBee聯(lián)聯(lián)盟定盟定義義指定。在同一指定。在同一個(gè)網(wǎng)絡(luò)個(gè)網(wǎng)絡(luò)中的中的設(shè)備設(shè)備必必須須符合同一符合同一個(gè)協(xié)議棧規(guī)個(gè)協(xié)議棧規(guī)范(同一范(同一個(gè)網(wǎng)絡(luò)個(gè)網(wǎng)絡(luò)中所有中所有設(shè)備設(shè)備的的協(xié)議棧規(guī)協(xié)議棧規(guī)范必范必須須一一致)。致)。 v ZigBeeZigBee聯(lián)聯(lián)盟盟為為ZigBeeZigBee協(xié)議棧協(xié)議棧20072007定定義義了了2 2個(gè)規(guī)個(gè)規(guī)范:范:ZigBeeZigBee和和ZigBee PROZigBee PRO。所有的。所有的設(shè)備設(shè)備只要遵循只要遵循該規(guī)該規(guī)范,即使在不同范,即使在不同廠廠商商買買的不同的不同設(shè)備設(shè)備同同樣樣可以形成可以形成網(wǎng)絡(luò)網(wǎng)絡(luò)。v ZigBeeZigBee和和Zi

24、gBee PROZigBee PRO之之間間最主要的特性差最主要的特性差異異就是就是對對高高級(jí)別級(jí)別安全性的支持。高安全性的支持。高級(jí)別級(jí)別安全性提供了一安全性提供了一個(gè)個(gè)在點(diǎn)在點(diǎn)對對點(diǎn)點(diǎn)連連接之接之間間建立建立鏈鏈路密匙的機(jī)制,路密匙的機(jī)制,并并且且當(dāng)網(wǎng)絡(luò)設(shè)備當(dāng)網(wǎng)絡(luò)設(shè)備在在應(yīng)應(yīng)用用層層無法得到信無法得到信任任時(shí)時(shí)增加了更多的安全性。像增加了更多的安全性。像許許多多PROPRO特性那特性那樣樣,高,高級(jí)級(jí)安全安全特性特性對對于某些于某些應(yīng)應(yīng)用而言非常有用,但在有效利用用而言非常有用,但在有效利用寶貴節(jié)寶貴節(jié)點(diǎn)空點(diǎn)空間間方面卻付出很大代價(jià)。方面卻付出很大代價(jià)。 21 8.2 Sample App

25、lication8.2 Sample Application工程工程工程路徑:C:Texas InstrumentsZ-Stack-CC2530-2.5.0ProjectZ-StackSamplesCC2530DBSampleApp.ewp實(shí)際應(yīng)用時(shí),創(chuàng)建工程的路徑不要層次太多,否則有可能打不開,或者運(yùn)行速度很慢22 8.2.1 Z-Stack8.2.1 Z-Stack目目錄結(jié)構(gòu)錄結(jié)構(gòu) v APPAPP(Application ProgrammingApplication Programming):應(yīng)應(yīng)用用層層目目錄錄,這這是用是用戶創(chuàng)戶創(chuàng)建各建各種種不同工程的不同工程的區(qū)區(qū)域,在域,在這個(gè)這

26、個(gè)目目錄錄中包含了中包含了應(yīng)應(yīng)用用層層的的內(nèi)內(nèi)容和容和這個(gè)項(xiàng)這個(gè)項(xiàng)目的主要目的主要內(nèi)內(nèi)容。容。v HALHAL(Hardware (H/W) Abstraction LayerHardware (H/W) Abstraction Layer):硬件:硬件層層目目錄錄,包含有,包含有與與硬件相硬件相關(guān)關(guān)的配置和的配置和驅(qū)動(dòng)驅(qū)動(dòng)及操作函及操作函數(shù)數(shù)。v MACMAC:MAC MAC 層層目目錄錄,包含了,包含了MAC MAC 層層的的參數(shù)參數(shù)配置文件及其配置文件及其MAC MAC 的的LIB LIB 庫庫的函的函數(shù)數(shù)接口文件。接口文件。v MTMT(Monitor TestMonitor Test

27、):實(shí)現(xiàn)實(shí)現(xiàn)通通過過串口可控各串口可控各層層,于各,于各層進(jìn)層進(jìn)行行直接交互。直接交互。v NWKNWK(ZigBee Network LayerZigBee Network Layer):網(wǎng)絡(luò)層網(wǎng)絡(luò)層目目錄錄,含,含網(wǎng)絡(luò)層網(wǎng)絡(luò)層配配置置參數(shù)參數(shù)文件及文件及網(wǎng)絡(luò)層庫網(wǎng)絡(luò)層庫的函的函數(shù)數(shù)接口文件接口文件23 8.2.1 Z-Stack8.2.1 Z-Stack目目錄結(jié)構(gòu)錄結(jié)構(gòu)v OSALOSAL(Operating System (OS) Abstraction LayerOperating System (OS) Abstraction Layer):協(xié)協(xié)議棧議棧的操作系的操作系統(tǒng)統(tǒng)。v Pr

28、ofileProfile:AF AF 層層目目錄錄,包含,包含AF AF 層處層處理函理函數(shù)數(shù)文件。文件。v SecuritySecurity:安全:安全層層目目錄錄,安全,安全層處層處理函理函數(shù)數(shù),比如加密函,比如加密函數(shù)數(shù)等等v ServicesServices:地址:地址處處理函理函數(shù)數(shù)目目錄錄,包括著地址模式的定,包括著地址模式的定義義及地及地址址處處理函理函數(shù)數(shù)v ToolsTools:工程配置目:工程配置目錄錄,包括空,包括空間劃間劃分及分及Z-Stack Z-Stack 相相關(guān)關(guān)配置配置信息。信息。v ZDOZDO(ZigBee Device ObjectsZigBee Devi

29、ce Objects):ZDO ZDO 目目錄錄。v ZMacZMac: MAC MAC 層層目目錄錄,包括,包括MAC MAC 層參數(shù)層參數(shù)配置及配置及MAC MAC 層層LIB LIB 庫庫函函數(shù)數(shù)回回調(diào)處調(diào)處理函理函數(shù)數(shù)。v ZMainZMain:主函:主函數(shù)數(shù)目目錄錄,包括入口函,包括入口函數(shù)數(shù)及硬件配置文件。及硬件配置文件。v OutputOutput:輸輸出文件目出文件目錄錄,這個(gè)這個(gè)IAR IAR 自自動(dòng)動(dòng)生成的。生成的。 24 8.2.2 Sample Application8.2.2 Sample Application工程工程概況概況 v 工程中的每工程中的每個(gè)設(shè)備個(gè)設(shè)備都

30、可以都可以發(fā)發(fā)送和接收送和接收兩種兩種信息:信息:(1 1)周期信息)周期信息v 設(shè)備設(shè)備加入加入網(wǎng)絡(luò)網(wǎng)絡(luò)后,每隔后,每隔5s5s發(fā)發(fā)送一送一個(gè)個(gè)周期信息,周期信息,該該信息的信息的數(shù)數(shù)據(jù)據(jù)載載荷荷為發(fā)為發(fā)送信息的次送信息的次數(shù)數(shù)(2 2)閃爍閃爍信息信息v 按下按下SW1SW1發(fā)發(fā)送一送一個(gè)個(gè)控制控制LEDLED燈燈閃爍閃爍的廣播信息,的廣播信息,該該廣播信廣播信息只息只針對組針對組1 1內(nèi)內(nèi)的所有的所有設(shè)備設(shè)備。v 所有所有設(shè)備設(shè)備初始化后都被加入初始化后都被加入組組1 1,所以,所以網(wǎng)絡(luò)網(wǎng)絡(luò)一旦建立完成一旦建立完成便可便可執(zhí)執(zhí)行行LEDLED閃爍閃爍v 按下按下SW2SW2退出退出組組1

31、 1,不再接收,不再接收來來自自組組1 1的消息的消息v 再次按下再次按下SW2SW2又可以加入又可以加入組組1 1,再次接收,再次接收來來自自組組1 1的消息的消息25 8.2.3 Sample Application8.2.3 Sample Application工程初始化工程初始化與與事件事件處處理理v Z-StackZ-Stack協(xié)議棧協(xié)議棧的核心是事件的的核心是事件的產(chǎn)產(chǎn)生和事件的生和事件的處處理理v Z-StackZ-Stack協(xié)議棧協(xié)議棧各各層層的初始化是事件的初始化是事件處處理的前提理的前提26 8.2.3 Sample Application8.2.3 Sample Appl

32、ication初始化函初始化函數(shù)數(shù)void SampleApp_Init( uint8 task_id )void SampleApp_Init( uint8 task_id ) SampleApp_TaskID = task_id; SampleApp_TaskID = task_id;/ / 通通過參數(shù)過參數(shù)的的傳遞為傳遞為每一每一層層分分發(fā)發(fā)任任務(wù)務(wù)IDID SampleApp_NwkState = DEV_INIT; SampleApp_NwkState = DEV_INIT; SampleApp_TransID = 0; SampleApp_TransID = 0;#if defin

33、ed (BUILD_ALL_DEVICES)#if defined (BUILD_ALL_DEVICES)/BUILD_ALL_DEVICES /BUILD_ALL_DEVICES 是一是一個(gè)編譯選項(xiàng)個(gè)編譯選項(xiàng) if ( readCoordinatorJumper() ) if ( readCoordinatorJumper() )/ / 如果如果檢測檢測到跳到跳線線,按照,按照協(xié)調(diào)協(xié)調(diào)器器啟動(dòng)啟動(dòng) zgDeviceLogicalType = ZG_DEVICETYPE_COORDINATOR; zgDeviceLogicalType = ZG_DEVICETYPE_COORDINATOR;

34、else else/ / 否否則則按路由器按路由器啟動(dòng)啟動(dòng) zgDeviceLogicalType = ZG_DEVICETYPE_ROUTER; zgDeviceLogicalType = ZG_DEVICETYPE_ROUTER;#endif#endif#if defined ( HOLD_AUTO_START ) #if defined ( HOLD_AUTO_START ) / / 如果定如果定義義了了HOLD_AUTO_START HOLD_AUTO_START 編譯選項(xiàng)編譯選項(xiàng) ZDOInitDevice(0); ZDOInitDevice(0);/ / 執(zhí)執(zhí)行此函行此函數(shù)數(shù)#en

35、dif#endif/ / 設(shè)設(shè)置周期信息的目置周期信息的目標(biāo)標(biāo)地址,此地址地址,此地址為為廣播地址廣播地址0 xFFFF0 xFFFF SampleApp_Periodic_DstAddr.addrMode = (afAddrMode_t)AddrBroadcast; SampleApp_Periodic_DstAddr.addrMode = (afAddrMode_t)AddrBroadcast; SampleApp_Periodic_DstAddr.endPoint = SAMPLEAPP_ENDPOINT; SampleApp_Periodic_DstAddr.endPoint = SA

36、MPLEAPP_ENDPOINT; SampleApp_Periodic_DstAddr.addr.shortAddr = 0 xFFFF; SampleApp_Periodic_DstAddr.addr.shortAddr = 0 xFFFF;27 8.2.3 Sample Application8.2.3 Sample Application初始化函初始化函數(shù)數(shù)/ / 設(shè)設(shè)置置閃爍閃爍信息的地址,此地址信息的地址,此地址為組為組1 1的地址的地址SampleApp_Flash_DstAddr.addrMode = (afAddrMode_t)afAddrGroup;SampleApp_Fl

37、ash_DstAddr.addrMode = (afAddrMode_t)afAddrGroup;SampleApp_Flash_DstAddr.endPoint = SAMPLEAPP_ENDPOINT;SampleApp_Flash_DstAddr.endPoint = SAMPLEAPP_ENDPOINT;SampleApp_Flash_DstAddr.addr.shortAddr = SAMPLEAPP_FLASH_GROUP;SampleApp_Flash_DstAddr.addr.shortAddr = SAMPLEAPP_FLASH_GROUP;/ / 對對端點(diǎn)端點(diǎn) endpoi

38、nt endpoint 進(jìn)進(jìn)行描述行描述SampleApp_epDesc.endPoint = SAMPLEAPP_ENDPOINT;SampleApp_epDesc.endPoint = SAMPLEAPP_ENDPOINT;SampleApp_epDesc.task_id = &SampleApp_TaskID;SampleApp_epDesc.task_id = &SampleApp_TaskID;SampleApp_epDesc.simpleDesc = (SimpleDescriptionFormat_t SampleApp_epDesc.simpleDesc = (SimpleDe

39、scriptionFormat_t * *)&SampleApp_SimpleDesc;)&SampleApp_SimpleDesc;SampleApp_epDesc.latencyReq = noLatencyReqs; SampleApp_epDesc.latencyReq = noLatencyReqs; afRegister( &SampleApp_epDesc ); afRegister( &SampleApp_epDesc ); / / 注注冊冊端點(diǎn)描述符端點(diǎn)描述符/ / 注注冊冊按按鍵鍵事件,按事件,按鍵鍵事件由事件由應(yīng)應(yīng)用用層處層處理理RegisterForKeys( Samp

40、leApp_TaskID );RegisterForKeys( SampleApp_TaskID );/ / 默默認(rèn)認(rèn)情情況況,所有,所有設(shè)備設(shè)備都加入都加入組組1 1SampleApp_Group.ID = 0 x0001;SampleApp_Group.ID = 0 x0001;/ / 設(shè)設(shè)定定組組IDIDosal_memcpy( SampleApp_G, “Group 1”, 7 );osal_memcpy( SampleApp_G, “Group 1”, 7 );/ / 設(shè)設(shè)定定組組名名aps_AddGroup( SAMPLEAPP_ENDPOINT

41、, &SampleApp_Group );aps_AddGroup( SAMPLEAPP_ENDPOINT, &SampleApp_Group );/ / 加入加入組組#if defined ( LCD_SUPPORTED ) #if defined ( LCD_SUPPORTED ) / / 如果如果編譯編譯了了LCD_SUPPORTEDLCD_SUPPORTED,執(zhí)執(zhí)行液晶行液晶顯顯示示 HalLcdWriteString( SampleApp, HAL_LCD_LINE_1 ); HalLcdWriteString( SampleApp, HAL_LCD_LINE_1 );#endif#

42、endif 28 8.2.4 Sample Application8.2.4 Sample Application事件事件處處理函理函數(shù)數(shù)uint16 SampleApp_ProcessEvent( uint8 task_id, uint16 events )uint16 SampleApp_ProcessEvent( uint8 task_id, uint16 events ) afIncomingMSGPacket_t afIncomingMSGPacket_t * *MSGpkt;MSGpkt; (void)task_id; (void)task_id; / Intentionally

43、unreferenced parameter/ Intentionally unreferenced parameter if ( events & SYS_EVENT_MSG ) if ( events & SYS_EVENT_MSG )/如果有事件如果有事件發(fā)發(fā)生生 / / 從從消息列表中消息列表中獲獲取取SampleApp_TaskIDSampleApp_TaskID相相關(guān)關(guān)的消息的消息 MSGpkt = (afIncomingMSGPacket_t MSGpkt = (afIncomingMSGPacket_t * *)osal_msg_receive( SampleApp_TaskI

44、D );)osal_msg_receive( SampleApp_TaskID ); while ( MSGpkt ) while ( MSGpkt ) switch ( MSGpkt-hdr.event )switch ( MSGpkt-hdr.event )/ / 根據(jù)不同的事件,根據(jù)不同的事件,執(zhí)執(zhí)行相行相應(yīng)應(yīng)的程序分支的程序分支 case KEY_CHANGE:case KEY_CHANGE:/ / 按按鍵鍵事件事件 SampleApp_HandleKeys( (keyChange_t SampleApp_HandleKeys( (keyChange_t * *)MSGpkt)-sta

45、te, (keyChange_t )MSGpkt)-state, (keyChange_t * *)MSGpkt)-keys );)MSGpkt)-keys ); break; break; case AF_INCOMING_MSG_CMD:case AF_INCOMING_MSG_CMD:/ OTA/ OTA消息事件消息事件 SampleApp_MessageMSGCB( MSGpkt ); SampleApp_MessageMSGCB( MSGpkt ); break; break; case ZDO_STATE_CHANGE:case ZDO_STATE_CHANGE:/ / 設(shè)備狀態(tài)設(shè)

46、備狀態(tài)改改變變事件事件 SampleApp_NwkState = (devStates_t)(MSGpkt-hdr.status); SampleApp_NwkState = (devStates_t)(MSGpkt-hdr.status); if ( (SampleApp_NwkState = DEV_ZB_COORD) | (SampleApp_NwkState = DEV_ROUTER) if ( (SampleApp_NwkState = DEV_ZB_COORD) | (SampleApp_NwkState = DEV_ROUTER) | (SampleApp_NwkState =

47、DEV_END_DEVICE) ) | (SampleApp_NwkState = DEV_END_DEVICE) ) osal_start_timerEx( SampleApp_TaskID, SAMPLEAPP_SEND_PERIODIC_MSG_EVT, osal_start_timerEx( SampleApp_TaskID, SAMPLEAPP_SEND_PERIODIC_MSG_EVT, SAMPLEAPP_SEND_PERIODIC_MSG_TIMEOUT ); SAMPLEAPP_SEND_PERIODIC_MSG_TIMEOUT ); else / else / 設(shè)備設(shè)備不在

48、不在網(wǎng)絡(luò)網(wǎng)絡(luò)中中 break; break; default:default: break; break; 29 8.2.4 Sample Application8.2.4 Sample Application事件事件處處理函理函數(shù)數(shù) osal_msg_deallocate( (uint8 osal_msg_deallocate( (uint8 * *)MSGpkt );)MSGpkt );/ / 釋釋放放內(nèi)內(nèi)存存 MSGpkt = (afIncomingMSGPacket_t MSGpkt = (afIncomingMSGPacket_t * *)osal_msg_receive( Samp

49、leApp_TaskID );)osal_msg_receive( SampleApp_TaskID ); return (events SYS_EVENT_MSG); return (events SYS_EVENT_MSG); / / 返回未返回未處處理事件理事件 if ( events & SAMPLEAPP_SEND_PERIODIC_MSG_EVT )if ( events & SAMPLEAPP_SEND_PERIODIC_MSG_EVT )/ / 周期信息事件周期信息事件 SampleApp_SendPeriodicMessage(); SampleApp_SendPeriodi

50、cMessage();/ / 發(fā)發(fā)送周期信息送周期信息 / Setup to send message again in normal period (+ a little jitter)/ Setup to send message again in normal period (+ a little jitter) osal_start_timerEx( SampleApp_TaskID, SAMPLEAPP_SEND_PERIODIC_MSG_EVT, osal_start_timerEx( SampleApp_TaskID, SAMPLEAPP_SEND_PERIODIC_MSG_EV

51、T, (SAMPLEAPP_SEND_PERIODIC_MSG_TIMEOUT + (osal_rand() & 0 x00FF) ); (SAMPLEAPP_SEND_PERIODIC_MSG_TIMEOUT + (osal_rand() & 0 x00FF) ); return (events SAMPLEAPP_SEND_PERIODIC_MSG_EVT); return (events SAMPLEAPP_SEND_PERIODIC_MSG_EVT); / / 返回未返回未處處理事件理事件 return 0; return 0; / / 放棄未知事件放棄未知事件 30 8.2.5 Sa

52、mple Application8.2.5 Sample Application工程流程工程流程1.1.周期信息周期信息 在在Sample ApplicationSample Application工程中,工程中,當(dāng)設(shè)備當(dāng)設(shè)備成功成功啟動(dòng)啟動(dòng)最最終觸發(fā)終觸發(fā)了事件了事件ZDO_STATE_CHANGEZDO_STATE_CHANGE,此事件此事件會(huì)調(diào)會(huì)調(diào)用用Sample ApplicationSample Application工程工程應(yīng)應(yīng)用用層層的事件的事件處處理函理函數(shù)數(shù)SampleApp_ProcessEvent()SampleApp_ProcessEvent()進(jìn)進(jìn)行行處處理。理。ca

53、se ZDO_STATE_CHANGE:case ZDO_STATE_CHANGE:/ / 設(shè)備狀態(tài)設(shè)備狀態(tài)改改變變事件事件 SampleApp_NwkState = (devStates_t)(MSGpkt-hdr.status); SampleApp_NwkState = (devStates_t)(MSGpkt-hdr.status); if ( (SampleApp_NwkState = DEV_ZB_COORD) if ( (SampleApp_NwkState = DEV_ZB_COORD) | (SampleApp_NwkState = DEV_ROUTER) | (Sample

54、App_NwkState = DEV_ROUTER) | (SampleApp_NwkState = DEV_END_DEVICE) ) | (SampleApp_NwkState = DEV_END_DEVICE) ) osal_start_timerEx( SampleApp_TaskID, osal_start_timerEx( SampleApp_TaskID, SAMPLEAPP_SEND_PERIODIC_MSG_EVT, SAMPLEAPP_SEND_PERIODIC_MSG_EVT, SAMPLEAPP_SEND_PERIODIC_MSG_TIMEOUT ); SAMPLEAP

55、P_SEND_PERIODIC_MSG_TIMEOUT ); else else / / 設(shè)備設(shè)備不在不在網(wǎng)絡(luò)網(wǎng)絡(luò)中中 break; break;31 代代碼碼分析分析下述下述條條件件語語句:句:if ( (SampleApp_NwkState = DEV_ZB_COORD) if ( (SampleApp_NwkState = DEV_ZB_COORD) | (SampleApp_NwkState = | (SampleApp_NwkState = DEV_ROUTER) DEV_ROUTER) | (SampleApp_NwkState = DEV_END_DEVICE) | (Sampl

56、eApp_NwkState = DEV_END_DEVICE) ) )v 如果如果設(shè)備設(shè)備的的網(wǎng)絡(luò)狀態(tài)為網(wǎng)絡(luò)狀態(tài)為下列之一:下列之一:vDEV_ZB_COORDDEV_ZB_COORD/ / 協(xié)調(diào)協(xié)調(diào)器器vDEV_ROUTER DEV_ROUTER / / 路由器路由器 vDEV_END_DEVICEDEV_END_DEVICE/ / 終終端端設(shè)備設(shè)備v 則則表明表明設(shè)備啟動(dòng)設(shè)備啟動(dòng)成功成功v 網(wǎng)絡(luò)狀態(tài)網(wǎng)絡(luò)狀態(tài)在在設(shè)備啟動(dòng)時(shí)設(shè)備啟動(dòng)時(shí)被被設(shè)設(shè)定定v 如果如果設(shè)備啟動(dòng)設(shè)備啟動(dòng)成功,成功,則調(diào)則調(diào)用函用函數(shù)數(shù)osal_start_timerEx()osal_start_timerEx()進(jìn)進(jìn)行行處

57、處理理32 處處理理設(shè)備網(wǎng)終狀態(tài)設(shè)備網(wǎng)終狀態(tài)的代的代碼碼如下:如下:osal_start_timerEx( SampleApp_TaskID, osal_start_timerEx( SampleApp_TaskID, SAMPLEAPP_SEND_PERIODIC_MSG_EVT, SAMPLEAPP_SEND_PERIODIC_MSG_EVT, SAMPLEAPP_SEND_PERIODIC_MSG_TIMEOUT ); SAMPLEAPP_SEND_PERIODIC_MSG_TIMEOUT );v 參數(shù)說參數(shù)說明:明:vSampleApp_TaskIDSampleApp_TaskID任任

58、務(wù)務(wù)IDIDvSAMPLEAPP_SEND_PERIODIC_MSG_EVTSAMPLEAPP_SEND_PERIODIC_MSG_EVT定定時(shí)觸發(fā)時(shí)觸發(fā)事件事件 vSAMPLEAPP_SEND_PERIODIC_MSG_TIMEOUTSAMPLEAPP_SEND_PERIODIC_MSG_TIMEOUT定定時(shí)長時(shí)長度度33 代代碼碼分析分析執(zhí)執(zhí)行行switchswitch分支程序分支程序過過后,仍后,仍將執(zhí)將執(zhí)行下述代行下述代碼碼:if ( events & SAMPLEAPP_SEND_PERIODIC_MSG_EVT )if ( events & SAMPLEAPP_SEND_PERIO

59、DIC_MSG_EVT )/ / 周期信息事件周期信息事件 SampleApp_SendPeriodicMessage(); SampleApp_SendPeriodicMessage();/ / 發(fā)發(fā)送周期信息送周期信息 / Setup to send message again in normal period (+ a little jitter)/ Setup to send message again in normal period (+ a little jitter) osal_start_timerEx( SampleApp_TaskID, osal_start_timerE

60、x( SampleApp_TaskID, SAMPLEAPP_SEND_PERIODIC_MSG_EVT,SAMPLEAPP_SEND_PERIODIC_MSG_EVT,(SAMPLEAPP_SEND_PERIODIC_MSG_TIMEOUT + (osal_rand() & 0 x00FF) );(SAMPLEAPP_SEND_PERIODIC_MSG_TIMEOUT + (osal_rand() & 0 x00FF) );return (events SAMPLEAPP_SEND_PERIODIC_MSG_EVT);return (events SAMPLEAPP_SEND_PERIODI

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論