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

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

ZIGBEE 工程内区分终端与协调器_第1张图片

从project->Edit Configuration进去可以删减左边栏Workspace下拉的项:

ZIGBEE 工程内区分终端与协调器_第2张图片

ZIGBEE 工程内区分终端与协调器_第3张图片

区别终端、路由器和协调器是通过Options.. -> C/C++ Compiler -> Extra Options 中添加不同的.cfg文件实现的:

协调器:

ZIGBEE 工程内区分终端与协调器_第4张图片

终端:

ZIGBEE 工程内区分终端与协调器_第5张图片

 

还没学完,接下来看一下cfg文件中的代码区别,参考自:

详解在程序中怎样区分协调器 路由器 终端[转载]

来自

 

f8wConfig.cfg文件:

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

 

f8wEndev.cfg文件代码:

ZIGBEE 工程内区分终端与协调器_第6张图片

 

f8wCoord.cfg文件代码:

ZIGBEE 工程内区分终端与协调器_第7张图片

 

f8wRouter.cfg文件代码:

ZIGBEE 工程内区分终端与协调器_第8张图片

 

可以发现CPU频率、MAC/ZMAC 设置(具体是什么不太清楚)在三种类型代码中都有;

MAC层的设置“-DMAC_CFG_APP_PENDING_QUEUE=TRUE”,以及路由器设置“-DRTR_NWK   ”只在协调器和路由器中定义,终端没有;

协调器则单独多了一行代码“-DZDO_COORDINATOR   ”,应该是定义其有协调器功能。

而协调器既宏定义了ZDO_COORDINATOR又宏定义了RTR_NWK是因为:在Zigbee网络中,只有协调器才能建立一个新网络,而一旦网络建立后该设备的作用就是一个路由器。

 

打开协议栈NWK文件夹下的Zglobals.h,可以找到代码:

ZIGBEE 工程内区分终端与协调器_第9张图片

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

 

Zglobals.h有对DEVICE_BUILD_XXX的宏定义:

ZIGBEE 工程内区分终端与协调器_第10张图片

 

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

 

你可能感兴趣的:(ZIGBEE)