您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 国内外标准规范 > 10ZigBee应用开发
1ZigBee应用开发2内容摘要Z-Stack协议栈OSAL初始化流程简析Z-Stack协议栈MT层任务解析SampleApp自组无线网实例解析基于Z-Stack协议栈添加用户应用层任务的方法3Z-Stack协议栈OSAL初始化流程简析4Z-Stack软件层次整个Z-Stack的主要工作流程,大致分为系统启动,驱动初始化,OSAL初始化和启动,进入任务轮循几个阶段。5关中断开始初始化和开发板相关的外设电源电压检查板卡IO初始化HAL驱动初始化NV系统初始化MAC初始化IEEE地址检查初始化NV项目AF初始化OSAL初始化开中断板卡最后初始化设备信息显示系统主循环Z-Stack软件启动流程系统上电后,通过执行Zmain文件夹中ZMain.c的主函数开始系统初始化。当顺利完成上述初始化时,执行osal_start_system()函数开始运行OSAL系统。6OSAL轮询操作系统OSAL(OperatingSystemAbstractionLayer)操作系统抽象层定义了其它模块中的事件的处理机制。它将每一模块内的所有事件放在一个任务中进行处理,任务间的通信通过传递系统消息来完成,这使得协议栈中的事件处理更类似于一个操作系统;同时它还定义了堆内存管理、NV(non-volatile,非可变)存储系统的管理、电源管理、时钟管理等。7OSAL的任务调度OSAL是协议栈的核心,Z-Stack的任何一个子系统都作为OSAL的一个任务。任务调度函数按照优先级检测各个任务是否就绪。如果存在就绪的任务则调用tasksArr[]中相对应的任务处理函数去处理该事件,直到执行完所有就绪的任务。如果任务列表中没有就绪的任务,则可以使处理器进入睡眠状态实现低功耗。8taskEvents[taskCnt]taskEvents[3]……taskEvents[2]taskEvents[1]taskArr[taskCnt]taskArr[3]……taskArr[2]taskArr[1]SampleApp_ProcessEventAPP层任务事件处理函数MT_ProcessEventMT层任务事件处理函数……Hal_ProcessEventHAL层任务事件处理函数nwk_event_loopNWK层任务事件处理函数taskEvents[0]taskArr[0]macEventLoopMAC层任务事件处理函数OSAL操作系统休眠OSAL任务调度流程图9任何OSAL任务必须分为两步:任务初始化分配任务内存空间,和指定唯一的任务ID标识号。任务事件的处理。1.处理任务事件通过创建“ApplicationName”_ProcessEvent()函数处理。2.将创建的任务事件处理函数加入到tasksArr[]数组中。OSAL中有些任务是协议栈运行所必须的,因此在工程中都要加入到任务数组中去(默认)。OSAL的任务10事件(EVENT)类型为uint16,位域表述,其形式为:SYS_EVENT_XXX一个OSAL任务最多定义除系统强制事件外的15个事件。事件中通常待用用于通讯的消息。消息(MSG)由uint8的ID标识,可有256个。OSAL任务中的事件与消息11SYS_EVENT_MSG(0x8000)是强制事件。该事件主要用来发送全局的系统消息,包括以下信息:AF_INCOMING_MSG_CMD:用来指示接收到的AF信息。KEY_CHANGE:用来确认按键动作。ZDO_NEW_DSTADDR:用来指示自动匹配请求。ZDO_STATE_CHANGE:用来指示网络状态的变化。通常我们都是在任务的事件循环中去处理以上事件和消息。OSAL任务中的事件与消息12OSAL任务中的事件与消息13NWK层为更高层提供了如下功能:网络管理地址管理网络参数与功能函数除了管理功能,NWK还提供了应用程序没有的数据服务。应用程序可以通过AF数据接口。AF数据接收:afIncomingData()AF数据发送:AF_DataRequest()网络层重要API14网络管理NLME_NetworkFormationRequest()此函数允许相邻的更高层请求设备组建一个新网络。NLME_NetworkDiscoveryRequest()此函数请求网络层寻找相邻路由器。NLME_JoinRequest()此函数允许相邻的更高层请求设备将自己加入到一个网络中。NLME_ReJoinRequest()使用此函重新加入一个设备已经加入过的网络。网络层重要API15地址管理NLME_GetExtAddr()这个函数将返回指向IEEE设备64地址的指针。NLME_GetShortAddr()这个函数将返回设备的(16位短)网络地址。NLME_GetCoordShortAddr()这个函数将返回设备父节点的(16位短)网络地址。NLME_GetCoordExtAddr()这个函数是将获得设备的父节点设备的IEEE(64位)地址。网络层重要API16AF数据发送网络层重要API17Z-Stack协议栈MT层任务解析18MonitorTestMT模块提供了协议栈与上位机软件交互的接口。它利用串口进行数据的物理传输,并定义了串口数据包的格式,同时定义了数据包的封装、解析与处理方法。MT层相关任务支持的编译选项:MT_TASK、ZTOOL_P1。MT层任务模块概述19MT_TaskInit()MT_UartInit()注册回调函数MT_UartProcessZToolData()串口回调函数osal_msg_send()发送串口数据到MT任务层MT_ProcessIncomingCommand()在MT层任务中处理ZTOOL命令MT_ProcessEvent()MT层任务事件处理函数osal_msg_receive()在MT层中接收串口数据MT_ProcessIncoming在MT层中处理ZTOOL消息MT_UartRegisterTaskID()注册MT层任务ID到MT_UART()中协议栈在接收到上位机串口数据包后,调用串口回调函数将串口数据包转发到MT层任务进行处理。MT层串口数据包处理流程20用户如何自定义协议栈中与上位机串口数据传输协议?串口回调函数的定义:MT层串口数据包处理流程21SampleApp自组无线网实例解析22SampleApp工程是协议栈自带的ZigBee无线网络自启动(组网)样例,该实验实现的功能主要是协调器自启动(组网),节点设备自动入网,之后两者建立无线通讯。无线数据触发方式:周期定时发送信息按键事件触发信息SampleApp工程简介23网络的管理网络的创建、加入、恢复等管理通过ZDO层来调用下层相关服务(网络原语)实现。Z-Stack协议栈中将ZDO层的服务以ZDAPP任务模块来实现。工程中通过大量的条件编译实现对启动流程的控制。SampleApp工程简介24协调器协调器实现自动组建ZigBee网络。配置文件-f$PROJ_DIR$\..\..\..\Tools\CC2530DB\f8wCoord.cfg-f$PROJ_DIR$\..\..\..\Tools\CC2530DB\f8wConfig.cfg预编译选项ZTOOL_P1MT_TASKMT_SYS_FUNCMT_ZDO_FUNCLCD_SUPPORTED=DEBUGSampleApp工程25协调器创建网络流程:SampleApp工程简介Main()osal_init_system()osalInitTasks()ZDApp_Init()ZDOInitDevice()ZDApp_NetworkInit()ZDO_StartDevice()NLME_NetworkFormationRequest()ZDO_NetworkFormationConfirmCB()ZDApp_NetworkStartEvt()ZDO_UpdateNwkStatus()zdoSendStateChangeMsg()osal_msg_send()ZDO_STATE_CHANGESampleApp_ProcessEvent()26路由器路由器实现自动发现并加入ZigBee网络。配置文件-f$PROJ_DIR$\..\..\..\Tools\CC2530DB\f8wRouter.cfg-f$PROJ_DIR$\..\..\..\Tools\CC2530DB\f8wConfig.cfg预编译选项ZTOOL_P1MT_TASKMT_SYS_FUNCMT_ZDO_FUNCLCD_SUPPORTED=DEBUGSampleApp工程27路由器发现加入网络流程:SampleApp工程简介Main()osal_init_system()osalInitTasks()ZDApp_Init()ZDOInitDevice()ZDApp_NetworkInit()ZDO_StartDevice()NLME_NetworkDiscoveryRequestZDO_NetworkDiscoveryConfirmCB()NLME_JoinRequest()osal_msg_send()ZDO_STATE_CHANGESampleApp_ProcessEvent()ZDO_JoinConfirmCB()ZDApp_ProcessNetworkJoin()ZDO_UpdateNwkStatus()28终端节点终端节点实现自动发现并加入ZigBee网络。配置文件-f$PROJ_DIR$\..\..\..\Tools\CC2530DB\f8wEndev.cfg-f$PROJ_DIR$\..\..\..\Tools\CC2530DB\f8wConfig.cfg预编译选项NWK_AUTO_POLLZTOOL_P1MT_TASKMT_SYS_FUNCMT_ZDO_FUNCLCD_SUPPORTED=DEBUGSampleApp工程29终端节点发现加入网络流程:SampleApp工程简介Main()osal_init_system()osalInitTasks()ZDApp_Init()ZDOInitDevice()ZDApp_NetworkInit()ZDO_StartDevice()NLME_NetworkDiscoveryRequestZDO_NetworkDiscoveryConfirmCB()NLME_JoinRequest()osal_msg_send()ZDO_STATE_CHANGESampleApp_ProcessEvent()ZDO_JoinConfirmCB()ZDApp_ProcessNetworkJoin()ZDO_UpdateNwkStatus()30发送periodic信息流程Periodic消息是通过系统定时器并定时广播出去的,因此在SampleApp_ProcessEvent事件处理函数中有如下定时器代码SampleApp工程简介31发送periodic信息流程事件SAMPLEAPP_SEND_PERIODIC_MSG_EVT处理。SampleApp_ProcessEvent()处理该事件处理函数调用SampleApp_SendPeriodicMessage()来发送周期信息。SampleApp工程简介32发送周期消息函数SampleApp工程简介33AF数据的通讯在应用层任务的SampleApp_ProcessEvent事件消息循环中,根据事件类型处理端点间的无线数据消息(AF_INCOMING_MSG_CMD)。SampleApp工程简介34AF数据的通讯消息处理函数SampleApp_MessageMSGCB中,根据簇ID来标识不同的属性(AF数据)并进一步处理。SampleApp工程简介35基于Z-Stack协议栈添加用户应用层任务的方法36如何在应用层添加自己的任务?Z-Stack协议栈以OSAL贯穿始终,用户要添加自己的应用,需要以任务的方式实现。协议栈中已
本文标题:10ZigBee应用开发
链接地址:https://www.777doc.com/doc-3056401 .html