(河南城建學院 計算機與數據科學學院,平頂山 467036)
當前在實現ZigBee Pro標準組成的WSN無線傳感網技術方案中,有TI公司的CC2530+Z-Stack方案,也有ST公司的STM32W108+EmberZnet方案。TI公司的CC2530是基于8051內核,其Z-Stack協議棧被廣泛應用在ZigBee通信設備中,研究其工作原理有著重要意義。
Z-Stack是一款業界領先的商業級協議棧,它把底層(尤其是MAC層)做成lib庫文件封裝起來(不開源),供其它層調用[1]。其中,HAL硬件抽象層、MAC層位于最底層,與硬件相關;NWK網絡層、OSAL操作系統抽象層、APS應用支持子層、AF應用框架層、ZDO ZigBee設備對象以及安全層建立在HAL和MAC層之上,并且完全與硬件無關;整個協議棧的最頂層就是用戶的應用程序層APP。HAL提供各種硬件模塊的驅動,包括定時器Timer、通用I/O口、UART、ADC等應用程序接口API,提供各種服務的擴展集。Z-Stack協議棧基于事件驅動和消息傳遞的機制,協議棧中的每一層都設計了一個事件處理函數,用來處理與這一層操作相關的各種事件,將這些事件處理函數看成是與協議棧每一層相對應的任務,由ZigBee協議棧中OSAL來進行調度管理,這樣不管何時發生了何種事件,都可以通過調度協議棧相應層的事件處理函數/任務來進行處理[2]。
圖1示例解釋了Z-Stack協議棧中main()函數和osal_run_system()函數主循環的執行流程。

圖1 Z-Stack協議棧整體流程
Z-Stack中總共定義了7個按鍵,其中SW1~SW5屬于Joystick的UP上、RT右、DN下、LT左、PUSH/CENTER中間5個按鍵,SW6和SW7屬于2個獨立的按鍵開關,當SW6按下時,相應P0.1引腳為低電平,彈起時靠上拉電阻處于高電平。在Z-Stack源代碼HALinclude目錄下的文件hal_key.h和hal_key.c中有按鍵的定義。……