zigbee協議棧OSAL分析

2021-10-06 00:00:46 字數 1190 閱讀 7844

本文從源程式出發,分享本人學習zigbee協議棧的一些理解,介紹zigbee協議棧osal任務排程及使用者自定義任務的排程處理過程。為了便於抓住本質,理清思路,本文剔除一些無關部分。

程式的入口是zmain.c檔案下的main(),是系統的主流程,核心為 osal_init_system()(初始化作業系統)和osal_start_system()(啟動作業系統)。

void osalinittasks( void )

tasksarr是定義好的事件處理函式表,裡面按照osalinittasks()中任務初始化的順序存放各個任務的事件處理函式,這樣就可以保證各任務與其事件處理函式一致。

const ptaskeventhandlerfn tasksarr = ;
tasksevents與tasksarr關係如下圖。

用tasksevents[idx]事件表記錄任務號為idx的任務發生的事件;

用tasksarr[idx]函式表任務號為idx的任務事件處理函式;

通過任務號idx關聯事件表和函式表;

在osal_start_system中掃瞄tasksevents[idx],找到tasksevents[idx]!=0的任務號idx,並通過 (tasksarr[idx])( idx, events )呼叫tasksarr[idx]中的函式處理該任務的事件;

在事件處理函式中判斷事件型別,如sys_event_msg(系統訊息事件)、使用者自定義事件等。針對sys_event_msg,需先從訊息佇列中獲取本任務的訊息,再判斷該訊息的型別,如:key_change(按鍵事件)、af_incoming_msg_cmd(接收資料事件)、zdo_state_change(網路狀態改變事件)等。

前面有點散,最後總結一下,osal工作原理:

建立tasksarr[idx]函式表,用於記錄任務號為idx的任務事件處理函式;

建立tasksevents[idx]事件表,用於記錄任務號為idx的任務發生的事件;

迴圈掃瞄tasksevents[idx]事件表,找到tasksevents[idx]!=0的任務號idx,並通過 (tasksarr[idx])( idx, events )呼叫tasksarr[idx]中的函式處理該任務的事件。

zigbee協議棧 端點

端點的意義 從應用角度看,通訊的本質就是端點到端點的連線 例如,乙個帶開關元件的裝置與帶乙個或多個燈元件的遠端裝置進行通訊,目的是將這些燈點亮 端點的實現 端點之間的通訊是通過稱之為簇的資料結構實現的。這些簇是應用物件之間共享資訊所需的全部屬性的容器,在特殊應用中使用的簇在模板中有定義。所有端點都使...

ZigBee協議棧解析

zigbee技術是物聯網領域最常用的無線技術之一,如果我們要做基於zigbee技術的物聯網應用,最好對zigbee協議棧有乙個基本的了解。這篇文章對zigbee協議棧做乙個簡單明瞭的介紹。概述本文準備介紹的zigbee協議棧是zigbee2007,也是目前業界最常用的標準版本,對於zigbee協議棧...

ZigBee模組 zigbee協議棧網路管理

zigbee協議棧網路管理 一 補充基礎知識 每個cc2530晶元出廠時候都有乙個全球唯一的32位 mac位址,當裝置連入網路的時候,每個裝置都能獲得由協調器分配的 16位短位址,協調器預設位址 0x0000 很多時候網路就是通過短位址進行管理。二 實驗現象 路由器 裝置終端傳送自己定義的裝置號給協...