Z-Stack 的应用层参数修改

Z-Stack 的应用层参数修改

本文件讨论了影响ZigBee Z-Stack 使用和配置的各种全局变量、编译选项和编译器指令。本文件适用于ZigBee Z-Stack 的版本1.4.0。最常见的用于定义一个ZigBee  Z-Stack 设备的编译器命令行选项现在可以通过编辑一个叫做f8wConfig.cfg 的配置文件来设置。该文件可以根据使用的Z-Stack平台,在\Projects\zstack\Tools\CC2430DB 或者\Projects\zstack\Tools\CC2420DB 中找到。

1   定义

以下术语用于本文件:

APS – 应用支持子层

MT – 监控测试

NV – 非易失

AES – 高级加密引擎

2   一般考虑

一般来说,应该使用默认设置。除非想要根据自己的应用程序需求调整栈,否则默认设置对大多数应用程序就足够了。

3   全局变量

本节讨论了nwk_globals.c 中的全局变量,用户可以修改这些变量。

 

应用层

 

CONST byte apscMaxFrameRetries = APSC_MAX_FRAME_RETRIES;(APSC_MAX_FRAME_RETRIESf8wConfig.cfg )

如果传输信息使用了APS 确认服务,这个变量控制APS 层尝试的重试次数。为了使用APS 确认服务,当调用afDataRequest()函数时,要把AF_ACK_REQUEST 的值传递给tx_options 参数。

 

安全选项

 

nwk_globals.c 中,以下部分描述了安全全局变量。

/********************************************************************** 安全全局变量*/

// 这是默认的预配置密钥,

// 把它修改为一个唯一的密钥

//SEC_KEY_LEN 定义在ssp.h 中。

