Z-stack协议栈开发
物联网系列专业课程:ZStack无线协议栈
关总中断osal_int_disable( INTS_ALL )
初始化板上硬件设置HAL_BOARD_INIT( ) 初始化I/O口InitBoard( OB_COLD ) 初始化HAL层驱动HalDriverInit( ) 初始化非易失性存储器sal_nv_init( NULL ) 初始化MAC层ZMacInit( ) 分配64位地址zmain_ext_addr( ) 初始化操作系统osal_init_system( )等
ZStack工程配置文件
f8w2530.xcl - cc2530处理器的链接脚本文件 f8wConfig.cfg - ZStack通用配置文件 -DZIGBEEPRO # 启用ZigBee Pro 协议栈 -DREFLECTOR # 允许绑定 -DDEFAULT_CHANLIST # 选择默认频道,通过在f8wConfig.cfg里面解除注释对应行来选择频道 -DZDAPP_CONFIG_PAN_ID # 通过改变PAN_ID来识别同一个频道里的不同ZigBee网络。 -DRFD_RCVC_ALWAYS_ON=FALSE # 当该选项为FALSE时,允许终端节点睡眠,否则,不允许。 ...... f8wCoord.cfg - 协调器的基本配置文件 f8wRouter.cfg - 路由器的基本配置文件 f8wEndev.cfg - 终端的基本配置文件 CPU32MHZ # cc2530的系统时钟频率设为32MHz ZDO_COORDINATOR # 含协调器功能 RTR_NWK # 含路由功能 ......
如果任务列表中没有就绪的任务,则可以使处理器进
判断下一个任务状态
否
Hale Waihona Puke 任务激活是入睡眠状态实现低功耗
【无线通信篇Zstack协议栈】CC2530ZigbeeZstack协议栈组网项目及详细讲解篇
【⽆线通信篇Zstack协议栈】CC2530ZigbeeZstack协议栈组⽹项⽬及详细讲解篇物联⽹⽆线通信技术,ZigBee⽆线传感⽹络CC2530最⼤的特点就是⼀个拥有⽆线收发器(RF)的单⽚机,既能实现单⽚机功能,也能实现⽆线传输Zstack协议栈是ZigBee协议栈⾥的翘楚,是ZigBee组⽹的⾸选协议栈项⽬实现功能:l 总共有三个端点,⼀个协调器和两个终端节点l 终端节点1连接DHT11温湿度传感器,定时上传给协调器l 终端节点2连接LED,可以通过协调器按键控制,定时上报LED开关状态l 协调器连接12864 OLED 屏幕,实时显⽰温湿度和LED状态l 协调器可以通过按键控制终端2的LED开关,控制后将会显⽰控制结果扩展功能(当前未实现,可进⼀步开发实现):l 连接协调器串⼝,将终端节点采集的数据通过串⼝发送,PC写上位机实现数据展⽰l 连接WIFI或者4G模块,WIFI模块如ESP8266,实现数据局域⽹⽆线传输或者上传到OneNET、机智云、阿⾥云、⾃⼰开发云服务器等,实现WEB或⼿机APP显⽰和控制。
⼀、项⽬测试(可想⽽知,⼴州的天⽓有多热,39℃了都)实现功能汇总:l 总共有三个端点,⼀个协调器和两个终端节点l 终端节点1连接DHT11温湿度传感器,定时上传给协调器l 终端节点2连接LED,可以通过协调器按键控制,定时上报LED开关状态l 协调器连接12864 OLED 屏幕,实时显⽰温湿度和LED状态l 协调器可以通过按键控制终端2的LED开关,控制后将会显⽰控制结果(⼀) 环境汇总芯⽚:CC2530F256Zstack协议栈:ZStack-CC2530-2.5.1a编程环境:IAR(⼆) 引脚分配协调器:128*64 OLED 0.96⼨屏幕供电:3.3V通信协议:IIC引脚:SDA P0_6SCL P0_7按键:IO:P0_1下降沿触发中断终端1:DHT11:通信⽅式:单总线协议供电:3.3VIO:P0_6终端2:LEDIO:P1_0说明:⾼电平点亮,低电平熄灭⼆、基础认识(⼀) CC2530单⽚机CC2530最⼤的特点就是⼀个拥有⽆线收发器(RF)的单⽚机,既能实现单⽚机功能,也能实现⽆线传输。
Z-stack协议栈开发指南
路由
Z-Stack 采用无线自组网按需平面距离矢量路由协议 AODV,建立一个 Hoc 网络,支持移动节点,链接失败和数据丢失,能够自组织和自修复。当一个 Router 接受到一个信息包之后,NMK 层将会进行以下的工作:首先确认目的地,如果目 的地就是这个 Router 的邻居,信息包将会直接传输给目的设备;否则,Router 将会确认和目的地址相应的路由表条目,如果对于目的地址能找到有效的路由表 条目,信息包将会被传递到该条目中所存储的下一个 hop 地址;如果找不到有效 的路由表条目,路由探测功能将会被启动,信息包将会被缓存直到发现一个新的 路由信息。
协调器(Coordinator)首先在某个频段发起一个网络,网络频段的定义放 在 DEFAULT_CHANLIST 配置文件里。如果 ZDAPP_CONFIG_PANID 定义的 PAN ID 是 0xFFFF(代表所有的 PAN ID),则协调器根据它的 IEEE 地址随机确定一个 PAN ID。 否则,根据 ZDAPP_CONFIG_PANID 的定义建立 PAN ID。当节点为 Router 或者 End Device 时,设备将会试图加入 DEFAULT_ CHANLIST 所指定的工作频段。如果 ZDAPP_CONFIG_PANID 没有设为 0xFFFF,则 Router 或者 End Device 会加入 ZDAPP_CONFIG_PANID 所定义的 PAN ID。
ZigBee End Device 不会执行任何路由函数,它只是简单的将信息传送给前 面的可以执行路由功能的父设备。因此,如果 End Device 想发送信息给另外一 个 End Device,在发送信息之间将会启动路由探测功能,找到相应的父路由节 点。
协议栈-Z-Stack协议栈基础和数据传输实验
「ZigBee模块」协议栈—Z-Stack协议栈基础和数据传输实验花了好久写的。
..感觉还不错的呢。
如果看,请细看.。
.Mua~Z-Stack协议栈基础和数据传输实验一、实验目的终端节点将数据无线发送到协调器,协调器通过串口将数据发送到PC端,并在屏幕上显示出来。
串口优化把有线串口传输改为无线蓝牙传输.二、实验平台硬件:2个zigbee节点,1个编译器,1根方口转USB数据线,一个蓝牙模块软件:实验基于SampleApp工程进行。
三、实验步骤1.串口初始化代码2.发送部分代码3.接收部分代码四、协议栈基础做实验之前先了解一点关于协议栈的基础知识吧~什么是协议栈?我们知道使用Zigbee一般都要进行组网、传输数据。
可想而知其中的代码数量是非常庞大的,如果我们每次使用zigbee都需要自己写所以代码的话,会非常麻烦。
因此就有了协议栈。
可以说它是一个小型的操作系统,把很多通信、组网之类的代码都封装起来了。
我们要做的只是通过调用函数来实现我们的目的。
来看一下协议栈的工作流程图(图1)。
然后我会对照流程图对协议栈进行简单的分析。
图1我们就从流程图的“开始"开始分析吧~打开工程文件SampleApp,main函数是程序执行的开始,我们要先找到它.Main函数在ZMAin文件夹的ZMain。
c下,打开它,找到main函数。
main();浏览一下main函数可以看到一开始都是各种初始化函数,即对应流程图中的“各种初始化函数”。
初始化中我们需要注意的是“osal_init_system();"初始化操作系统函数。
等一下会对它进行说明。
继续看下去,“osal_start_system();”这是执行操作系统函数,对应流程中的“运行操作系统"。
注意这个函数进去之后是不会再返回的。
总结main函数就是初始化和执行操作系统两个部分。
我们再来分析一下“osal_init_system();”这个函数,它的功能是初始化操作系统。
ZStack开发流程
一、Zigbee协议栈Zstack架构ZigBee的体系结构由称为层的各模块组成。
每一层为其上层提供特定的服务:即由数据服务实体提供数据传输服务;管理实体提供所有的其他管理服务。
每个服务实体通过相应的服务接入点(SAP) 为其上层提供一个接口,每个服务接入点通过服务原语来完成所对应的功能。
Z igBee 协议的体系结构如下图所示:物理层(PHY)物理层定义了物理无线信道和MAC子层之间的接口,提供物理层数据服务和物理层管理服务,物理层内容:1) Zi gBe e 的激活;2)当前信道的能量检测;3)接收链路服务质量信息;4) ZigBee信道接入方式;5) 信道频率选择;6) 数据传输和接收。
介质接入控制子层(MAC)MAC 层负责处理所有的物理无线信道访问,并产生网络信号、同步信号;支持PAN连接和分离,提供两个对等MAC实体之间可靠的链路。
MAC 层功能:1)网络协调器产生信标;2)与信标同步;3)支持PAN (个域网) 链路的建立和断开;4)为设备的安全性提供支持;5)信道接入方式采用免冲突载波检测多址接入(CSMA-CA )机制;6)处理和维护保护时隙( GTS )机制;7)在两个对等的MAC 实体之间提供一个可靠的通信链路。
网络层(NWK)ZigBee 协议栈的核心部分在网络层。
网络层主要实现节点加入或离开网络、接收或抛弃其他节点、路由查找及传送数据等功能。
网络层功能:1) 网络发现;2) 网络形成;3) 允许设备连接;4) 路由器初始化;5) 设备同网络连接;6) 直接将设备同网络连接;7) 断开网络连接;8) 重新复位设备;9) 接收机同步;10) 信息库维护。
应用层(APL)ZigBee 应用层框架包括应用支持层(APS)、ZigBee 设备对象(ZDO) 和制造商所定义的应用对象。
应用支持层的功能包括:维持绑定表、在绑定的设备之间传送消息。
ZigBee 设备对象的功能包括:定义设备在网络中的角色(如ZigBee 协调器和终端设备) ,发起和响应绑定请求,在网络设备之间建立安全机制。
ZStack协议栈的分析与开发
20:26 / 6
二、生产工艺过程
(一)菌种培养 1、斜面培养基和培养条件 (1)培养基成分(%)为: 葡萄糖0.5(保藏斜面培养基不加),牛肉膏1.0, 蛋白胨1.0,NaCl0.5,琼脂2.0,pH7.0~7.2。 0.1MPa,灭菌30min后,于30℃保温24h,检 查无菌后,放冰箱备用。 (2)培养条件:菌种活化后于30~32℃恒温培 养18~24h 。
Internet+ Ed栈开发
3-6 Zstack协议栈的分析与开发
目录 Contents
开发内容:Zstack协议栈的分析 开发步骤 开发小结
Education Solutions
Internet+
开发内容:Zstack协议栈的分析
本项目在协调器、路由节点和终端节点组网成功之后,在网络外添加一个监听 节点,用CC2530仿真器连接监听节点和PC。当网络中的节点进行通信时,监听节 点就可以监听到网络中的数据,并通过Packet Sniffer软件可以对监听到的数据进行 分析。图3.32所示为ZStack协议栈分析与开发项目的数据流。
Packet Sniffer可用于捕获、滤除和解析IEEE 802.15.4 MAC层数据,并能够以二 进制的形式存储数据。安装好Packet Sniffer之后,在桌面上会生成快捷方式,双击 该快捷方式即可进入协议选择界面,如图3.33所示,在“Select Protocol and chip type” 下拉框中选择“IEEE802.15.4/ZigBee”,单击“Start”按钮进入Packet Sniffer的工作 界面,如图3.34所示。
无线组网技术-Z-Stack协议架构基本概念
Z-Stack协议栈架构基本概念
CONTENTS
1
什么是ZigBee协议栈
2
如何使用ZigBee协议栈
3 ZigBee协议栈的安装、编译与下载
4
协议定义的是一系列的通信标准,通信双方需要共同按 照这一标准进行正常的数据收发,协议栈是协议的具体实现 形式,通俗的理解为用代码实现的函数库,以便于开发人员 调用。
OSAL术语介绍
资源:任务所占用的实体够可以称为资源。 共享资源:至少可以被两个任务使用的资源。 任务:又称线程,是一个简单的程序的执行过程。 多任务运行:CPU采用任务调度的方法运行多个任务。 内核:在多任务系统中内核负责为每个任务分配CPU时间,切换任 务,完成任务间的通信等。
OSAL术语介绍
如何使用ZigBee协议栈
01 调用协议栈提供的组网函数、加入网络函数,实现网络的建
立与节点的加入。
02 发送设备调用协议栈提供的无线数据发送函数,实现数据
的发送。
03 接收端调用协议栈提供的无线数据接收函数,实现数据的
正确接收。
afStatus_t AF_DataRequest( afAddrType_t *dstAddr, endPointDesc_t *srcEP, uint16 cID, uint16 len, uint8 *buf, uint8 *transID, uint8 options, uint8 radius )
Zigbee的协议分为两部分,IEEE802.15.4定义了物理层 和MAC层技术规范。
ZigBee联盟定义网络层、安全层、应用技术规范、应用 层API。
z-stack的概念
Z-Stack是TI公司针对Zigbee协议推出的一个开源协议栈。
它基于Zigbee协议规范,提供了从物理层到应用层的完整实现,帮助开发者快速构建Zigbee无线应用。
Z-Stack采用模块化设计,方便开发者根据需求进行功能裁剪和扩展。
同时,Z-Stack具有良好的可移植性和可维护性,支持多种平台和开发环境。
Z-Stack主要包括以下几个部分:物理层、MAC层、网络层和应用层。
其中,网络层包括Zigbee协议的核心功能,如拓扑结构、路由机制、安全机制等。
应用层则提供了丰富的API接口,方便开发者进行应用开发。
Z-Stack的发展经历了多个版本,不断优化和完善。
目前,Z-Stack已经成为Zigbee领域广泛应用的协议栈之一,被广泛应用于智能家居、工业自动化、环境监测等领域。
zstack协议栈
zstack协议栈
首先,我们来看看zstack协议栈的虚拟化管理功能。
zstack协议栈提供了一套
完整的虚拟化管理解决方案,包括虚拟机的创建、启动、停止、迁移等功能。
通过zstack协议栈,用户可以方便地管理大规模的虚拟化环境,提高资源利用率,降低
管理成本。
其次,zstack协议栈还提供了丰富的网络管理功能。
在云计算环境中,网络是
至关重要的一部分,而zstack协议栈通过提供虚拟网络、网络安全、负载均衡等功能,帮助用户轻松构建和管理复杂的网络环境,保障云计算环境的稳定和安全。
此外,zstack协议栈还具备存储管理功能。
在云计算环境中,存储是非常重要
的一部分,而zstack协议栈通过提供虚拟化存储、快照、备份等功能,帮助用户高效管理存储资源,保障数据的安全和可靠性。
总的来说,zstack协议栈是一种功能强大的开源软件,它为用户提供了一套完
整的云计算解决方案,包括虚拟化管理、网络管理、存储管理等功能。
通过使用zstack协议栈,用户可以轻松构建和管理复杂的云计算基础设施,提高资源利用率,降低管理成本,保障云计算环境的稳定和安全。
在未来,随着云计算技术的不断发展,zstack协议栈将继续发挥重要作用,为
用户提供更加优质的云计算解决方案,推动云计算技术的进步和发展。
相信在不久的将来,zstack协议栈将成为云计算领域的重要支撑,为用户带来更加便利和高效
的云计算体验。
zstack协议栈知识点总结
zstack协议栈知识点总结1. Z-Stack 协议栈架构Z-Stack 协议栈的架构分为四个层次:应用层、安全层、网络层和 MAC 层。
- 应用层:提供应用程序接口,实现应用层协议的处理和应用功能的实现。
- 安全层:实现对数据的加密和认证,确保通信的安全性。
- 网络层:实现 ZIGBEE 网络节点的加入、路由和寻径功能。
- MAC 层:实现对无线通信介质的访问和管理,包括 CSMA/CA 协议、ACK 确认和重传机制等。
2. Z-Stack 协议栈特点Z-Stack 协议栈具有以下几个特点:- 符合 ZigBee 标准:Z-Stack 协议栈严格遵循 ZigBee 标准,保证了与其他 ZigBee 设备的兼容性。
- 易用性:Z-Stack 提供了丰富的开发工具和示例代码,开发者可以快速上手进行开发。
- 灵活性:Z-Stack 支持不同的硬件平台和操作系统,适用于各种嵌入式系统。
- 安全性:Z-Stack 提供了多种安全机制,包括 AES 加密、认证和密钥管理,保证了通信的安全性。
3. Z-Stack 协议栈功能Z-Stack 协议栈实现了 ZigBee 协议的各种功能,包括网络组建、路由管理、数据传输和安全保障等。
- 网络组建:Z-Stack 支持 ZigBee 网络的组建和维护,包括协调器、路由器和终端设备的加入和退出。
- 路由管理:Z-Stack 负责 ZigBee 网络中的路由选择和寻径功能,保证数据的可靠传输。
- 数据传输:Z-Stack 实现了数据的传输和协议控制,包括数据帧封装、数据确认和重传机制。
- 安全保障:Z-Stack 提供了数据的加密、认证和密钥管理功能,保证通信的安全性。
4. Z-Stack 协议栈应用Z-Stack 协议栈广泛应用于物联网、智能家居、工业控制和传感器网络等领域,实现设备之间的无线通信和数据交换。
- 物联网应用:Z-Stack 协议栈可以用于连接各种传感器、执行器和控制器,构建物联网设备之间的通信网。
06_第6章 Zstack协议栈
Zstack协议栈是一个半开源的协议栈, 其中MAC层和ZMAC层的源码没有全部开源, 关于他们的具体内容,在实际的工程开发中也不需要详细了解。
- 12 -
6.2.2 Zstack协议栈
ZDO:ZDO设备对象目录。
ZMac:MAC层目录,包括MAC层参数及MAC层的 LIB库函数回调处理函数。 Zmain:主函数目录,包括入口函数及硬件配置文 件。 Output:输出文件目录,由IAR自动生成。
- 13 -
6.2.3 Zigbee协议栈与Zstack对比
6.3.1 { Common文件夹
uint16 Hal_ProcessEvent( uint8 task_id, uint16 events )
uint8 *msgPtr; (void)task_id; 协议栈固有的函数, 硬件事件处理函数 Hal_ProcessEvent( ) //系统消息事件 在使用的时候可以直 if ( events & SYS_EVENT_MSG ) 接调用,不需要大幅 { Hal_ProcessEvent( )函数在APP层中的任务事件处理中调用,用于对 度的修改 msgPtr = osal_msg_receive(Hal_TaskID); 相应的硬件事件作出处理,具体包括系统消息事件、LED闪烁事件、按 while (msgPtr) { 键处理事件和睡眠模式等。 osal_msg_deallocate( msgPtr ); msgPtr = osal_msg_receive( Hal_TaskID ); } return events ^ SYS_EVENT_MSG; } //LED闪烁事件 if ( events & HAL_LED_BLINK_EVENT ) { #if (defined (BLINK_LEDS)) && (HAL_LED == TRUE) HalLedUpdate(); #endif return events ^ HAL_LED_BLINK_EVENT; } - 24 -
第6章Zstack协议栈讲解
6.2.1 Zigbee协议栈
➢ Zigbee协议栈结构可参考本书的第2章讲解,包括物理层、MAC层、
NWK(网络层)、APL(应用层)、应用支持子层APS、应用程序框架 AF、设备对象ZDO层
➢ APL(应用层):Zigbee应用层包括应用支持子层APS、应用程序框架AF、
Zigbee设备对象ZDO等。
服务层处理函数,比如加密。 ➢ Tools:工程配置目录,包括空间划分及ZStack相
关配置信息。
- 12 -
6.2.2 Zstack协议栈
➢ ZDO:ZDO设备对象目录。 ➢ ZMac:MAC层目录,包括MAC层参数及MAC层的
LIB库函数回调处理函数。 ➢ Zmain:主函数目录,包括入口函数及硬件配置文
-4-
6.1 概述
双击此文件安装协议
➢ Zstack文件结构栈相关文件
安装完成后生成此文件
协议栈各目录文件
说明文档
工程文档
工具文件 -5-
6.2 Zstack软件架构
➢Zstack协议栈符合Zigbee协议结构,由物理层、MAC层、网
络层和应用层组成。
➢物理层和MAC层由IEEE802.15.4定义,网络层和应用层由
➢ 设备对象层ZDO:远程设备通过ZDO请求描述信息,接收到这些请求时,ZDO
会调用配置对象获取相应的描述符值。ZDO通过APSME-SAP接口提供绑定服务。
- 10 -
6.2.2 Zstack协议栈
➢ Zstack协议栈可以从TI的官方网站下载(截止本书出版时,Zstack协议栈的最
新版本为Zstack-CC2530-2.5.1a),其下载网址为,下载完成后, 双击可执行程序即可安装。使用IAR 8.10版本打开Zstack-CC2530-2.5.1a中的 SampleApp工程,其协议栈代码文件夹
TIZstack协议栈开发环境和工作流程精编
T I Z s t a c k协议栈开发环境和工作流程精编 Document number:WTT-LKK-GBB-08921-EIGG-22986TI Z-stack协议栈开发环境和工作流程By KuangJunBinKuangJunBin:如您对本项目感兴趣或者有任何疑问,欢迎与我一起探讨:。
谢谢您的阅读!?系统软件设计是在硬件设计的基础上进行的,良好的软件设计是实现系统功能的重要环节,也是提高系统性能的关键所在。
节点设计基于通用性及便于开发的考虑,移植了TI公司的Z-Stack协议栈,其主要特点就是其兼容性,完全支持IEEE 802. 15. 4/ZigBee的CC2430片上系统解决方案。
Z-Stack还支持丰富的新特性,如无线下载,可通过ZigBee网状网络(Mesh Network)下载节点更新。
图 ZigBee节点开发环境TI的Z-Stack装载在一个基于IAR开发环境的工程里。
强大的IAR Embedded Workbench除了提供编译下载功能外,还可以结合编程器进行单步跟踪调试和监测片上寄存器、Flash数据等。
Z-Stack根据IEEE 802. 和ZigBee标准分为以下几层:API(Application Programming Interface),HAL (Hardware Abstract Layer),MAC(Media Access Control), NWK(Zigbee Network Layer),OSAL (Operating System Abstract System),Security,Ser vice,ZDO(Zigbee Device Objects)。
使用IAR打开工程文件后,即可查看到整个协议栈从HAL层到APP层的文件夹分布。
该协议栈可以实现复杂的网络链接,在协调器节点中实现对路由表和绑定表的非易失性存储,因此网络具有一定的记忆功能。
Z-Stack采用操作系统的思想来构建,采用事件轮循机制,当各层初始化之后,系统进入低功耗模式,当事件发生时,唤醒系统,开始进入中断处理事件,结束后继续进入低功耗模式。
ZStack协议栈实验
ZStack协议栈实验概述:ZStack协议栈是一个用于物联网(IoT)设备的开源协议栈,它提供了一套标准的通信协议,使得不同的物联网设备能够互相通信和协同工作。
本文将介绍ZStack协议栈的实验内容,包括实验环境的搭建、实验步骤和实验结果的分析。
实验环境搭建:为了进行ZStack协议栈的实验,首先需要搭建实验环境。
以下是搭建实验环境的步骤:1. 硬件准备:准备一台开发板或者物联网设备,确保其与计算机可以进行连接。
2. 软件准备:下载并安装ZStack协议栈的开发工具包,该工具包包含了开发ZStack协议栈所需的各种工具和库文件。
3. 连接硬件:使用USB线将开发板或物联网设备与计算机连接,并确保连接成功。
4. 配置环境:根据ZStack协议栈的官方文档,配置开发环境并导入相应的库文件。
实验步骤:实验环境搭建完成后,可以开始进行ZStack协议栈的实验。
以下是实验步骤的简要介绍:1. 创建网络:使用ZStack协议栈的工具包,创建一个物联网设备网络。
可以选择使用其中的示例代码,或者根据实际需求编写代码。
2. 添加设备:将其他物联网设备添加到已创建的网络中,以建立设备之间的通信。
可以使用工具包提供的API或者示例代码进行设备的添加。
3. 通信测试:进行设备之间的通信测试,例如发送数据包、接收数据包、远程控制等。
通过观察和分析通信结果,可以评估ZStack协议栈的性能和可靠性。
4. 功能扩展:根据实际需求,对ZStack协议栈进行功能扩展和定制化开发。
可以添加更多的传感器、控制模块或者其他自定义功能。
实验结果分析:完成实验步骤后,可以对实验结果进行分析。
以下是分析实验结果的一些建议:1. 性能评估:分析实验中的通信延迟、传输速率、能耗等指标,评估ZStack协议栈的性能。
可以与其他协议栈进行对比,以得出结论。
2. 可靠性分析:观察实验中的通信稳定性,分析出现的错误或异常情况,并提出改进建议。
3. 扩展性评估:根据实验中的功能扩展操作,评估ZStack协议栈的扩展性和灵活性。
zstack协议栈
zstack协议栈ZStack协议栈是针对无线物联网应用而开发的一款协议栈,它提供了一套完整的协议栈解决方案,帮助开发者快速构建和部署无线物联网设备。
ZStack协议栈支持多种无线技术,例如Zigbee、BLE和Wi-Fi,具备优秀的可扩展性和互操作性。
ZStack协议栈的架构包括应用层、网络层、MAC层和物理层。
应用层提供了常见的网络协议和应用框架,方便开发者进行应用开发。
网络层负责网络拓扑的建立和维护,实现了路由协议和网络发现机制,确保设备能够稳定地通信。
MAC层管理设备的通信资源,控制数据传输和接收。
物理层提供无线通信的信号调制和解调功能,保证数据的传输质量。
ZStack协议栈支持自组网功能,可以实现设备之间的自动组网和自动配置。
设备通过探测周围的网络环境和邻近设备来寻找可用的网络,并自动加入。
自组网功能能够极大地简化设备的部署和配置工作,提高了整个系统的可扩展性。
ZStack协议栈还支持多种安全机制,保护设备和网络的安全。
它提供了身份验证、数据加密和完整性保护等安全功能,确保数据在传输过程中不被篡改或窃取。
安全机制的支持可以保护用户的隐私和资产,提高整个系统的可靠性。
ZStack协议栈具备较低的资源需求,适用于资源有限的物联网设备。
它采用了高效的数据压缩和传输算法,减少了数据传输的带宽和能耗消耗。
对于那些电池供电的物联网设备,这一特性非常重要,可以延长设备的电池寿命。
ZStack协议栈还支持多种无线网络技术的混合使用,例如Zigbee和Wi-Fi的混合组网。
这种混合组网的方式可以充分发挥各种无线技术的特点,提高整个系统的灵活性和性能。
除了基本的协议栈功能,ZStack还提供了强大的开发工具和调试工具,帮助开发者进行快速开发和调试。
开发工具包括代码库、示例代码和开发文档,方便开发者参考和使用。
调试工具提供了设备调试和网络分析的功能,帮助开发者快速定位和解决问题。
总之,ZStack协议栈是一款功能强大的无线物联网协议栈,适用于各种无线物联网设备的开发和部署。
描述Z-Stack协议栈中原语通信方式并举例说明
描述Z-Stack协议栈中原语通信方式并举例说明Z-Stack是一种嵌入式协议栈,旨在支持低功耗、无线传感器网络的开发。
原语是Z-Stack协议栈中的一种通信方式,它是指具有原子操作特性的低层通信功能,用于实现更高层次的通信协议。
在Z-Stack协议栈中,原语被组织成不同的层次,每个层次都有一个特定的任务,以实现某种特定的通信协议。
这些层次包括应用层、ZDO层、网络层、MAC层和PHY层。
原语通信方式是指在同一层次的协议栈中,使用预定义的接口实现通信的方式。
因为通信的基本操作被封装在预定义的接口中,所以在不同的应用场景下,可以使用不同的协议来实现相同的通信功能。
举个例子,假设我们想在一个无线传感器网络中实现数据采集和传输。
我们可以使用Z-Stack协议栈中的网络层和MAC层,通过原语通信方式来实现通信。
首先,我们需要在网络层中定义一些通信协议,以实现数据的传输。
例如,我们可以使用广播协议来将数据从一个节点传输到另一个节点,或者使用多跳协议来实现跨越多个节点的数据传输。
其次,我们需要在MAC层中实现这些通信协议。
我们可以使用Z-Stack协议栈中预定义的原语通信方式,如MAC数据请求原语和MAC数据响应原语,来实现数据的传输。
这些原语可以在不同的节点之间进行通信,以实现数据的采集和传输。
最后,我们可以使用Z-Stack协议栈中的API函数来控制节点的行为。
例如,我们可以使用API函数来设置节点的工作模式、修改通信协议和发送数据等。
综上所述,Z-Stack协议栈中的原语通信方式是一种低层次的通信方式,它可以帮助我们实现更高层次的通信协议。
在实际应用中,可以根据需要选择不同的通信协议和原语,以满足不同的应用需求。
Z-Stack协议栈中的原语通信方式是指在协议栈内部,不同层次之间的通信方式。
在Z-Stack协议栈中,通信方式主要包括下面几种原语:1. MAC数据请求(MAC Data Request):该原语用于发送MAC层数据。
第六章 Zstack协议栈
3
第一节 ZSTACK软件架构
4
第一节 ZSTACK软件架构
12
第二节 HAL层分析------TARGET文件夹
1. Config文件夹 Config文件夹中包含了hal_board_cfg.h,在hal_board_cfg.h中定
义了硬件CC2530硬件资源的配置,比如GPIO、DMA、ADC等。 2. Drivers文件夹 在Drivers文件中定义了硬件资源的驱动文件
●参数percent,指LED亮和灭的所用事件占空比,例 如亮和灭所用的事件比例为1∶1,则占空比为 100/2 = 50。
●参数period,指LED闪烁一个周期所需要的时间, 以毫秒为单位。
15
第三节 NWK层分析
Zstack的NWK层负 责的功能有:节点 地址类型的分配、 协议栈模板、网络 拓扑结构、网络地 址的分配和选择等。 在Zstack协议栈中, NWK层的结构如图 所示
层处理函数,比如加密。 ●Tools:工程配置目录,包括空间划分及ZStack相关配置信
息。 ●ZDO:ZDO设备对象目录。
●ZMac:MAC层目录,包括MAC层参数及MAC层的LIB库函 数回调处理函数。
●Zmain:主函数目录,包括入口函数及硬件配置文件。 ●Output:输出文件目录,由IAR自动生成。
●APP:应用层目录,用户可以根据需求添加自己的任务。这个目 录中包含了应用层和项目的主要内容,在协议栈里面一般是以操作 任务实现的。
zstack协议栈
zstack协议栈ZStack协议栈。
ZStack协议栈是一种基于嵌入式系统的无线网络协议栈,它为物联网设备提供了丰富的网络连接能力。
本文将对ZStack协议栈的特点、应用场景以及优势进行介绍。
ZStack协议栈的特点。
ZStack协议栈采用了IEEE 802.15.4标准,支持多种无线通信协议,包括ZigBee、Thread等。
它具有低功耗、低成本、低复杂度的特点,适用于各种物联网设备,如智能家居、智能城市、工业自动化等领域。
同时,ZStack协议栈还具有高度的灵活性和可扩展性,可以满足不同应用场景的需求。
ZStack协议栈的应用场景。
ZStack协议栈广泛应用于物联网设备中,如智能灯具、智能插座、智能传感器等。
它可以实现设备之间的互联互通,实现智能化控制和管理。
在智能家居领域,ZStack协议栈可以实现家庭设备的智能化联动,提升居住体验;在工业自动化领域,ZStack协议栈可以实现设备之间的远程监控和控制,提高生产效率和安全性。
ZStack协议栈的优势。
ZStack协议栈具有以下几点优势:1. 低功耗,ZStack协议栈采用了先进的功耗管理技术,可以实现设备长时间待机,延长电池寿命。
2. 高可靠性,ZStack协议栈支持网络自组网和路由功能,可以实现设备之间的稳定通信,提高网络覆盖范围和可靠性。
3. 易部署,ZStack协议栈提供了丰富的开发工具和文档,开发者可以快速部署和定制自己的物联网应用。
4. 多协议支持,ZStack协议栈支持多种无线通信协议,可以实现设备之间的互联互通,满足不同应用场景的需求。
总结。
ZStack协议栈作为一种基于嵌入式系统的无线网络协议栈,具有低功耗、高可靠性、易部署、多协议支持等优势,适用于各种物联网设备,并在智能家居、智能城市、工业自动化等领域得到广泛应用。
未来,随着物联网技术的不断发展,ZStack协议栈将在物联网领域发挥越来越重要的作用。
ZigBee协议栈Z-Stack开发指南
2.ZigBee2.1设备类型(Device Types)在ZigBee网络中存在三种逻辑设备类型:Coordinator(协调器),Router(路由器)和End-Device(终端设备)。
ZigBee网络由一个Coordinator以及多个Router和多个End_Device组成。
上图是一个简单的ZigBee网络示意图。
其中黑色节点为Coordinator,红色节点为Router,白色节点为End-Device。
2.1.1Coordinator(协调器)协调器负责启动整个网络。
它也是网络的第一个设备。
协调器选择一个信道和一个网络ID(也称之为PAN ID,即Personal Area Network ID),随后启动整个网络。
协调器也可以用来协助建立网络中安全层和应用层的绑定(bindings)。
注意,协调器的角色主要涉及网络的启动和配置。
一旦这些都完成后,协调器的工作就像一个路由器(或者消失go away)。
由于ZigBee网络本身的分布特性,因此接下来整个网络的操作就不在依赖协调器是否存在。
2.1.2Router(路由器)路由器的功能主要是:允许其他设备加入网络,多跳路由和协助它自己的由电池供电的儿子终端设备的通讯。
通常,路由器希望是一直处于活动状态,因此它必须使用主电源供电。
但是当使用树群这种网络模式时,允许路由间隔一定的周期操作一次,这样就可以使用电池给其供电。
2.1.3End-Device(终端设备)终端设备没有特定的维持网络结构的责任,它可以睡眠或者唤醒,因此它可以可以是一个电池供电设备。
通常,终端设备对存储空间(特别是RAM的需要)比较小。
注意:在Z-Stack 1.4.1中一个设备的类型通常在编译的时候通过编译选项(ZDO_COORDINATOR 和RTR_NWK)确定。
所有的应用例子都提供独立的项目文件来编译每一种设备类型。
2.2栈配置(Stack Profil e)栈参数的集合需要被配置为一定的值,连同这些值在一起被称之为栈配置。
Z-Stack协议栈的简单总结
Z-Stack协议栈的简单总结Z-Stack 是通过UCOS来实现的,其中协议的各个层被分配一个任务,共有如下任务:Hal、mac、nwk、MT(Monitor Test简称)、APS、ZDApp和SampleApp。
Hal、mac、nwk、APS就不介绍了(主要完成zigbee协议的各个层)。
TI为了使用户调试方便而编写一些上位机软件(如SmartRF04Prog、sniffer、Z-Location Engine等),而MT(Monitor Test)是用来完成协议栈与这些上位机软件的通信的,通过串口来完成,因而MT中主要完成的是串口指令的收发机解析,并经该消息发给OS,由操作系统对这些消息进行处理。
ZDApp(ZigBee Deviece Application)是zigbee设备的应用层处理函数,可以通过这层的函数来与网络层和APS层进行通信,如完成组网,加入网络,端点匹配、绑定等。
SampleApp是用户完成的部分(也分配了一个任务),主要在这里完成自己的编程设置。
OS中每个任务都有一个任务初始化函数和任务事件处理回调函数,如SampleApp_Init( taskID )和SampleApp_ProcessEvent( byte task_id, UINT16 events )。
如果需要深入了解任务的工作机制,如任务管理、调度任务的同步与通信等,可以去看uC/OS得相关资料。
而任务下面又划分很多事件(可以把事件理解为当前任务下的一些小的任务)。
在OS中事件是为了实现任务间的同步与通信的,如信号量、消息邮箱和消息队列。
单片机基础对于OS不胜了解的可以这样来理解,自己当初也是这样来理解的(可以把任务中的发送事件理解为置标志位,在本任务或另一个任务中查询标志位来完成相应操作)在uCOS中任务和事件的处理是由操作系统来完成的,任务按照优先级来调度,每个任务有自己的任务控制块来决定和记录任务的执行情况,而事件有事件控制块。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
TI Z-stack协议栈开发环境和工作流程系统软件设计是在硬件设计的基础上进行的,良好的软件设计是实现系统功能的重要环节,也是提高系统性能的关键所在。
节点设计基于通用性及便于开发的考虑,移植了TI公司的Z-Stack协议栈,其主要特点就是其兼容性,完全支持IEEE 802.15.4/ZigBee的CC2430片上系统解决方案。
Z-Stack还支持丰富的新特性,如无线下载,可通过ZigBee网状网络(Mesh Network)下载节点更新。
图 ZigBee节点开发环境TI的Z-Stack装载在一个基于IAR开发环境的工程里。
强大的IAR Embedded Workbench除了提供编译下载功能外,还可以结合编程器进行单步跟踪调试和监测片上寄存器、Flash数据等。
Z-Stack根据IEEE 802.15.4和ZigBee标准分为以下几层:API(Application Programming Interface),HAL(Hardware Abstract Layer),MAC(Media Access Control),NWK(Zigbee Network Layer),OSAL (Operating System Abstract System),Security,Service,ZDO(Zigbee Device Objects)。
使用IAR打开工程文件SampleApp.eww后,即可查看到整个协议栈从HAL层到APP层的文件夹分布。
该协议栈可以实现复杂的网络链接,在协调器节点中实现对路由表和绑定表的非易失性存储,因此网络具有一定的记忆功能。
Z-Stack采用操作系统的思想来构建,采用事件轮循机制,当各层初始化之后,系统进入低功耗模式,当事件发生时,唤醒系统,开始进入中断处理事件,结束后继续进入低功耗模式。
如果同时有几个事件发生,判断优先级,逐次处理事件。
这种软件构架可以极大地降级系统的功耗。
整个Z-stack的主要工作流程,大致分为系统启动,驱动初始化,OSAL初始化和启动,进入任务轮循几个阶段,下面将逐一详细分析。
图 Z-Stack系统运行流程图Figure . The Flow Chart of Z-Stack系统初始化系统上电后,通过执行ZMain文件夹中ZMain.c的ZSEG int main()函数实现硬件的初始化,其中包括关总中断osal_int_disable(INTS_ALL)、初始化板上硬件设置HAL_BOARD_INIT()、初始化I/O口InitBoard(OB_COLD)、初始化HAL 层驱动HalDriverInit()、初始化非易失性存储器sal_nv_init(NULL)、初始化MAC层ZMacInit()、分配64位地址zmain_ext_addr()、初始化操作系统osal_init_system()等。
硬件初始化需要根据HAL文件夹中的hal_board_cfg.h文件配置寄存器8051的寄存器。
TI官方发布Z-stack的配置针对的是TI官方的开发板CC2430DB、CC2430EMK等,如采用其他开发板,则需根据原理图设计改变hal_board_cfg.h 文件配置,例如本方案制作的实验板与TI官方的I/O口配置略有不同,其中状态指示LED2的需要重新设置LED2控制引脚口、通用I/O口方向和控制函数定义等。
当顺利完成上述初始化时,执行osal_start_system()函数开始运行OSAL 系统。
该任务调度函数按照优先级检测各个任务是否就绪。
如果存在就绪的任务则调用tasksArr[]中相对应的任务处理函数去处理该事件,直到执行完所有就绪的任务。
如果任务列表中没有就绪的任务,则可以使处理器进入睡眠状态实现低功耗。
程序流程如图3-13所示。
osal_start_system()一旦执行,则不再返回Main()函数。
OSAL任务调度流程图Figure . The Flow Chart of OSAL SchedulerOSAL任务OSAL是协议栈的核心,Z-stack的任何一个子系统都作为OSAL的一个任务,因此在开发应用层的时候,必须通过创建OSAL任务来运行应用程序。
通过osalInitTasks()函数创建OSAL任务,其中TaskID为每个任务的唯一标识号。
任何OSAL任务必须分为两步:一是进行任务初始化;二是处理任务事件。
任务初始化主要步骤如下:(1)初始化应用服务变量。
const pTaskEventHandlerFn tasksArr[]数组定义系统提供的应用服务和用户服务变量,如MAC层服务macEventLoop、用户服务SampleApp_ProcessEvent 等(2)分配任务ID和分配堆栈内存void osalInitTasks(void)主要功能是通过调用osal_mem_alloc()函数给各个任务分配内存空间,和给各个已定义任务指定唯一的标识号。
(3)在AF层注册应用对象通过填入endPointDesc_t数据格式的EndPoint变量,调用afRegister( )在AF层注册EndPoint应用对象。
通过在AF层注册应用对象的信息,告知系统afAddrType_t地址类型数据包的路由端点,例如用于发送周期信息的SampleApp_Periodic_DstAddr和发送LED闪烁指令的SampleApp_Flash_DstAddr。
(4)注册相应的OSAL或则HAL系统服务在协议栈中,Z-stack提供键盘响应和串口活动响应两种系统服务,但是任何Z-Stask任务均不自行注册系统服务,两者均需要由用户应用程序注册。
值得注意的是,有且仅有一个OSAL Task可以注册服务。
例如注册键盘活动响应可调用RegisterForKeys()函数。
(5)处理任务事件处理任务事件通过创建“ApplicationName”_ProcessEv ent()函数处理。
一个OSAL任务除了强制事件(Mandatory Events)之外还可以定义15个事件。
SYS_EVENT_MSG(0x8000)是强制事件。
该事件主要用来发送全局的系统信息,包括以下信息:AF_DATA_CONFIRM_CMD:该信息用来指示通过唤醒AF DataRequest()函数发送的数据请求信息的情况。
ZSuccess确认数据请求成功的发送。
如果数据请求是通过AF_ACK_REQUEST置位实现的,那么ZSussess可以确认数据正确的到达目的地。
否则,ZSucess仅仅能确认数据成功的传输到了下一个路由。
AF_INCOMING_MSG_CMD:用来指示接收到的AF信息。
KEY_CHANGE:用来确认按键动作。
ZDO_NEW_DSTADDR:用来指示自动匹配请求。
ZDO_STATE_CHANGE:用来指示网络状态的变化。
网络层信息Zigbee设备有两种网络地址:1个是64位的IEEE地址,通常也叫作MAC 地址或者扩展地址(Extended address),另一个是16位的网络地址,也叫做逻辑地址(Logical address)或者短地址。
64位长地址是全球唯一的地址,并且终身分配给设备。
这个地址可由制造商设定或者在安装的时候设置,是由IEEE 来提供。
当设备加入Zigbee网络被分配一个短地址,在其所在的网络中是唯一的。
这个地址主要用来在网络中辨识设备,传递信息等。
协调器(Coordinator)首先在某个频段发起一个网络,网络频段的定义放在DEFAULT_CHANLIST配置文件里。
如果ZDAPP_CONFIG_PANID定义的PAN ID是0xFFFF(代表所有的PAN ID),则协调器根据它的IEEE地址随机确定一个PAN ID。
否则,根据ZDAPP_CONFIG_PANID的定义建立PAN ID。
当节点为Router或者End Device时,设备将会试图加入DEFAULT_ CHANLIST所指定的工作频段。
如果ZDAPP_CONFIG_PANID没有设为0xFFFF,则Router或者End Device会加入ZDAPP_CONFIG_PANID所定义的PAN ID。
设备上电之后会自动的形成或加入网络,如果想设备上电之后不马上加入网络或者在加入网络之前先处理其他事件,可以通过定义HOLD_AUTO_START来实现。
通过调用ZDApp_StartUpFromApp( )来手动定义多久时间之后开始加入网络。
设备如果成功的加入网络,会将网络信息存储在非易失性存储器(NV Flash)里,掉电后仍然保存,这样当再次上电后,设备会自动读取网络信息,这样设备对网络就有一定的记忆功能。
对NV Flash的动作,通过NV_RESTORE()和NV_ITNT()函数来执行。
有关网络参数的设置大多保存在协议栈Tools文件夹的f8wConfig.cfg里。
路由Z-Stack采用无线自组网按需平面距离矢量路由协议AODV,建立一个Hoc 网络,支持移动节点,链接失败和数据丢失,能够自组织和自修复。
当一个Router 接受到一个信息包之后,NMK层将会进行以下的工作:首先确认目的地,如果目的地就是这个Router的邻居,信息包将会直接传输给目的设备;否则,Router 将会确认和目的地址相应的路由表条目,如果对于目的地址能找到有效的路由表条目,信息包将会被传递到该条目中所存储的下一个hop地址;如果找不到有效的路由表条目,路由探测功能将会被启动,信息包将会被缓存直到发现一个新的路由信息。
ZigBee End Device不会执行任何路由函数,它只是简单的将信息传送给前面的可以执行路由功能的父设备。
因此,如果End Device想发送信息给另外一个End Device,在发送信息之间将会启动路由探测功能,找到相应的父路由节点。
TI Z-stack协议栈学习-添加新任务1.Zstack中如何实现自己的任务在Zstack(TI的Zigbee协议栈)中,对于每个用户自己新建立的任务通常需要两个相关的处理函数,包括:(1).用于初始化的函数,如:SampleApp_Init(),这个函数是在osalInitTasks()这个osal(Zstack中自带的小操作系统)中去调用的,其目的就是把一些用户自己写的任务中的一些变量,网络模式,网络终端类型等进行初始化;(2).用于引起该任务状态变化的事件发生后所需要执行的事件处理函数,如: SampleApp_ProcessEvent(),这个函数是首先在const pTaskEventHandlerFn tasksArr[]中进行设置(绑定),然后在osalInitTasks()中如果发生事件进行调用绑定的事件处理函数.下面分3个部分分析.1.用户自己设计的任务代码在Zstack中的调用过程(1).main()执行(在ZMain.c中)main()---> osal_init_system()(2).osal_init_system()调用osalInitTasks(),(在OSAL.c中)osal_init_system()--->osalInitTasks()(3).osalInitTasks()调用SampleApp_Init(),(在OSAL_SampleApp.c中)osalInitTasks()--->SampleApp_Init()在osalInitTasks()中实现了多个任务初始化的设置,其中macTaskInit(taskID++)到ZDApp_Init( taskID++ )的几行代码表示对于几个系统运行初始化任务的调用,而用户自己实现的SampleApp_Init()在最后,这里taskID随着任务的增加也随之递增.所以用户自己实现的任务的初始化操作应该在osalInitTasks()中增加.void osalInitTasks( void ){uint8 taskID = 0;//这里很重要, 调用osal_mem_alloc()为当前OSAL中的各任务分配存储空间(实际上是一个任//务数组),并用tasksEvents指向该任务数组(任务队列).tasksEvents =(uint16 *)osal_mem_alloc(sizeof(uint16) * tasksCnt);osal_memset(tasksEvents,0,(sizeof(uint16) *tasksCnt));//将taskSEvents 所指向的空间清零macTaskInit(taskID++);nwk_init(taskID++);Hal_Init(taskID++);#if defined(MT_TASK)MT_TaskInit(taskID++);#endifAPS_Init(taskID++);ZDApp_Init(taskID++);SampleApp_Init(taskID); //用户自己需要添加的任务}2.任务处理调用的重要数据结构这里要解释一下,在Zstack里,对于同一个任务可能有多种事件发生,那么需要执行不同的事件处理,为了方便,对于每个任务的事件处理函数都统一在一个事件处理函数中实现,然后根据任务的ID号(task_id)和该任务的具体事件(events)调用某个任务的事件处理函数,进入了该任务的事件处理函数之后,再根据events再来判别是该任务的哪一种事件发生,进而执行相应的事件处理.pTaskEventHandlerFn是一个指向函数(事件处理函数)的指针,这里实现的每一个数组元素各对应于一个任务的事件处理函数,比如SampleApp_ProcessEvent对于用户自行实现的事件处理函数uint16 SampleApp_ProcessEvent( uint8 task_id,uint16 events ),所以这里如果我们实现了一个任务,还需要把实现的该任务的事件处理函数在这里添加.const pTaskEventHandlerFn tasksArr[] = {macEventLoop,nwk_event_loop,Hal_ProcessEvent,#if defined( MT_TASK ) //一个MT任务命令MT_ProcessEvent,#endifAPS_event_loop,ZDApp_event_loop,SampleApp_ProcessEvent};注意, tasksEvents和tasksArr[]里的顺序是一一对应的,tasksArr[]中的第i 个事件处理函数对应于tasksEvents中的第i个任务的事件.//计算出任务的数量const uint8 tasksCnt =sizeof(tasksArr)/sizeof(tasksArr[0]);uint16 *tasksEvents;3. 对于不同事件发生后的任务处理函数的调用osal_start_system()很重要,决定了当某个任务的事件发生后调用对应的事件处理函数void osal_start_system(void){#if!defined(ZBIT)for(;;)//Forever Loop#endif{uint8 idx = 0;Hal_ProcessPoll();//This replaces MT_SerialPoll() and//osal_check_timer().//这里是轮训任务队列,并检查是否有某个任务的事件发生do{if (tasksEvents[idx])//Task is highest priority that is ready.{break;}}while(++idx<tasksCnt);if(idx<tasksCnt){uint16 events;halIntState_t intState;HAL_ENTER_CRITICAL_SECTION(intState);events=tasksEvents[idx];//处理该idx的任务事件,是第idx个任务的事件发生了tasksEvents[idx] = 0; // Clear the Events for this task.HAL_EXIT_CRITICAL_SECTION(intState);//对应调用第idx个任务的事件处理函数,用events说明是什么事件events = (tasksArr[idx])( idx, events );//当没有处理完,把返回的events继续放到tasksEvents[idx]当中HAL_ENTER_CRITICAL_SECTION(intState);tasksEvents[idx] |= events; // Add back unprocessed events to the current task.HAL_EXIT_CRITICAL_SECTION(intState);}#if defined( POWER_SAVING )else // Complete pass through all task events with no activity?{osal_pwrmgr_powerconserve(); // Put the processor/system into sleep}#endif}}2.Z-stack添加一个新的任务在osalInitTasks()和tasksArr[]添加相应的项就可以了。