层次结构
如下图示,为 ZStack 的层次结构图
从层次的名字就能知道代表的含义,比如 NWK 层就是网络层。一般应用中较多关注的是 HAL 层(硬件抽象层)和 App 层(用户应用),前者要针对具体的硬件进行修改,后者要添加具体的应用 程序。而OSAL 层是 ZStack 特有的系统层,相当于一个简单的操作系统,便于对各层次任务的管理,理解它的工作原理对开发是很重要的,下面对各层进行简要介绍:
- APP(Application Programming ):应用层目录,这是用户创建各种不同工程的区域,在这个目录中包含了应用层的内容和这个项目的主要内容,在协议栈里面一般是以操作系统的任务实现的。
- HAL(Hardware (H/W) Abstraction Layer ):硬件层目录,包含有与硬件相关的配置和驱动及操作函数。
- MAC:MAC 层目录,包含了 MAC 层的参数配置文件及其 MAC 的LIB 库的函数接口文件。
- MT(Monitor Test):实现通过串口可控各层,与各层进行直接交互,同时可以将各层的数据通过串口连接到上位机,以方便开发人员调试。
- NWK(ZigBee Network Layer ):网络层目录,含网络层配置参数文件及网络层库的函数接口文件。
- OSAL(Operating System (OS) Abstraction Layer):协议栈的操作系统。
- Profile:AF(Application work )层(应用构架)目录,包含 AF 层处理函数文件。Z-Stack的 AF 层提供了开发人员建立一个设备描述所需的数据结构和辅助功能,是传入信息的终端多路复用器。
- Security:安全层目录,安全层处理函数,比如加密函数等。
- Services:地址处理函数目录,包括着地址模式的定义及地址处理函数。
- Tools:工程配置目录,包括空间划分及 ZStack 相关配置信息。
- ZDO(ZigBee Device Objects ):ZigBee 设备对象层(ZDO)提供了管理一个 ZigBee 设备的功能。ZDO 层的 API 为应用程序的终端提供了管理 ZigBee 协调器、路由器或终端设备的接口。这包括创建、查找和加入一个 ZigBee 网络,绑定应用程序终端以及安全管理。
- ZMac:MAC 层目录,包括 MAC 层参数配置及 MAC 层 LIB 库函数回调处理函数。
- ZMain:主函数目录,包括入口函数及硬件配置文件。
- Output:输出文件目录,这个 EW8051 IDE 自动生成的。
TI ZStack 协议栈是一个 基于 轮转查询式 的 操作系统 ,它的 main 函数在 ZMain 目录下的ZMain.c中, 该协议栈 总体上来说,一共做了两件工作,一个是系统初始化,即由启动代码来初始化硬件系统和软件构架需要的各个模块,另外一个就是开始启动操作系统实体
系统初始化
系统启动代码需要完成初始化硬件平台和软件架构所需的要的各个模块,微操作系统的运行做好准备工作,主要分为初始化系统时钟,检测芯片工作电压,初始化堆栈,初始化各个硬件模块,初始化 FLASH 存储,形成芯片 MAC 地址,初始化非易失变量,初始化 MAC 层协议,初始化应用帧层协议,初始化操作系统等十余部分,其具体流程图和对应的函数如图
启动操作系统
系统初始化为操作系统的 运行 做好准备工作以后,就开始执行操作系统入口程序,并由此彻底将控制权交给操作系统 其实, 启动 操作系统实体只有一行代码:
osal_start_system();
该函数没有返回结果通过将该函数一层层展开之后就知道该函数其实就 是一个死循环。这个函数就是轮转查询式操作系统的主体部分,他所做的就是不断地查询每个任务是否有事件发生,如果发生,执行相应的函数,如果没有发生,就查询下一个任务。