ZigBee协议栈的OSAL运行机理研究与测试
2017-09-08张玲丽
张玲丽
摘 要:文中研究分析了ZigBee协议栈的OSAL运行机理,并在此基础之上,通过规范的编程流程,设计了一个行之有效的测试系统,很好地演示了OSAL如何實现多任务切换和处理机制,对后期基于协议栈的编程提供了技术支持。
关键词:ZigBee协议栈;OSAL;任务事件;技术支持
中图分类号:TP39;TN92 文献标识码:A 文章编号:2095-1302(2017)08-00-02
0 引 言
从ZigBee 2006协议栈开始,ZigBee协议栈内加入了实时操作系统,主要制定了一个实现任务间切换、同步与互斥等的机制,而这就是操作系统表象层OSAL (Operating System Abstraction Layer,OSAL)产生的根源。OSAL与标准的操作系统存在一定区别,它只实现了类似操作系统的某些功能,如任务切换、内存管理等,还不能称为真正意义上的操作系统[1]。OSAL专门分配了存放所有任务事件的tasksEvents[]数组,每一个单元对应存放着每一个任务的所有事件,在这个函数中首先通过一个do—while循环来遍历tasksEvents[],找到一个具有待处理事件的优先级最高的任务,序号低的任务优先级高,然后跳出循环,此时,就得到了最高优先级任务的序号idx,然后通过events=tasksEvents[idx]语句将当前具有最高优先级的任务事件取出,接着调用(tasksArr[idx])(inx,events)函数来执行具体的处理。taskArr[]是一个函数指针数组,根据不同的idx可以执行不同的函数[2],其程序流程图如图1所示。
打开一个ZigBee工程文件,在左侧通常可以看到三个文件,分别为“Coordinator.c”、“Coordinator.h”、“OSAL_GenericApp.c”。整个程序所实现的功能都包含在这三个文件中。首先打开Coordinator.c 文件,可以看到两个比较重要的函数GenericApp_Init 和 GenericApp_ProcessEvent。GenericApp_Init是任务的初始化函数,GenericApp_ProcessEvent则负责判断由参数传递的事件类型,然后执行相应的事件处理函数[3]。……
