当前位置:首页 > 物联网 > 《物联网技术》杂志
[导读]摘要:Z-STACK协议栈可为基于开放式协议的应用开发提供强大的功能支持。为了理清协议栈的工作过程,文 中在简要说明了 Z-STACK协议栈的层次结构及任务调度流程的基础上,结合具体案例,剖析了基于Z-STACK协议栈 的应用开发流程。

引言

Z-STACK是TI公司推出的符合Zigbee2006规范且可支持多种平台(包括CC2430/1)的协议栈。因其采用分布式寻址方案及简化的AODV路由,故能适应无线传感器网络特点,并能在有移动节点、链路失效和丢包的环境下工作。为了方便任务管理,Z-STACK协议栈定义了完全构建在应用层上的OS-AL层(OperationSystemAbstractionLayer,操作系统抽象层),该层可以隔离Z-STACK协议栈和特定硬件系统,并采用轮询及优先级控制方式实现任务调度,也支持IAR交互式及命令行编译配置。其强大的协议栈功能使Z-STACK在竞争激烈的ZigBee领域占有很重要的地位,但Z-STACK协议栈相对复杂、开发周期较长。本文主要介绍Z-STACK协议栈的层次结构、任务调度流程,同时结合具体案例分析了基于Z-STACK协议栈的应用开发流程。

1  Z-STACK协议栈的层次结构

Z-STACK协议栈总体上由硬件抽象层HAL),操作系统抽象层OSAL)和ZigBee协议各层组成"。HAL层提供Timer,I/O.UART等资源的API;OSAL层负责任务管理,它采用轮询机制,并且引入了优先级控制,可以隔离协议栈和特定硬件系统,因而用户无须过多了解具体平台的底层,就可以利用OSAL提供的丰富工具实现各种功能,包括任务注册、初始化和启动,同步任务,多任务间的消息传递,中断处理,定时器控制,内存定位等2:;ZigBee协议各层集成有任务事件。从程序执行角度看,一般主要接触的是HAL层和OSAL

2  Z-STACK协议栈的任务调度流程

Z-STACK的任务管理主要由OSAL层完成。在OSAL中判断事件发生是通过tasksEvents[idx]任务事件数组来进行的在OSAL初始化时,tasksEvents[]数组被初始化为零,一旦系统中有事件发生,就用osal_set_event()函数把tasksEvents[taskID]赋值为对应的事件。不同的任务有不同的taskID,这样,任务事件数组tasksEvents中就会表示系统中哪些任务存在没有处理的事件,然后调用各任务处理对应的事件。

3  基于Z-STACK协议栈的应用开发流程

3.1  初始化应用服务变量及分配任务ID

以Z-STACK自带的OSAL_GenericApp.c文件为例,tasksArr[]和osallnit Tasks()主要完成应用服务变量的初始化及任务ID的分配。

tasksArr[]数组里存放了所有任务事件处理函数的指针(默认有6个任务),可标识与其对应的任务。tasksArr[]定义如下:

constpTaskEventHandlerFntasksArr[]={

...

ZDApp_event_loop,};

osallnitTasks()是OSAL的任务初始化函数,所有任务的初始化工作都在这里面完成,并且自动给每个任务分配一个ID。osallnitTasks()的定义如下:

void osallnitTasks(void){uint8taskID=0; 

tasksEvents=(uintl6*)osal  mem  alloc(sizeof(uintl6)*tasksCnt);

osal_memset(tasksEvents,0,(sizeof(uintl6)*task-sCnt));

...

ZDApp_Init(taskID++);}

添加新任务GenericApp时,首先需将事件处理函数GenericApp ProcessEvent的指针加入task-sArr[],然后在osallnitTasks()中调用此任务的初始化函数GenericApp Init(tasked);。 应当注意的是,TaskArr[]里各任务函数的排列顺序要与osalln-itTasks()函数中调用各任务初始化的函数相一致,以保证各任务能通过初始化函数接收到正确的任务ID。

在系统运行时,OSAL如何将事件分配给任务osallnitTasks()中使用的全局变量tasksCnt保存有当前的任务个数,tasksEvents是一个指向数组的指针,此数组保存了当前任务的状态。由此可以看出,osallnitTasks()中将所有任务的状态都被初始化为0,这代表了当前任务没有需要响应的事件。之后,在main。函数中调用死循环函数osal_start_sys-tem(),再通过代码do(if(tasksEvents[idx])break;}while(十十idxVtasksCnt);完成所有的事件分配。若tasksEvents[]这个数组中的某个元素不为0,即代表此任务有事件需要响应,事件类型取决于这个元素的值。这个do-while循环会选出当前优先级最高的需要响应的任务,events=(tasksArr[idx])(idx,events);语句将调用tasksArr[]数组里面相应的事件处理函数来响应事件。如果新添加的任务有了需要响应的事件,那么此任务的事件处理程序就会被调用。这样,OSAL就会将需要响应的事件传递给了对应的任务处理函数进行处理。

3.2  在AF层中注册应用服务

要将ZigBee节点加入ZigBee网络,通常需要在任务中做以下两件事情

其一是定义此任务为ZigBee应用服务对象所需要的信息。其二是将这些信息注册到应用程序框架之中。通过在AF层注册应用对象的信息,可以告知系统afAddr_Type_t地址类型数据包的路由端点。通过填入endPointDesc_t数据格式的EndPoint变量,便可调用afRegister()在AF层注册EndPoint应用对象(afRegister(&-GenericApp  MANAGE  epDesc);)。

