[注:本文源自博客园http://www.cnblogs.com/cherishui/,为尊重劳动者成果,如需转载请保留此行]

以下代码分析基于ZStack-CC2530-2.5.1a,开发环境为 IAR Embedded Workbench for 8051 IDE,版本号为8.30.2.

ZDApp_Init在系统初始化时被调用,主要用来建立网络,注册系统消息和ZDO消息。

   

地址相关函数名称 功能
NLME_GetExtAddr 返回设备IEEE 64位地址的指针
NLME_GetShortAddr 返回设备16位网络地址
NLME_GetCoordShortAddr 返回设备的父节点的16位网络地址(PAN协调器的网络地址总是为0x0000)
NLME_GetCoordExtAddr 返回设备父节点的IEEE 64位地址

ZDAppCheckForHoldKey检查自动启动保持位,如果在上电启动的时候,检测到手工按下SW_BYPASS_START键,板子上的灯会持续闪烁,设备状态设置为DEV_HOLD,不进行网络初始化。TI自带的其他例子里面,定义了HOLD_AUTO_START这个宏,如果定义了这个宏,设备启动后不会自动组网。设备状态为DEV_HOLD,否则,设备状态为DEV_INIT。不管以什么方式启动,

ZDO_Init:初始化ZDO条目,并设置设备的启动方式(ZDODeviceSetup),是协调器,还是路由器?

这个预定义宏,对于GenericApp这个demo来说,设计的很有特点.下面来分析一下.

f8wConfig.cfg为整个工程的全局配置文件,在任何设备的编译选项中都要被加入,对其任何的修改,将会影响到该份代码编译出的任何设备。

---------------------------技巧收集开始线---------------------------------------------------------

备注:从网络上找到的好技巧,再次分享.向原文作者致敬。原文链接:http://blog.csdn.net/xshbx/article/details/7981564

//两个测试宏
#define PI 3.141592
#define PI_TEST
#deinfe MAX(a,b) ((a)>(b) ? (a):(b)) //定义两个辅助宏
#define PRINT_MACRO_HELPER(x) #x
#define PRINT_MACRO #x" = "PRINT_MACRO_HELPER(x) //在需要测试该宏是否被定义,如果定义了,定义的值为多少时,在定义宏的下方调用
#pragma message(PRINT_MACRO(PI)) //该宏定义并且定义了数值,则输出PI = 3.1415923
#pragma message(PRINT_MACRO(PI_TEST)) //该宏定义了,没有定义数值,则输出PI =
#pragma message(PRINT_MACRO(PI2)) //如果该宏不存在的话,则输出PI2=PI2
#pragma message(PRINT_MACRO(MAX(x,y))) //输出MAX(x,y)=((x)>(y)?(x):(y))

只要编译器支持pragma语法(一般C/C++编译器都支持的),就可以实现。

---------------------------技巧收集结束线--------------------------------------------------------

在ZDOInitDevice中,可以通过按键来跳过一些初始化设置,例如网络层的NV存储和网络层的初始化。确定好设备状态和初始化参数后,调用最关键的函数ZDApp_NetworkInit( extendedDelay ),顾名思义,该函数执行ZigBee网络的初始化操作。在这个函数里面

通过我们前面的分析,可以知道,发给ZDApp的这个消息,会被ZDApp_event_Loop函数接收,

响应ZDO_NETWORK_INIT事件,再发起一个ZDO_STATE_CHANGE_EVT,然后执行ZDO_StartDevice来启动整个ZigBee设备网络层的实际初始化。

如果设备为路由器或者终端的话,则会发起NLME_NetworkDiscoveryRequest 请求原语来发起网络发现。如果设备的状态为MODE_RESUME,则会启动孤儿扫描流程。

NLME_NetworkFormationRequest请求原语的响应函数,在源码里面没有找到,估计是在库中封装响应了,不过,找到了ZDO_NetworkFormationConfirmCB这个函数,从名字上来猜想,应该是收到响应信息后调用的回调函数。还有一个表示网络状态的函数nwk_Status,也是被调用执行的。

从Z-Stack API文档中可以知道,NLME_NetworkFormationRequest函数返回的结果将传递给ZDO_NetworkFormationConfirmCB,网络建立成功后,会给ZDAppTask发送一个ZDO_NETWORK_START的消息,

ZStack之ZDApp_Init解析的更多相关文章

  1. Z-Stack学习笔记

    Technorati 标签: Z-Stack profile 1. 栈配置profile 栈参数的集合需要被配置为一定的值,连同这些值在一起被称之为栈配置.ZigBee联盟定义了这些由栈配置组成的栈参 ...

  2. Z-Stack ZMain学习

    [注:本文源自博客园http://www.cnblogs.com/cherishui/,为尊重劳动者成果,如需转载请保留此行] 在TI已有的Z-Stack的工程下面,打开已有的demo文件,通过分析不 ...

  3. Z-stack之OSAL初始化流程

    转自点击打开链接 我使用的协议栈版本及例子信息: ZigBee2006\Texas Instruments\ZStack-1.4.3-1.2.1\Projects\zstack\Samples\Sam ...

  4. z-stack组网过程

    z-stack组网分:协调器建立网络.路由器和终端加入网络 暂时只记录第一次上电建立网络的过程,至于开启NV_RESTORE后,恢复原有的网络则暂时不分析. 一.协调器建立网络: 1.ZDO层的ZDA ...

  5. 实验九 ZStack 广播通信实验

    实验九 ZStack 广播通信实验[实验目的]1. 了解 ZigBee 广播通信的原理2. 掌握在 ZigBee 网络中进行广播通信的方法[实验设备]1. 装有 IAR 开发工具的 PC 机一台2.  ...

  6. ZStack串口通信

    要使用ZStack就不得不先了解ZStack的OSAL工作原理 http://blog.csdn.net/qinpeng_zbdx/article/details/20990797 http://we ...

  7. ZStack深度试用:部署、架构与网络及其与OpenStack的对比

    摘要:本文是开源IaaS软件ZStack的深度试用报告,分别从部署.架构和网络三个层面分享作者的试用体验,并与OpenStack进行简单的对比,文章最后也对ZStack的改进方向提出了自己的思考.(转 ...

  8. cloudstack openstack zstack

    http://www.cnblogs.com/skyme/archive/2013/06/06/3118852.html http://www.niubua.com/ http://zstack.or ...

  9. Zigbee协议栈--Z-Stack的使用

    使用方法简介:一般情况下用户只需要额外添加三个文件就可以完成一个项目.一个是主文件,存放具体的任务事件处理函数:一个是这个主文件的头文件:另外一个是以Osal开头的操作系统接口文件,是专门存放任务处理 ...

随机推荐

  1. C#小常识集锦(一)--《更锋利的CSharp代码》读书笔记

    ❀.采用类似匈牙利命名法为控件命令,对于其他变量申明则不需要了 e.g. Button btnAdd; e.g. TextBox txtUsername; e.g. ListBox lstFileNa ...

  2. windows command ftp 中文文件名乱码解决方法

    有时,使用临时的windows机子,要进行ftp简单操作,但又不想装其它的ftp-client,可以直接使用windows command中的命令ftp来操作. 通常,ftp服务器按标准,使用utf8 ...

  3. 常见AutoCAD病毒(acad.fas、acad.lsp)清除方法

    常见AutoCAD病毒(acad.fas.acad.lsp)清除方法 acad.fas.acad.lsp这两种病毒是最常见的CAD病毒了,而且往往同一时候出现.因为其本身对系统并不具备危害性,不过恶作 ...

  4. CCBReader

    #ifndef _CCB_CCBREADER_H_ #define _CCB_CCBREADER_H_ #include "cocos2d.h" #include "Ex ...

  5. 【zabbix系列】报警系统的设置和排除

    关于邮件报警,有非常多方案,这里选择的是稳定性较好.使用较多的msmtp+mutt方案. 该方案有一个非常好的地方在于不用自己来搭建独立的mailserver,能够使用第三方mail.这样的方法不仅能 ...

  6. 关于“学习Linux用什么系统”的解答

    首先,阐述一下,我个人的观点——这个问题我曾经也想了很久了,这绝不是长篇大论后就是简单一句,适合你的就是最好的.其实,很多人看到这一句,心里已经有成千上万个奔腾了(至少我当时是这样的),为什么?因为我 ...

  7. Turn the pokers

    Problem Description During summer vacation,Alice stay at home for a long time, with nothing to do. S ...

  8. 把旧的项目改变名称重新部署到tomcat下发现项目名称还是原来的项目名称,解决方案

    选中项目右键点击properties 在type file text 中输入web 选择web在右边可以看到web-context-root 把里面的项目名称改成你最新的就ok了

  9. 使用JS制作一个鼠标可拖的DIV(三)——移动带图片DIV

    当DIV元素里,存在图片元素的时候,会使拖动出现异常. 因为图片元素本身就支持拖动,所以,只要在图片标签加入:draggable='false'. 如下: <div onmousedown=&q ...

  10. 有关java.lang.UnsupportedClassVersionError: Unsupported major.minor version 51.0

    时常会遇到java.lang.UnsupportedClassVersionError: Unsupported major.minor version 51.0这样的异常,现在都知道是jdk版本的问 ...