1.Zigbee协议和Z-Stack
Zigbee协议和Z-Stack是什么关系?这可能是初学Zigbee同学想知道的问题。给大家举个例子吧,我们生活中使用的插排是要符合一定的标准的,现在国家标准是GB2099.3-2008,里面规定了好多插排的电气、机械等要求。不同厂家生产的插排,要在中国国内销售的话,必须符合这个标准。但是生产这个插排的厂家多了去了,像 公牛、philips等等(排除做广告的嫌疑)。其实Zigbee协议栈规范和Z-Stack的关系也差不多,Z-Stack就是符合Zigbee协议栈规范的一个硬件和软件平台,是Zigbee协议栈的一个具体实现。当然,还有其他的具体实现,freakz协议栈和contiki操作系统、TinyOS等等。大家要注意,Z-Stack是TI公司提供的协议栈,它是个半开源的协议栈,有些核心代码是以库的形式提供的,所以要想深入了解协议栈或者想进一步提升编程能力的同学还是找一个全开源的协议栈玩玩吧。比如,freakz协议栈。 2.IAR和Z-Stack Z-Stack的整个开发环境IDE使用的是IAR(IAR的版本需要参考Z-Stack Home Sample Application User‘s Guide。此文档在TI提供的资料包里\Documents内)。从来没有使用过IAR的同学请参考**最后附件:IAR入门。这只是个简单的入门指导,想详细了解IAR或者使用过程中遇到什么问题请使用IAR的help选项。 我们知道Zigbee设备的分为Coordinator、Router、Enddevice三种角色,这三种角色在IAR里怎么修改呐?我们打开一个TI HA(TI提供的关于智能家居的解决方案),下载地址见下载平台:************* 
从图中标示的位置可以修改这三种设备角色,其实这里的选项是修改IAR project配置的地方,这里TI提供的project里已经配置好了这三钟Zigbee设备角色的配置文件。我们这里只选择就可以了。 Z-Stack软件结构有一个很大的特点:使用宏定义来区分是否编译某一模块/功能/函数。


全是根据宏定义来决定是否编译这个功能,有的是根据是否定义这个宏,有的是根据定义的这个宏的值来决定其什么作用。这也可以理解,因为TI提供的是一个通用的基础开发平台,需要考虑兼容性,易用性,并且硬件资源有限,只能使用宏定义的方式在程序预编译阶段根据宏定义就可以知道需要哪些功能了。 那么关键的问题来了,这些宏定义在IAR里是怎么定义的类?在IAR中有两种定义方式: 第一种: 
在打开的TI project工程目录的Tools下面,有***.cfg文件,这些是IAR Compiler command-line options。可以在这里定义宏。 
定义的方法是“-D 加上你要定义的宏”,例如上面的 -DMAC_CFG_TX_MAX,其实定义的宏就是MAC_CFG_TX_MAX,你搜索整个工程就可以找到在哪里使用了这个宏。取消定义可以在定义前加上“//”。例如//-DMAC_CFG_TX_DATA_MAX=5。 你可能想知道IAR读取这些cfg文件需要不需要配置?自己新增加配置文件怎么办? 打开菜单栏 project---option

找到C/C++Complier 选项,然后选择Extra Options,在这里写你自己需要引用的cfg文件就可以了。 第二种: 打开菜单栏 project---option 然后找到preprocessor选项。 
在这里也可以定义宏,直接书写宏的名字即可,例如:“ZTOOL_P1”。取消宏定义可以在前面添加“x”,例如“xZTOOL_P1”。当然也可以定义有值的宏,“LCD_SUPPORTED=DEBUG”。
|