CONST byte defaultKey[SEC_KEY_LEN] ={//供内部测试使用的密钥0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F}; (DEFAULT_KEYf8wConfig.cfg )

// 如果为真,应为网络上所有设备配置preConfigKey

// 如果为假,仅为协调器配置,并在其它设备加入时发送给该设备byte gPreConfigKeys = FALSE; // TRUE;

// 选择AES引擎

// HARDWARE_AES使用硬件AES引擎(最快的设置)

// SOFTWARE_AES使用软件AES引擎(最慢的设置)

// SW_AES_AND_KEY_EXP使用带有密钥扩展的软件AES(速度提高了,但代价是176字节的数据(RAM))

byte aesEngineSetting = HARDWARE_AES

如果gPreConfigKeys 设置为TRUE,所有设备必须使用相同的预配置安全密钥。如果gPreConfigKeys 设置为FALSE,仅对协调器设备设置预配置密钥,并发送给正在加入的设备。密钥在最后一跳明确发出。如果定义了NV_RESTORE NV_INIT 编译选项,在复位时,设备将从NV 存储器中检索预配置密钥。

变量aesEngineSetting 控制AES 加密使用硬件还是软件。默认情况下, 设置为HARDWARE_AES,这在使用安全功能时提供了最高的吞吐量。

4   编译选项

以下编译选项用于调试跟踪和监控测试的目的。

MT_TASK

这个编译选项使得设备可以与Z-Tool PC 应用程序通信,并可以使用debug_str()函数输出最低限度的调试信息。删除它可以节省一些代码和RAM 的使用。

MT_ZDO_FUNC 和其它MT 编译选项

MT_ZDO_FUNC 是编译选项使ZDO 命令可以和Z-Tool 一起使用的一个例子。大多数设备不需要启用所有的监控测试命令。每个ZDO 命令可以在ZDConfig.h 中分别启用。选择性地启用应用程序所需的请求可以使使用的代码达到最少。关于不同MT 编译选项的详细信息见Z-Stack 编译选项文件。

LCD_SUPPORTED

这个选项可以支持显示一个LCD 开发板的调试跟踪信息。在CC2420DB 上,设置LCD_SUPPORTED会发送信息到串行端口(因为它没有LCD 显示器)。启用这个编译选项会占用RAM 很重要的一部分。

LCD_SUPPORTED=DEBUG

CC2430EB 上,设置LCD_SUPPORTED=DEBUG 会发送信息到LCD 和串行端口,这样代码实际上更大了。在CC2420DB 上,由于没有LCD,调试信息只发送到串行端口,因此比起CC2430EB 同样的设置,使用的代码较少。

BLINK_LEDS

BLINK_LEDS 编译选项可以使用扩展的LED 功能,但代价是额外的代码和RAM 空间。

更多信息见Z-Stack 编译选项文件。

5    编译器指令

以下编译器指令允许适当的时候尽量减少RAM 的使用,或修改不同的用户设

置。

Nwk_globals.h:

 

NWK_MAX_DEVICE_LIST

这用于为子设备预分配RAM。每修改NWK_MAX_DEVICE_LIST 一位就改变了关联表的18 字节大小。这个设置必须匹配MAX_CHILD_NODES #define,以保证设备有足够的RAM 供子节点最大个数使用。

 

STACK_PROFILE_ID, MAX_CHILD_NODES, MAX_ROUTER_NODES,MAX_NODE_DEPTH

默认情况下STACK_PROFILE_ID设置为HOME_CONTROLS的栈profile。栈profile ID确定了设置MAX_CHILD_NODESMAX_ROUTER_NODESMAX_NODE DEPTHNWK_MODE,以及其它网络参数。因此,修改栈profile ID将典型的允许用户使用一个#define改变网络拓扑。如果需要定义自己的拓扑,可以使用NETWORK_SPECIFICprofile ID 

MAX_CHILD_NODES指的是一个设备可以有多少个许多子节点。而MAX_ROUTER_NODES指的是路由器子节点(因此区别在于前者指的是终端设备子节点)。

MAX_DEPTH指的是可以有多少连续的父节点-子节点连接,以此作为网络最大规模。

这些必须根据你所希望的网络密集度,以及路由器和终端设备的比例来设置。

MAX_UNRESERVED_RTG_ENTRIES MAX_RTG_ENTRIES

MAX_UNRESERVED_RTG_ENTRIES定义了一般情况下可以使用的路由表条目的实际个数。这个参数和MAX_RTG_ENTRIES的区别在于仅在路由修复时使用的条目。在路由请求频繁进行的情况下,用户可以增加未保留条目的个数。路由条目指的是通过某个结点的路由个数。如果所有设备都给一个设备发送数据,就只有一条路由(因为数据只能到达一个目的地)。否则,有几个目的地,就有几条路由。但是所有路由都不经过一个给定设备是不可能的。

 

MAX_BCAST_ENTRIES (MAX_BCAST f8wConfig.cfg )

这是在_NIB.BroadcastDeliveryTime(在nwk_globals.c中)期间内可以持有的广播条目(对于数据包而言)的个数。这两个设置一起,确定了广播数据包在网络中传输的过渡时间。例如,如果MAX_BCAST_ENTRIES设置为9,且_NIB.BroadcastDeliveryTime设置为10(秒),设备可以向外发送9个连续的数据包,但是不能向外发送第10个,直到10秒后才能发送。

 

_NIB.RouteExpiryTime (ROUTE_EXPIRY_TIME

 f8wConfig.cfg )这个设置确定了如果一条路由上没有数据传输,在它到期之前所经过的时间,以秒为单位(默认设置为30,意味着建立的路由将从被记录的时间开始,在30秒内到期)。如果路由经常改变(由于路由器设备位置移动或终端设备在网络内移动),就希望旧的路由到期。每次一个数据包通过某条路由,到期时间就重置为这个值。因此,路由仅会在它上面没有数据传输时到期。一条路由到期后,路由表条目将被删除。设置这个值为0就能禁止路由到期。

Nwk_globals.c:

POLL_RATE, QUEUED_POLL_RATE, and RESPONSE_POLL_RATE

这些参数为终端设备控制不同的轮询间隔。这些#defines的详细解释见AN017AN030

 

gMAX_POLL_FAILURE_RETRIES (MAX_POLL_FAILURE_RETRIES

f8wConfig.cfg)在表明丢失同步之前,终端设备轮询其父节点的次数。一旦超过了这个阀值,终端设备将尝试执行一个网络重新加入请求(见ZigBee2006规范)。注意更大的值将导致子节点重新加入网络的延迟时间更长。

 

gREJOIN_POLL_RATE (REJOIN_POLL_RATE

f8wConfig.cfg)这用作另一种响应轮询率,仅用于网络重新加入请求。这个轮询率由设备试着加入的父节点的响应时间确定。

 

gNWK_MAX_DATA_RETRIES (NWK_MAX_DATA_RETRIES f8wConfig.cfg )

一旦MAC层用完重试(注意MAC层在给网络层返回一个失败状态之前,将重试3次),该语句控制网络层为下一跳信息执行的重试次数。

 

Cskip数组

Cskip值由栈版本1.4.0的参数MAX_CHILD_NODESMAX_ROUTER_NODESMAX_NODE DEPTH自动确定。用户自己不需要修改这个数组。但是需要保证CskipRtrsCskipChldrn分别匹配MAX_ROUTER_NODESMAX_CHILD_NODES的设置。

例如如果使用了:

#if ( STACK_PROFILE_ID == HOME_CONTROLS )

byte CskipRtrs[MAX_NODE_DEPTH+1] = {6,6,6,6,6,0};byte CskipChldrn[MAX_NODE_DEPTH+1] = {20,20,20,20,20,0};

MAX_ROUTER_NODES = 6

MAX_CHILD_NODES = 20

 

MAX_NEIGHBOR_ENTRIES

MAX_NEIGHBOR_ENTRIES用于不是子节点或父节点的邻居节点。这个设置与MAX_ROUTER_NODES无关。这里的值需要在48之间,因为它只用于保证网络有足够的连通性。值再大没有好处。

 

BindingTable.h:

NWK_MAX_BINDING_ENTRIES

这控制绑定表条码的最大数。如果不使用绑定,设置为1,以尽量减少RAM使用。这个值每改变1,绑定表就会改变12字节的大小。

 

MAX_BINDING_CLUSTER_IDS

这控制每个绑定表条目的簇ID的最大数。如果不使用绑定,设置为1,以尽量减少RAM使用。

 

ZDApp.c:DEF_PROTO_VERS

从栈版本1.4.0开始,支持ZigBee规范版本1.01.1。新的处理器宏

 

DEF_PROTO_VERS

可以用于控制要加入的网络的默认协议版本。关于协议版本的更多详细信息请参阅AN026

NWK_START_DELAY (NWK_START_DELAY f8wConfig.cfg )

这个#define使用户选择在启动网络中的设备之前,等待NWK_START_DELAY毫秒的时间。

 

ZMain.c:

gZDO_CONFIG_PAN_ID (ZDAPP_CONFIG_PAN_ID f8wConfig.cfg )

zMain_NvInit()函数中,PAN ID全局变量gZDO_CONFIG_PAN_ID被初始化。如果不是0xFFFF,协调器将从这个PAN ID启动,路由器和终端设备将加入设置为该IDPAN。如果定义了NV_INIT编译选项,用户可以从NV存储器中回调这个值。用户可以使用Z-ToolNV存储器中配置这个值。

nwkDefaultChannelList (DEFAULT_CHANLIST f8wConfig.cfg )

zMain_NvInit()函数中,信道列表全局变量nwkDefaultChannelList被初始化为DEFAULT_CHANLIST的设置。用户可以用它配置自己设备支持的信道的列表。

 

你可能感兴趣的:(嵌入式硬件)