Z Stack OSAL作業系統

2021-10-23 22:20:34 字數 3919 閱讀 7973

zigbee協議棧與zigbee協議

協議是一系列的通訊標準,通訊雙方需要共同按照這一標準進行正常的資料發射和接收。協議棧是協議的具體實現形式,簡單地說就是協議棧是協議和使用者之間的乙個介面。開發人員通過協議棧來使用這個協議。進而實現資料的收發。

zigbee的體系結構由稱為層的各模組組成。每一層為其上層提供特定的服務:即由資料服務實體提供資料傳輸服務;管理實體提供所有的其他管理服務。毎個服務實體懣過相應的服務接入點(sap為其上層提供乙個介面,每個服務接入點通過服務原語來完成所對應的功能, zigbee協議的體系結構如下圖所示:

zigbee基本概念

裝置型別(乙個網路必須最少有乙個協調器,多個路由器和多個終端裝置)

網路結構

上圖是乙個簡單的zigbee網路示意圖,其中紅色節點為coordinator,黃色節點為router,綠色節點為end-device。

協議棧規範

協議棧規範由zigbee聯盟定義指定。在同一網路中的裝置必須符同乙個協議棧規範。

zigbee聯盟為zigbee協議棧2007定義了兩個規範:zigbee個zigbee pro。所有的裝置只要遵守了該規範,即使在不同的廠商買的不同的裝置同樣可以形成網路。

如果開發正改變了規範,它的裝置只能在自己的產品中使用。不能與其他的產品通訊,更改網路之後的規範稱之為「特定網路」規範。

協議棧id號可以通過查詢裝置傳送的beacon幀獲得。在裝置加入網路之前,首先需要確認協議棧規範的id,「特定網路」規範id號為0;zigbee協議棧規範的id號為1;zigbee pro協議的id號為2.協議棧規範的id(stack_proflle_id)在nwk_globals.h中定義:

// nwk_globals.h

// controls various stack parameter settings

#define network_specific 0

#define home_controls 1

#define zigbeepro_profile 2

#define generic_star 3

#define generic_tree 4

#if defined ( zigbeepro )

#define stack_profile_id zigbeepro_profile

#else

#define stack_profile_id home_controls

#endif

// 在fwconfig.cfg檔案定義

/* enable zigbee-pro */

-zigbeepro

拓撲結構

支援星狀、樹(簇)狀和網狀三種網路拓撲結構。

在z-stack中網路拓撲結構定義如下:

// controls the operational mode of network

#define nwk_mode_star 0

#define nwk_mode_tree 1

#define nwk_mode_mesh 2

#if ( stack_profile_id == zigbeepro_profile )

#define max_node_depth 20

#define nwk_mode nwk_mode_mesh // 網狀網路

#define security_mode security_commercial

#if ( secure != 0 )

#define use_nwk_security 1 // true or false

#define security_level 5

#else

#define use_nwk_security 0 // true or false

#define security_level 0

#endif

信標與非信標模式

zigbee網路的工作模式可分為信標(beaeon)和非信標(non-beaeon)兩種模式。

位址定義

zigbee裝置有兩種型別的位址。一種是64位ieee位址,即mac位址,另一種是16位網路位址。

位址分配機制,zigbee 2007 pro使用隨機位址分配機制,對新加入的節點使用隨機位址分配,為保證網路內位址分配不重複,使用其餘的隨機位址再進行分配。當乙個節點加入時,將接收到父節點的的隨機分配位址然後後產生」裝置宣告「(包含分配到的網路位址和ieee位址)傳送至網路中的其餘節點。如果另乙個節點有著同樣的網路位址,則通過路由器廣播「網路狀態-位址衝突」至網路中的所有節點。所有發生網路位址衝突的節點更改自己的網路位址,然後再發起「裝置宣告」檢測新的網路位址是否衝突。

終端裝置不會廣播「位址衝突」,他們的父節點會幫助完成。如果乙個終端裝置發生了」位址衝突「,他們的父節點傳送」重新加入「訊息至終端設裝置,並要求他們更改網路位址,然後終端裝置再發起」裝置宣告「檢測新的網路位址是否衝突。

當接收到「裝置宣告」後,關聯表和繫結表將被更新使用心得網路位址,但是路由表不會被更新。

在每個路由加如網路之前,定址方案需要知道和配是一些引數。

#if ( stack_profile_id == zigbeepro_profile )

uint8 cskiprtrs[1] = ;

uint8 cskipchldrn[1] = ;

這三個引數的值在z-stack中分別由變數cskipchlarn、cskiprtrs、max_node_depth決定。這三個變數可以在nwk中的nwk_globals.c和nwk_globals.h兩個檔案中找到。

定址為了向乙個在zigbee網路中的裝置傳送資料,應用程式通常使用af_datarequest()函式。資料報將要傳送給乙個afaddtype_t(在af.h中定義)型別的目標裝置。

typedef struct

addr;

afaddrmode_t addrmode;

uint8 endpoint;

uint16 panid; // used for the inter_pan feature

} afaddrtype_t;

typedef enum

afaddrmode_t;

因為在zigbee網路中,資料報可以單點傳送(unicast),多點傳送(multicast)或則廣播傳送,所以必須有位址模式引數。乙個單點傳送資料報只傳送給乙個裝置,多點傳送資料報則要傳送一組裝置。二廣播資料則要傳送給網路中的所有節點。裝置

重要裝置位址

應用程式可能需要知道它的裝置位址和父親位址。使用下面的函式獲取裝置位址(在 zstackap中定義)

如何使用zigbee協議棧(一般步驟)

組網:呼叫協議棧的組網函式、加入網路函式,實現網路的建立與節點的加入。

傳送:傳送節點呼叫協議棧的無線資料傳送函式,實現無線資料傳送。

接收:接收節點呼叫協議棧的無線資料接收函式,實現無線資料接收

協議棧工作流程

自己新增的應用任務程式在zstack中的呼叫過程:

作業系統 作業系統介面

介面表現為函式呼叫,由作業系統提供,連線作業系統和應用軟體。出於安全性考慮,應用程式不能直接在記憶體中任意訪問 將核心程式和使用者程式隔離 通過比較訪問資料段cpl和rpl的特權級和當前段dpl的特權級之間的關係 應用程式呼叫庫函式printf printf呼叫庫中的write函式 write將函式...

作業系統(作業系統引論)

方便性 方便使用者進行操作計算機 有效性提高系統資源的利用率 提高系統的吞吐量,加速程式的執行 可擴充性 方便地增添新的模組和功能,以及對原有的功能模組進行修改 開放性能夠遵循世界標準規範 os作為使用者和計算機硬體系統之間的介面 使用者能夠通過作業系統來使用計算機系統 os作為計算機資源的管理者 ...

作業系統 作業系統 一 作業系統概述

好好學習,天天向上本文已收錄至我的github倉庫daydayup 歡迎star 之前一直沒有系統地學過作業系統,感覺自己在平時的學習過程中對於某些概念理解得一塌糊塗,比如中斷 記憶體 程序和執行緒等。所以打算系統的學習一下作業系統。一開始我是在b站看哈工大的李治軍老師講的,但是一上來就開始從彙編 ...