首页 > 代码库 > Zigbee协议栈是怎样分别执行协调器、路由器、终端的任务的?
Zigbee协议栈是怎样分别执行协调器、路由器、终端的任务的?
这个问题虽然简单,却困扰了差不多一个星期,归根结底还是自己对协议栈的不熟悉。
废话不多说!
假如组网后,协调器需要执行的任务是:组播,终端要执行的任务是:单播。那协议栈是怎么做到协调器只执行组播的任务,而不知执行单播的任务,终端又是怎样只执行单播的任务而不执行组播的任务呢?
下面是官方给出的代码
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 else14 {15 // Device is no longer in the network16 }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 else24 {25 //error26 }
Zigbee协议栈是怎样分别执行协调器、路由器、终端的任务的?
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。