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 );//處理完成,清空事件標誌位
}
……
}
相關文章
- 【無線通訊篇 | Zstack協議棧】CC2530 Zigbee Zstack協議棧組網專案及詳細講解篇協議
- zstack協議棧協議
- CC2530 ZigBee協議棧 學習心得協議
- 1、zstack協議棧協議
- 【Zigbee精華教程02】一圖讀懂ZStack協議棧的核心思想與工作機理協議
- zigbee協議棧OSAL執行原理-----個人理解協議
- zigbee協議的缺點 zigbee的主要應用領域協議
- HTTP協議學習---(三)進階篇HTTP協議
- 計算機網路學習筆記(10) TCP/IP協議棧 之TELNET協議計算機網路筆記TCP協議
- Android 學習筆記架構篇Android筆記架構
- 【雲隱】TI CC2530 Zigbee協議棧開發的七大深坑,歡迎來跨~協議
- 【Zigbee精華教程01】Zigbee無線組網技術入門建議與學習路線
- 分散式架構基石-TCP通訊協議分散式架構TCP協議
- Raft協議學習筆記Raft協議筆記
- Raft 協議學習筆記Raft協議筆記
- BGP路由協議學習一路由協議
- 學習筆記 - DNS協議筆記DNS協議
- IP協議學習筆記協議筆記
- 【學習篇】Swoole 協程
- [學習篇] Swoole 協程
- Kubernetes全棧架構師(資源排程上)--學習筆記全棧架構筆記
- Kubernetes全棧架構師(資源排程下)--學習筆記全棧架構筆記
- 2(1)UART協議講解、架構設計協議架構
- codis架構學習架構
- 基於滴滴雲的網路協議棧效能分析工具使用協議
- WireShark——IP協議包分析(Ping分析IP協議包)協議
- 微服務架構學習與思考(05):微服務架構適用場景分析微服務架構
- 使用wireshark學習網路協議協議
- Internet安全協議 學習筆記協議筆記
- Python學習之迭代器協議Python協議
- OAuth 2.0 協議學習筆記OAuth協議筆記
- http協議分析HTTP協議
- ESP32藍芽學習--GATT協議學習藍芽協議
- 五層因特網協議棧協議
- [計算機網路]協議棧計算機網路協議
- 資料結構與演算法分析學習筆記(四) 棧資料結構演算法筆記
- 物聯網時代 跟著Thingsboard學IOT架構-CoAP裝置協議架構協議
- 物聯網時代-跟著Thingsboard學IOT架構-MQTT裝置協議架構MQQT協議