1.有三种设备:
协调器:启动网络,和配置网络。
路由器:允许其他设备加入,多跳路由等。
2.拓扑结构
星形、树形和mesh网络结构,在文件nwk_globals.h的文件里面有定义。
3.信标和非信标模式
信标模式:实现了网络中的所有设备的同步工作和同步睡眠。
信标模式下,协调器负责以一定的间隔时间(一般在 15ms-4mins 之间)向网络广播信标
帧。
非信标模式:
则只允许终端设备进行周期性休眠,协调器 和所有路由器 设备必须长期处于工作状态。
4.地址的定义
64位地址全球唯一,16位地址加入网络的时候分配的,协调器的网络地址是0x00
如何寻址:AF_DataRequest()设备发送数据函数
网络模式:单点传送、简洁传送、广播传送等三种
NWK_BROADCAST_SHORTADDR_DEVALL(0xFFFF)——数据包将被传送到网络上的所有设
备,包括睡眠中的设备。对于睡眠中的设备,数据包将被保留在其父亲节点直到查询到它,或
者消息超时(NWK_INDIRECT_MSG_TIMEOUT 在 f8wConifg.cfg 中)。
NWK_BROADCAST_SHORTADDR_DEVRXON(0xFFFD)——数据包将被传送到网络上的所
有在空闲时打开接收的设备(RXONWHENIDLE),也就是说,除了睡眠中的所有设备。
NWK_BROADCAST_SHORTADDR_DEVZCZR(0xFFFC)——数据包发送给所有的路由器,包
括协调器。
5.端点
端点 EndPoint 是协议栈应用层的入口,也可以理解应用对象(Application Object)存在的
地方,它是为实现一个设备描述而定义的一组群集。每个 ZigBee 设备可以最多支持 240 这样
的端点,这也意味着在每个设备上可以定义 240 个应用对象。端点 0 被保留用于与 ZDO 接口,
这是每个 ZigBee 设备必须使用的端点,而端点 255 被保留用于广播,端点 241-254 则被保留用
于将来做扩展使用。
6.绑定
它能够通过使用 ClusterID
为不同节点上的独立端点建立一个逻辑上的连接。以下图为例来说明绑定操作:
简单的理解就是,有一个任务的去控制两个任务
上图是协议栈分层架构和协议栈代码文件夹的对应关系。
下面就Z-stack的软件架构,进行分析,从而明白如何利用进行工程的开发Z-stask。
在函数osal_init_system()里的函数osallnitTask()的这个函数里就要定义用户的初始化函数
tasksCnt----------该变量保存任务的总个数
tasksEvent-------这是一个指针,指向了事件表的首地址
tasksArr-----------这是一个指针数组,数组的每一项都指向了一个函数指针,指向了事件处理函数。
事件表tasksEvent的每一项都和tasksArr中的每一项一一对应,这三个对理解OSAL如何执行的很重要。
Zstack是Zigbee协议的具体实现,在实现的过程中为了能够更好的对各个模块和功能进行管理,所以加入了OSAL(OperatingSystem Abstraction Layer 操作系统抽象层)(以上为个人见解)。
在OSAL中,提出了任务,事件,消息三个概念。它们之间的关系如下:
任务是处理事件的一个功能集合,一般由一个事件处理函数实现(ProcessEvents)
事件是当前系统中被触发的动作,例如有按键按下,接收到其他节点发送过来的消息等等
消息则是事件编号和其对应事件内容的集合,发生事件并将其打包到消息队列,供事件处理函数进行处理
大致的流程如下:
事件发生后-->被打包为消息-->存放到消息队列-->事件处理函数取出消息并进行相应操作。
osal如何添加任务
添加新任务,只需编写两个函数:
新任务的初始化函数;GenericApp_Init( uint8 task_id )
新任务的事件处理函数;GenericApp_ProcessEvent( uint8 task_id, uint16 events)
将任务初始化函数添加在osal_Init_Tasks函数的最后;
将事件处理函数地址加入tasksArr[]