码迷,mamicode.com
首页 > 其他好文 > 详细

Zigbee协议栈是怎样分别执行协调器、路由器、终端的任务的?

时间:2014-10-28 23:39:32      阅读:440      评论:0      收藏:0      [点我收藏+]

标签:style   blog   io   color   os   ar   sp   div   on   

  这个问题虽然简单,却困扰了差不多一个星期,归根结底还是自己对协议栈的不熟悉。

  废话不多说!

  假如组网后,协调器需要执行的任务是:组播,终端要执行的任务是:单播。那协议栈是怎么做到协调器只执行组播的任务,而不知执行单播的任务,终端又是怎样只执行单播的任务而不执行组播的任务呢?

  下面是官方给出的代码

 1         // Received whenever the device changes state in the network
 2         case ZDO_STATE_CHANGE://网络状态发生改变
 3           SampleApp_NwkState = (devStates_t)(MSGpkt->hdr.status);//把含有某部分网络发生改变的数值赋值给变量
 4           if ( (SampleApp_NwkState == DEV_ZB_COORD)     //这里就是困扰了我很久的问题所在,不明白为什么要用“或”
 5               || (SampleApp_NwkState == DEV_ROUTER)      //用“或”的话不是无法区分协调器、路由器、终端各自的
 6               || (SampleApp_NwkState == DEV_END_DEVICE) )//任务了吗?还用了else,就更难理解了(就我而言)。
 7           {
 8             // Start sending the periodic message in a regular interval.
 9             osal_start_timerEx( SampleApp_TaskID,
10                               SAMPLEAPP_SEND_PERIODIC_MSG_EVT,
11                               SAMPLEAPP_SEND_PERIODIC_MSG_TIMEOUT );
12           }
13           else
14           {
15             // Device is no longer in the network
16           }
17           break;

  自作主张修改的代码

 1         // Received whenever the device changes state in the network
 2         case ZDO_STATE_CHANGE:
 3           SampleApp_NwkState = (devStates_t)(MSGpkt->hdr.status);
 4           
 5           //如果发生改变的是终端,则执行终端任务
 6           if (SampleApp_NwkState == DEV_END_DEVICE)
 7           {
 8             // Start sending the periodic message in a regular interval.//执行终端任务
 9             osal_start_timerEx( SampleApp_TaskID,
10                               SAMPLEAPP_SEND_PERIODIC_MSG_EVT,   //定时一段时间后发出消息
11                               SAMPLEAPP_SEND_PERIODIC_MSG_TIMEOUT );
12           }
13           //如果发生改变的是路由器,则执行路由器任务
14           else if(SampleApp_NwkState == DEV_ROUTER)
15           {
16             //执行路由器任务
17           }
18           //如果发生改变的是协调器,则执行协调器任务
19           else if(SampleApp_NwkState == DEV_ZB_COORD)
20           {
21             //执行协调器任务
22           }
23           else
24           {
25             //error
26           }

 

Zigbee协议栈是怎样分别执行协调器、路由器、终端的任务的?

标签:style   blog   io   color   os   ar   sp   div   on   

原文地址:http://www.cnblogs.com/vhuichen/p/4058012.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!