3.3  注册相应的OSAL或HAL系统服务

由于任何Z-STACK任务均不自行注册系统服务,因此,包括串口活动响应在内的任何任务都需要由应用程序注册官。例如,应用程序中需要使任务能够接收到按键消息,因而必须在应用程序框架中进行注册,告诉应用程序框架,如有按键消息即请传递过来。可通过代码RegisterForKeys(GenericApp  MANAGE_TaskID)在GenericApp_MANAGE_Init函数中注册系统服务

3.4  处理任务事件

Z-STACK通过创建ApplicationName  Pro-cessEvent()函数来处理任务事件。一个OSAL任务除了强制事件(MandatoryEvents)之外,还可以定义包括ZDO_STATE_CHANGE在内的15个事件。当一个ZigBee节点成功加入网络以后,ZDO就会给所有已经在应用程序框架中注册过的任务发送一个ZDO_STATE_CHANGE消息,消息的状态指示了当前网络的状态登。可以通过处理此消息完成应用功能。以TIDEMO提供的键控LED灯为例,当一个消息被发送给任务时,SYS_EVENT_MSG事件会被传递给任务,通知任务有一个消息等待处理。所以,必须添加对于SYS_EVENT_MSG这个事件的响应,然后从消息队列中取出消息,并判断此消息是否为ZDO STATE_CHANGE,同时在处理ZDO_STATE_CHANGE消息时点亮LED灯。

4  结语

Z-STACK协议栈提供有强大的功能,这使得大部分应用设计都能基于现有的开放式协议进行应用开发。对于初学者而言,学习Z-STACK的关键是理清Z-STACK的协议栈结构以及及基于轮询及优先级控制的任务管理方式。文中在简要介绍了Z-STACK协议栈层次结构的基础上,详细分析了任务调度流程以及基于协议栈的应用开发流程。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

业内消息,随着华为鸿蒙系统和生态的推出和完善,越来越多的头部App厂商开始启动鸿​蒙(Harmo​nyOS)原生应用开发,为了应对鸿蒙开发人才的需求,华为和鸿蒙系软件厂商都在积极培养鸿蒙生态人才,多家高校与华为合作开设“...

关键字: 应用开发 高校 华为 鸿蒙

业内消息,昨天阿里巴巴旗下的智能化协同办公及应用开发平台钉钉与华为达成鸿蒙合作,双方将在产业创新、技术应用、商业发展等领域全面合作,并正式启动“钉钉鸿蒙版”的开发。钉钉将以原生方式适配鸿蒙系统,成为首批加入鸿蒙生态的智能...

关键字: 阿里 钉钉 华为 鸿蒙 应用开发

Orange、西班牙电信和沃达丰与爱立信及Vonage一起展示如何向全球开发者社区开放,并让该社区方便使用先进的移动网络功能。 此次在世界移动通信大会期间的演示是一座行业里程碑。运营商在GSMA开放式网关倡议框...

关键字: 开发者 应用开发 5G网络 API

三井物产株式会社和Quantinuum公司签署战略伙伴关系协议,在日本和亚太地区合作提供量子计算服务。两家公司将联合致力于量子应用开发,为从事各种量子计算领域工作的组织提供增值服务。预计到2040年,量子计算领域的全球价...

关键字: ANTI 量子计算 应用开发 MT

北京2022年6月16日 /美通社/ -- 日前,赛迪顾问(CCID)发布《2021-2022 年中国PaaS市场研究年度报告》,报告显示,浪潮凭借优异的市场表现和发展能力位居中国PaaS市场领导者阵营、aPaaS发展能...

关键字: PAAS 应用开发 数字化 电气

(全球TMT2022年6月16日讯)日前,赛迪顾问(CCID)发布《2021-2022 年中国PaaS市场研究年度报告》,报告显示,浪潮凭借优异的市场表现和发展能力位居中国PaaS市场领导者阵营、aPaaS发展能力第一...

关键字: PAAS 应用开发 组件 人工智能

上海2022年5月24日  /美通社/ – 全球领先的物联网整体解决方案供应商移远通信今日宣布,其5G通信模组已经成功与英伟达Jetson AGX Orin平台完成联调。Jetson AGX Orin是英伟达近...

关键字: 英伟达 应用开发 移远通信 JETSON

北京2022年5月7日 /美通社/ -- 近期,爱分析发布《2022低代码厂商全景报告》,该报告基于行业应用层、技术服务层、技术开发层的12个细分市场,从市场规模、行业增速等维度遴选在低代码市场中具备成熟解决方案和落地能...

关键字: 代码 PAAS 数字化 应用开发

(全球TMT2022年4月30日讯)上海元代科技联合国内区块链应用开发商美匣元工坊宣布将结合区块链技术打造元宇宙第一IP -- 《元宇宙史诗》,这是国内目前首个以元宇宙为概念的剧情式IP。《元宇宙史诗》集合了虚拟世界、...

关键字: IP 应用开发 区块链技术

(全球TMT2022年4月8日讯)近日,由软通动力鸿蒙应用开发和设备开发双料认证专家夏德旺和浙江大学仪器科学与工程学系副教授谢立联合编著了《HarmonyOS应用开发:快速入门与项目实战》一书,正式出版。...

关键字: 应用开发 鸿蒙
关闭
关闭