ZigBee ZStack 協議棧學習--架構分析篇
https://blog.csdn.net/zl374216459/article/details/59110230
本文著重分析ZStack(V3.0)的程式架構,只保留最重要的部分,其他部分暫時略過。。。
1.ZStack程式是從main()函式開始的:開啟IAR工程->ZMain資料夾->ZMain.c檔案
main函式包含兩個重要的函式如下:系統初始化函式osal_init_system()和啟動系統函式osal_start_system()
int main( void )
{
……
osal_init_system();
osal_start_system();
……
}
2.系統初始化函式osal_init_system()中包含一個重要函式任務初始化函式osalInitTasks();
uint8 osal_init_system( void )
{
……
osalInitTasks();
……
}
3.任務初始化函式osalInitTasks()中與之相關的三個引數:
tasksEvents:指向事件表首地址的指標
tasksCnt:任務總數
tasksArr[]:任務處理函式的指標陣列
void osalInitTasks( void )
{
a.定義一個tasksEvents指標指向tasksArr[]
b.清空陣列快取區為0
c.從底層到應用層依次呼叫任務初始化函式,並分配taskID,每層+1
}
4.啟動系統函式osal_start_system()中一個死迴圈,重複呼叫osal_run_system()函式
void osal_start_system( void )
{
for(;;)
{
osal_run_system();
}
}
5.osal_run_system()函式先按照自底向上查詢事件表,有任務的事件發生,則呼叫任務處理函式,如APP層有事件發生呼叫zclSampleApp_event_loop()函式處理
void osal_run_system( void )
{
do{
if (tasksEvents[idx]) //自底向上查詢每層是否有事件發生
{
break;
}
} while (++idx < tasksCnt);
if (idx < tasksCnt)
{
events = tasksEvents[idx];
tasksEvents[idx] = 0; //暫時清空事件標誌位
events = (tasksArr[idx])( idx, events );//呼叫任務處理函式進行處理
tasksEvents[idx] |= events; //將未處理完的事件重新置位
}
}
6.在任務處理函式中,基本框架如下:
uint16 zclSampleApp_event_loop( uint8 task_id, uint16 events )
{
if ( events & SYS_EVENT_MSG )//提取系統事件:接收到資料、按鍵狀態改變、網路狀態改變等
{
while ( (MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive( zclSampleApp_TaskID )) )//接收該任務ID對應的訊息佇列中的資料
{
switch ( MSGpkt->hdr.event ){
case ZCL_INCOMING_MSG:
zclSampleApp_ProcessIncomingMsg( (zclIncomingMsg_t *)MSGpkt );
break;
……
default:
break;
}
}
return (events ^ SYS_EVENT_MSG);//處理完成,將事件標誌位清0
}
if ( events & SAMPLEAPP_END_DEVICE_REJOIN_EVT )//提取使用者自定義事件
{
bdb_ZedAttemptRecoverNwk();//事件處理函式
return ( events ^ SAMPLEAPP_END_DEVICE_REJOIN_EVT );//處理完成,清空事件標誌位
}
……
}
相關文章
- Zigbee學習(一)之新建Zstack協議棧工程協議
- ZigBee協議棧Zstack介紹協議
- 【無線通訊篇 | Zstack協議棧】CC2530 Zigbee Zstack協議棧組網專案及詳細講解篇協議
- zstack協議棧協議
- 1、zstack協議棧協議
- Zstack協議棧結構的初步解析協議
- CC2530 ZigBee協議棧 學習心得協議
- [ZigBee] 15、Zigbee協議棧應用(一)——Zigbee協議棧介紹及簡單例子(長文,OSAL及Zigbee入門知識)...協議單例
- 【Zigbee精華教程02】一圖讀懂ZStack協議棧的核心思想與工作機理協議
- zigbee協議棧OSAL執行原理-----個人理解協議
- 【Zigbee技術入門教程-02】一圖讀懂ZStack協議棧的核心思想與工作機理協議
- http協議學習系列(協議詳解篇)HTTP協議
- HTTP協議學習---(三)進階篇HTTP協議
- 計算機網路學習筆記(10) TCP/IP協議棧 之TELNET協議計算機網路筆記TCP協議
- Android 學習筆記架構篇Android筆記架構
- zigbee協議的缺點 zigbee的主要應用領域協議
- Http協議學習(轉)HTTP協議
- 自我學習HTTP協議HTTP協議
- [學習篇] Swoole 協程
- 【學習篇】Swoole 協程
- Raft協議學習筆記Raft協議筆記
- BGP路由協議學習一路由協議
- Raft 協議學習筆記Raft協議筆記
- IP協議學習筆記協議筆記
- 學習筆記 - DNS協議筆記DNS協議
- 分散式架構基石-TCP通訊協議分散式架構TCP協議
- ble學習筆記九----------ble協議棧之OSAL的執行機理筆記協議
- 【雲隱】TI CC2530 Zigbee協議棧開發的七大深坑,歡迎來跨~協議
- codis架構學習架構
- 2(1)UART協議講解、架構設計協議架構
- 使用wireshark學習網路協議協議
- OAuth 2.0 協議學習筆記OAuth協議筆記
- HTTP 協議 學習筆記一HTTP協議筆記
- 【Zigbee精華教程01】Zigbee無線組網技術入門建議與學習路線
- 聯眾升級協議分析 續篇(二) (轉)協議
- 聯眾升級協議分析 續篇(四) (轉)協議
- ESP32藍芽學習--GATT協議學習藍芽協議
- 基於滴滴雲的網路協議棧效能分析工具使用協議