ZIGBEE 工程内区分终端与协调器

目前已知,工程中区分是终端还是协调器,与工程中Tolls文件夹中的.cfg文件有关:
ZIGBEE 工程内区分终端与协调器
文章图片

从project->Edit Configuration进去可以删减左边栏Workspace下拉的项:
ZIGBEE 工程内区分终端与协调器
文章图片

ZIGBEE 工程内区分终端与协调器
文章图片

区别终端、路由器和协调器是通过Options.. -> C/C++ Compiler -> Extra Options 中添加不同的.cfg文件实现的:
协调器:
ZIGBEE 工程内区分终端与协调器
文章图片

终端:
ZIGBEE 工程内区分终端与协调器
文章图片


还没学完,接下来看一下cfg文件中的代码区别,参考自:
详解在程序中怎样区分协调器 路由器 终端[转载]
来自

f8wConfig.cfg文件:
每个Pro都会带的,不管是终端、协调器还是路由器。存放有一些通用的编译选项,比如PAN ID网络识别码、指定的信道等等。

f8wEndev.cfg文件代码:
ZIGBEE 工程内区分终端与协调器
文章图片


f8wCoord.cfg文件代码:
ZIGBEE 工程内区分终端与协调器
文章图片


f8wRouter.cfg文件代码:
ZIGBEE 工程内区分终端与协调器
文章图片


【ZIGBEE 工程内区分终端与协调器】可以发现CPU频率、MAC/ZMAC 设置(具体是什么不太清楚)在三种类型代码中都有;
MAC层的设置“-DMAC_CFG_APP_PENDING_QUEUE=TRUE”,以及路由器设置“-DRTR_NWK”只在协调器和路由器中定义,终端没有;
协调器则单独多了一行代码“-DZDO_COORDINATOR”,应该是定义其有协调器功能。
而协调器既宏定义了ZDO_COORDINATOR又宏定义了RTR_NWK是因为:在Zigbee网络中,只有协调器才能建立一个新网络,而一旦网络建立后该设备的作用就是一个路由器。

打开协议栈NWK文件夹下的Zglobals.h,可以找到代码:
ZIGBEE 工程内区分终端与协调器
文章图片

我觉得大概意思就是,如果定义了协调器ZDO_COORDINATOR,那么此Pro的代码作为协调器功能执行,否则如果定义了RTR_NWK,则作为路由器,否则作为终端。

Zglobals.h有对DEVICE_BUILD_XXX的宏定义:
ZIGBEE 工程内区分终端与协调器
文章图片


学习得很粗浅,如有问题欢迎指正。

    推荐阅读