首页 理论教育 如何在应用层启动网络:NV选项及设备类型验证

如何在应用层启动网络:NV选项及设备类型验证

时间:2023-06-29 理论教育 版权反馈
【摘要】:下面先分析在应用层的处理:首先从NV中读出启动选项,如果启动选项为自动启动,则会调用zb_StartRequest来启动网络,否则闪烁LED2,在NV中并没有保存自动启动选项,所以并不会启动设备。在传感节点和采集节点中都调用过zb_StartRequest函数来启动设备:首先从NV中读出设备类型,同预定义宏的设备类型进行校验,保证设备类型是一个有效的类型,初始状态设备类型是正确的,则调用启动网络的入口函数ZDOInitDevice来启动网络功能。

如何在应用层启动网络:NV选项及设备类型验证

1.在应用层启动网络功能

正常的启动在ZDO层就已经完成网络启动,这是因为在编译时,没有定义禁止自动启动的宏HOLD_AUTO_START,如果定义了该宏,会进行以下编译控制:

该宏决定了设备状态的初值,如果不在ZDO层启动网络功能,需要将设备状态设置为DEV_HOLD状态,相应地在“project→options→c/c++compiler→extraOptions”中设置该宏,如图18-1所示。

图18-1 在project->options->c/c++compiler->extraOptions中设置宏

宏设置完成后,在ZDO层初始化函数中做如下处理:

也就是调用了ZDOInitDevice(ZDO_INIT_HOLD_NWK_START)函数,并传递了一个延时值。该延时值为0xFFFF,是个特殊值,在此并不会启动网络功能。

2.在应用层启动网络

应用层启动网络需要借助进入事件(ZB_ENTRY_EVENT),在应用层初始化函数中设置了该事件:

相应地在应用层处理该事件:

上述代码中重要的是zb_HandleOsalEvent函数,该函数在采集节点和传感节点做了不同的定义,实质是将应用层的部分事件分发至不同设备处理。下面先分析在应用层的处理:首先从NV(非易失性存储介质)中读出启动选项,如果启动选项为自动启动,则会调用zb_StartRequest来启动网络,否则闪烁LED2(对应开发板绿灯),在NV中并没有保存自动启动选项,所以并不会启动设备。所以设备启动是在zb_HandleOsalEvent中进行的。在传感节点和采集节点中都调用过zb_StartRequest函数来启动设备:(www.xing528.com)

首先从NV中读出设备类型,同预定义宏的设备类型进行校验,保证设备类型是一个有效的类型(因此可通过写NV,来改变设备类型),初始状态设备类型是正确的,则调用启动网络的入口函数ZDOInitDevice来启动网络功能。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