- 6
- 0
- 约7.02千字
- 约 21页
- 2018-05-31 发布于河南
- 举报
短距离无线通信第八节
短距离无线通信 第八次课:ZigBee组网 具体实例 实验指导书中高级实验4:SampleApp实验 内容: 按键控制工作组内CC2430模块LED1(绿灯)闪烁的实验,只有模块在工作组内,节点才可以控制此模块的LED闪烁。 周期性发送消息事件 闪烁事件 组的加入与退出 SmartRF Flash Programmer的使用 * 具体内容: 说明:首先启动一个网络协调器,协调器如果建立网络成功后,会在液晶上显示该节点为协调器同时显示网络ID号。然后打开一个终端节点的电源,此时终端节点会自动加入网络。加入网络成功后,终端节点会显示自己的网络地址和父节点的网络地址。节点(路由、终端)加入网络后会自动加入工作组。 终端节点跟协调器、路由器加入同一工作组后,终端节点就可以控制协调器和路由器灯闪烁了,只需按UP键,就可以控制路由器和协调器灯闪烁。同样,按路由器的UP键,也可以控制协调器灯闪烁。协调器和路由器也可以随时退出工作组或加入工作组,当协调器或路由器在工作组内时,按下RIGHT键,就可以退出工作组,反之则加入工作组。协调器或路由器一旦退出工作组,终端节点就无法控制协调器或路由器了。 在上一节我们看到设备上电就会自动启动(Sample Application没有编译HOLD_AUTO_START),当设备启动成功最终触发了事件ZDO_STATE_CHANGE,而此事件会向所有注册过的端点(除ZDO)发送。在Sample Application的初始化代码中SampleApp_epDesc 调用函数afRegister()进行了注册,所有OS会调用Sample Application的处理函数SampleApp_ProcessEvent()进行处理。处理代码如下: 程序代码:case ZDO_STATE_CHANGE:?? SampleApp_NwkState = (devStates_t)(MSGpkt-hdr.status);?? if ( (SampleApp_NwkState == DEV_ZB_COORD)??????|| (SampleApp_NwkState == DEV_ROUTER)??????|| (SampleApp_NwkState == DEV_END_DEVICE) )???? {????????// Start sending the periodic message in a regular interval.????????osal_start_timerEx( SampleApp_TaskID,??????????????????????????????SAMPLEAPP_SEND_PERIODIC_MSG_EVT,??????????????????????????????SAMPLEAPP_SEND_PERIODIC_MSG_TIMEOUT );???? }???? else???? {????????// Device is no longer in the network???? }break; 处理ZDO_STATE_CHANGE:如果设备的网络状态为DEV_ZB_COORD、DEV_ROUTER或者DEV_END_DEVICE表明设备启动成功。网络状态在设备启动时被设定。如果设备启动成功,则调用了函数osal_start_timerEx()定时触发了事件SAMPLEAPP_SEND_PERIODIC_MSG_EVT。该事件的任务ID为SampleApp_TaskID,即该事件还是由Sample Application的处理函数进行处理。定时长度为SAMPLEAPP_SEND_PERIODIC_MSG_TIMEOU(5000mS[SampleApp.h])。 处理代码如下:if ( events SAMPLEAPP_SEND_PERIODIC_MSG_EVT ){?? //发送周期信息?? SampleApp_SendPeriodicMessage();?? //定时再次触发事件SAMPLEAPP_SEND_PERIODIC_MSG_EVT?? osal_start_timerEx( SampleApp_TaskID,SAMPLEAPP_SEND_PERIODIC_MSG_EVT, ????????????????(SAMPLEAPP_SEND_PERIODIC_MSG_TIMEOUT + (osal_rand() 0x00FF)) ); ?? // 返回没有处理完成的事件?? return (events ^ SAMPLEAPP_SEND_PERIODIC_MSG_EVT);} 在处事件SAMPLEAPP_SEND
原创力文档

文档评论(0)