1. 程式人生 > >zigbee協議棧學習(三)

zigbee協議棧學習(三)

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow

也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!

               

這幾章我們主要講下思路和基本概念,在下一章中將具體分析程式碼。


下面的程式碼是一個裝置怎樣加入到一個 ID為1 的組當中:
aps_Group_t group; 
// Assign yourself to group 1 
group.ID = 0x0001; 
group.name[0] = 0; // This could be a human readable string 
aps_AddGroup( SAMPLEAPP_ENDPOINT, &group ); 


NLME_GetShortAddr()——返回本裝置的 16 位網路地址
NLME_GetExtAddr()——  返回本裝置的 64 位擴充套件地址
NLME_GetCoordShortAddr()——返回本裝置的父親裝置的 16 位網路地址
NLME_GetCoordExtAddr()——  返回本裝置的父親裝置的 64 位擴充套件地址


要實現繫結操作,端點必須向協調器傳送繫結請求,協調器在有限的時間間隔內接收到兩
個端點的繫結請求後,便通過建立端點之間的繫結表在這兩個不同的端點之間形成了一個邏輯
鏈路。因此,在繫結後的兩個端點之間進行訊息傳送的過程屬於訊息的間接傳送。其中一個端
點首先會將資訊傳送到 ZigBee 協調器中,ZigBee 協調器在接收到訊息後會通過查詢繫結表,
將訊息傳送到與這個端點相繫結的所有端點中,從而實現了繫結端點之間的通訊


ZigBee 協議棧的實時性要求並不高,因此在設計任務排程程式時,OSAL 只採用了輪詢任
務排程佇列的方法來進行任務排程管理。 


設定事件發生標誌 
當協議棧中有任何事件發生時,我們可以通過設臵 event_flag 來標記有事件發生,以便主
迴圈函式能夠及時加以處理。其函式說明如下: 
uint8 osal_set_event( uint8 task_id, uint16 event_flag ) 


時間管理
對事件進行時間管理, OSAL 也採用了連結串列的方式進行,每當發生一個要被處理的事件後,
就啟動一個邏輯上的定時器,並將此定時器新增到連結串列之中。利用硬體定時器作為時間操作的
基本單元。設臵時間操作的最小精度為 lms,每 lms 硬體定時器便產生一個時間中斷,在時間
中斷處理程式中去更新定時器連結串列。每次更新,就將連結串列中的每一項時間計數減 l,如果發現
定時器連結串列中有某一表項時間計數已經減到 0,則將這個定時器從連結串列中刪除,並設臵相應的
事件標誌。這樣任務排程程式便可以根據事件標誌進行相應的事件處理。
uint8 osal_start_timerEx( uint8 taskID, uint16 event_id, uint16 timeout_value ) 


向目標任務傳送訊息的函式
uint8 osal_msg_send( uint8 destination_task, uint8 *msg_ptr ) 
其中引數 destination-task 是目標任務的任務號,引數指標 msg_ptr 指向要被髮送的訊息,引數len為訊息的長度。 


訊息提取函式
uint8 *osal_msg_receive( uint8 task_id ) //這個函式返回一個指向所需提取資訊的指標

           

給我老師的人工智慧教程打call!http://blog.csdn.net/jiangjunshow

這裡寫圖片描述