ZigBee2006協(xié)議棧的 無線傳感執(zhí)行網(wǎng)絡(luò)構(gòu)建
OSAL層初始化時,通過osalAddTasks函數(shù)提供任務(wù)列表,向?qū)崟r操作系統(tǒng)中添加用戶所需要的任務(wù)。在該函數(shù)中,TI公司已經(jīng)添加了一些任務(wù),如硬件應(yīng)用層初始化及處理函數(shù)、網(wǎng)絡(luò)層初始化及處理函數(shù)、應(yīng)用層初始化及處理函數(shù)等。在該函數(shù)中添加自己的任務(wù),添加任務(wù)函數(shù)如下: osalTaskAdd(CSCE_Init,CSCE_ProcessEvent,OSAL_TASK_PRIORI-TYLOW);
osalTaskAdd函數(shù)在OSAL層中的OSAL_Task.C文件中定義,其作用是添加一個任務(wù)到任務(wù)列表。其中,第1個參數(shù)CSCE_Init為用戶任務(wù)的初始化函數(shù)的函數(shù)名,第2個參數(shù)CSCE_ProcessEvent為用戶任務(wù)的處理函數(shù)的函數(shù)名,第3個參數(shù) OSAL_TASK_PRlORITY_LOW為用戶任務(wù)的優(yōu)先級。
任務(wù)初始化函數(shù)CSCE_Init和任務(wù)處理函數(shù)CSCE_ProcessEvent都需要遵循ZigBee2006協(xié)議棧的格式。其中,CSCE_Init函數(shù)和CSCE_ProcessEvent函數(shù)需要在應(yīng)用層頭文件SampleApp.h中進行聲明。
CSCE_Init函數(shù)有一個參數(shù)task_id,該參數(shù)為任務(wù)ID,具體值由OSAL進行分配。CSCE_ProcessEvent函數(shù)有2個參數(shù):第 1個參數(shù)與CSCE_Init函數(shù)相同,為任務(wù)ID;第2個參數(shù)events為需要處理的事件,它是一個16位的二進制數(shù),每一位代表一個事件。
利用OSAL層進行任務(wù)設(shè)計時,必須保留系統(tǒng)任務(wù)事件SYS_EVENT_MSG(0x8000),該事件為強制事件。進行任務(wù)處理時,首先要對系統(tǒng)任務(wù)事件是否發(fā)生進行判斷,任務(wù)處理流程如圖5所示。由于ZigBee2006協(xié)議棧為全功能協(xié)議棧,不需要對IEEE 802.15.4和ZigBee規(guī)范進行全面的了解,只需要在應(yīng)用層進行一些設(shè)計和改動,即可實現(xiàn)數(shù)據(jù)的發(fā)送、接收以及網(wǎng)絡(luò)組建功能。在終端節(jié)點的 CSCE_ProcessEvent函數(shù)的上電初始化處理部分,加入物理地址和短地址提取函數(shù),然后調(diào)用發(fā)送函數(shù)將物理地址向協(xié)調(diào)器發(fā)送。協(xié)議棧中的物理地址獲取函數(shù)為NLME_GetExtAddr(),其返回結(jié)果為一個指向節(jié)點的64位IEEE地址的指針。短地址的獲取函數(shù)為 NLME_GetShortAddr(),其返回結(jié)果為一個16位的無符號整型數(shù)據(jù)。
數(shù)據(jù)發(fā)送函數(shù)在ZigBee2006規(guī)范的原語中已經(jīng)規(guī)定了其參數(shù)的順序及意義。具體到TI/Chipcon公司所提供的ZigBee2006協(xié)議棧中,該函數(shù)為AF_DataRequest,其具體形式如下:
在協(xié)調(diào)器端和路由器(或終端節(jié)點)的CSCE_Pro-cessEvent函數(shù)中接收到數(shù)據(jù)部分(即CSCE_MessageMS-GCB函數(shù))中對數(shù)據(jù)進行處理,將所接收到的數(shù)據(jù)(即物理地址和短地址)通過串口發(fā)送到計算機端,進行顯示。
ZigBee2006協(xié)議棧中設(shè)計了串口接收處理函數(shù):
該函數(shù)在MT目錄的SPIMgr.C中。實驗中,在協(xié)調(diào)器端調(diào)用該函數(shù),即可從PC機端接收數(shù)據(jù)并進行相應(yīng)的處理。
評論