ZigBee协议栈OSAL介绍
zigbee协议栈
整个Z-stack的主要工作流程,大致分为系统启动,驱动初始化,OSAL初 始化和启动,进入任务轮循几个阶段
zigbee
直接面对用户的具体应用,包含用户应用程序执行通信任务所需要的 协议和功能
网络协议
:
TCP/IP结构对应OSI结构
TCP/IP
OSI
Βιβλιοθήκη Baidu应用层
应用层 表示层 会话层
主机到主机层(TCP) 网络层(IP)
网络接口层
传输层 网络层 数据链路层 物理层
网络拓扑结构
定义
在计算机网络中指设备和线路的安排或布局在地理 网络中指网络要素之间的连接(即计算机是以何种 方式连接在一起的)
中心系统一旦损坏,整个系统便趋于瘫痪
网络拓扑结构
环型拓扑结构(这种结构消除了端用户通信时对中心
系统的依赖性):
abcde五个节点组成的环型结构,数据由a到d时 路径为a->b->c->d->e->a d接收到数据后,在数据上做一个标记,传给e,再传给a, a则知道d接收到了数据
可靠性低,一个节点故障,将会造成全网瘫痪
除64位IEEE MAC 地址外,还须分配一个16位的短地址
zigbee 协议栈
zigbee 协议栈
Zigbee 协议栈。
Zigbee 是一种无线通信协议,它被设计用于低数据速率、低功耗的应用场景,如智能家居、工业自动化、传感器网络等。Zigbee 协议栈是指在 Zigbee 网络中的协议层,它定义了 Zigbee 网络中各个节点之间的通信规则和协议。
Zigbee 协议栈主要包括物理层、MAC 层、网络层和应用层。物理层定义了无线通信的调制解调方式、频率和功率控制等;MAC 层负责数据的传输和接收,以及网络中节点的管理;网络层则负责路由和数据包转发;应用层则定义了具体的应用协议和数据格式。
在 Zigbee 协议栈中,物理层使用了 IEEE 802.15.4 标准,它定义了无线通信的物理层和 MAC 层规范,包括频率、调制方式、数据帧格式等。MAC 层定义了数据的传输方式,包括信道访问方式、数据帧格式、数据重传机制等。网络层则定义了路由协议和数据包转发规则,以实现多跳网络的数据传输。应用层则定义了具体的应用协议,如 Zigbee Home Automation(ZHA)、Zigbee Light Link(ZLL)等。
Zigbee 协议栈的设计遵循了低功耗、低成本、可靠性和安全性的原则。它采用了分层的设计,使得各个层之间的功能清晰明了,易于实现和维护。同时,Zigbee 协议栈还支持多种网络拓扑结构,包括星型、网状和混合型网络,以满足不同应用场景的需求。
在实际的应用中,开发人员可以使用 Zigbee 协议栈来快速构建 Zigbee 网络应用。通过使用 Zigbee 协议栈,开发人员可以方便地实现节点之间的数据通信、网络管理和安全保护,从而加速产品的开发周期和降低开发成本。
zigbee 协议栈
zigbee 协议栈
Zigbee是一种基于IEEE 802.15.4标准的无线通信协议,它是一种低功耗、短距离的无线网络协议,可以用于物联网中各种设备的通信。Zigbee协议栈是指一套软件的层次结构,用于实现Zigbee协议的功能和特性。
Zigbee协议栈由四个层次组成:应用层,网络层,MAC层和物理层。
应用层是Zigbee协议栈的最高层,它提供了应用程序与其他网络层之间的接口。应用层负责处理数据的收发,以及定义数据的格式和协议。应用层也负责处理设备与设备之间的通信,例如传感器与控制器之间的通信。
网络层是Zigbee协议栈的中间层,它负责网络的发现和路由选择。网络层的主要功能是将数据传输到目标设备,以及维护网络拓扑结构。网络层使用一种叫做AODV(Ad-hoc On-Demand Distance Vector)的路由选择算法来决定数据的传输路径。
MAC层是Zigbee协议栈的第二层,它负责实现对数据的传输和控制。MAC层的主要功能包括数据的处理、帧的编码和解码、对信道的管理等。MAC层使用CSMA-CA(Carrier Sense Multiple Access with Collision Avoidance)协议来控制数据的传输,并通过BEACON帧来管理设备之间的通信。
物理层是Zigbee协议栈的最底层,它负责将数据从电子信号
转换为无线信号,并传输到接收设备。物理层的主要功能包括信号的调制和解调、信道编码和解码、信号的传输和接收等。
Zigbee协议栈还支持一种叫做ZDO(Zigbee Device Object)的设备对象。ZDO是一个与设备相关的软件模块,提供了设备的管理和控制功能。ZDO负责设备的发现、加入网络、离开网络、重置等操作,并通过指定的应用程序接口来与设备进行通信。
无线传感网络技术 第二章 ZIGBEE 协议概述
工作频 段和数 据速率
IEEE 802.15.4工作在工业科学医疗(ISM)频段,它定义了两种物理层,即2.4GHz频段和 868/915MHz频段物理层。免许可证的2.4GHzISM频段全世界都有,而868MHz和915MHz的ISM频 段分别只在欧洲和北美有。
简化功能器件(ReducedFunction Device, RFD)
数据传 输方式
直接数据传输 有保证时隙(GTS)数据传输 间接数据传输
IEEE 802.15.4设备
2.1 ZIGBEE 概述
安全性
无安全性方式 接入控制清单(ACL)来防止非法器件获取数据 高级加密标准(AES)
自配置
IEEE 802.15.4在媒体接入控制层中加入了关联 和分离功能,。自配置不仅能自动建立起一个 星形网,而且还允许创建自配置的对等网。在 关联过程中可以实现各种配置
低能量消耗、低速率传输、低成本,支持简单器件 作为重点目标,旨在为个人或者家庭内不同设备之 间低速率无线互连提供统一标准
很多研究机构把它作为无线传感器网路的通信标准
IEEE 802.15.4设备
2.1 ZIGBEE 概述
IEEE
802.15. 4设备
通信能力、计算 能力、存储能力 和电源供电能力
全功能器件(Full-Function Device, FFD)
ZIGBEE协议栈各层的功能
ZIGBEE协议栈各层的功能
篇一:Zigbee 协议栈各层分析
3.4.2 协议栈概况
本课题研究的系统ZigBee协议栈设计基于MSSTATE_LRWPAN。MSSTATE_LRWPAN是由美国密西西比州立大学的Robert B. Reese教授开发的一套ZigBee协议的简化实现。该协议栈可用于多种硬件平台,实现了协调器、路由器和精简功能节点之间的树路由、直接消息传输并用静态绑定方法实现了间接路由[[xxxix]]。课题在对该协议栈进行深入分析的基础上,根据本课题中使用硬件平台的实际情况进行修改,将其移植到MSP430 + CC2420的硬件平台上来。程序使用C语言编写,使用IAR公司的EW430工具作为集成开发环境,编译后下载到目标板的MSP430芯片中。
协议栈使用有限状态机(FSM,Finite State Machine)的编程方式,在协议的每一层实现单独的有限状态机来跟踪该层的工作状态,整个协议栈采用嵌套调用的方式,上层调用下层的有限状态机,实现完整协议栈的运行。最顶层的有限状态机是应用程序支持子层(APS)的apsFSM(),需要周期性的调用,以维持整个协议栈正常运行。
经过对MSSTATE_LRWPAN协议各层源程序的原理和实现方法进行分析后发现,在将协议栈从一种硬件平台移植到另外一种硬件平台时,需要修改的主要是物理层(PHY)和媒体接入控制层(MAC),这两层与硬件联系紧密,需要针对节点硬件的实际连接方式作较大的修改,涉及的文件主要有cc2420.c、clockhal.c和
zigbee中OSAL事件传递机制和消息传递机制
zigbee中OSAL事件传递机制和消息传递机制
⼀、概述
OSAL (Operating System Abstraction Layer),翻译为“操作系统抽象层”。 OSAL 就是⼀种⽀持多任务运⾏的系统资源分配机制。OSAL与标准的操作系统还是有很⼤的区别的。简单⽽⾔, OSAL 实现了类似操作系统的某些功能,但并不能称之为真正意义上的操作系统。
⼆、OSAL任务运⾏⽅式
我们以TI1.2.1的 BLE 协议栈中的SimpleBLEPeripheral为例,分析⼀下 OSAL 。其中有⼀个simpleBLEPeripheral.c⽂件,⾥⾯有2个⽐较重要的函数:SimpleBLEPeripheral_Init和SimpleBLEPeripheral_ProcessEvent。SimpleBLEPeripheral_Init是任务的初始化函数,⽽
SimpleBLEPeripheral_ProcessEvent则负责处理传递给此任务的事件。
⼤概浏览⼀下SimpleBLEPeripheral_ProcessEvent这个函数,我们可以发现,此函数的主要功能是判断由参数传递的事件类型,然后执⾏相应的事件处理函数。由此,可以推断出 BLE 协议栈应⽤程序的运⾏机制如下图所⽰:
当有⼀个事件发⽣的时候, OSAL 负责将此事件分配给能够处理此事件的任务,然后此任务判断事件的类型,调⽤相应的事件处理程序进⾏处理。
明⽩了这个问题,新的问题⼜摆在了我们的⾯前: OSAL 是如何传递事件给任务的。
三、OSAL的事件传递机制
ZigBee源码程序及解释
协议栈无线透传编程原理:
第一个功能:协调器的组网,终端设备和路由设备发现网络以及加入网络
//第一步:Z-Stack 由 main()函数开始执行,main()函数共做了 2 件事:一是系统初始化,另外一件是开始执行轮转查询式操作系统
int main( void ) { .......
// Initialize the operating system
osal_init_system(); //第二步,操作系统初始化......
osal_start_system(); //初始化完系统任务事件后,正式开始执行操作系统
......
}
//第二步,进入 osal_init_system()函数,执行操作系统初始化
uint8 osal_init_system( void ) //初始化操作系统,其中最重要的是,初始化操作系统的任务
{
// Initialize the Memory Allocation System
osal_mem_init();
// Initialize the message queue
osal_qHead = NULL;
// Initialize the timers
osalTimerInit();
// Initialize the Power Management System
osal_pwrmgr_init();
// Initialize the system tasks.
osalInitTasks(); //第三步,执行操作系统任务初始化函数
// Setup efficient search for the first free block of heap.
OSAL(操作系统抽象层简介)
OSAL(操作系统抽象层简介) (2010-11-19 20:00)
分类:ZigBee 技术学习
Z-Stack1.4.3及以后的版本中引入了一个OSAL(Operating System Abstraction Layer 操作系统抽象层),但在我们整个的ZigBee协议栈的结构图中,我并没有能够发现这个层在哪个位置。但是整个的协议栈都要在OS的基础上才能运行。OSAL和我们通常所说的RTOS,pc上的操作系统还是有很大的不同,ZigBee2006中只是利用了操作系统的概念和思想,利用OS把Z-Stack软件组件从特殊的处理过程相分离,并将软件成分保护了起来。它提供了如下的管理功能:
◆任务的注册、初始化、开始
◆ 任务间的消息交换
◆任务同步
◆ 中断处理
◆时间管理
◆ 内存分配
在ZigBee协议中,协议本身已经定义了大部分内容。在基于ZigBee协议的应用开发中,用户只需要实现应用程序框架即可。从ZigBee的协议架构图中我们也可以看到,其中的应用程序框架中包含了最多的240个应用程序对象,如果我们把一个应用程序对象看做为一个任务的话,那么应用程序框架将包含一个支持多任务的资源分配机制。于是OSAL便有了存在的必要性,它正是Z-Stack为了实现这样一个机制而存在的。
OSAL主要是这样一种机制,一种任务分配资源的机制,从而形成了一个简单多任务的操作系统。首先,osal初始化系统,包括软件系统初始化和资源初始化.其中软件系统初始化就是初始化一些变量,比如osal重要的组成部分任务表,任务结构体和序列号.资源初始化主要包括内存,中断,NV等各种设备模块资源.这就和我们嵌入式系统中的RTOS操作系统μC/OS-II有了很大的相似处。
ZigBee的OSAL机制
一、OSAL概述
首先OSAL是以实现多任务为核心的系统资源管理机制,它和标准
的操作系统还是有很大区别的。简单而言,OSAL实现了类似操作系
统的“某些”功能,但并不能称之为真正意义上的操作系统。Chipcon
公司为自己设计的ZStack协议栈中提供了一个名为操作系统抽象层OSAL的协议栈调度程序。
二、OSAL任务运行方式
ZigBee协议栈的每一层都设计了一个事件处理函数,用来处理每
一层相对应的各种事件,这些处理函数我们可以理解成是与各层相对
应的任务函数,它们由OSAL来进行管理。
因为整个程序只有一个main函数,我们就从这个函数入手(在此
我以sample这个例程为例来说明):
在ZMain.c中有:
ZSEG int main( void )
{
osal_int_disable( INTS_ALL ); // Turn off interrupts 关中断
HAL_BOARD_INIT(); // Initialize HAL 初始化硬件抽象层
zmain_vdd_check(); // Make sure supply voltage is
high enough to run检测电源电压保证正常运行
zmain_ram_init(); // Initialize stack memory 初始化内存
InitBoard( OB_COLD ); // Initialize board I/O 初始化板子上的IO口
HalDriverInit(); // Initialze HAL drivers 初始化硬件抽象层驱动
zigbee协议栈
zigbee协议栈
ZigBee协议栈是一种低功耗、近距离、无线通信协议,
它以IEEE 802.15.4标准为基础,支持点对点和星形拓扑网络。ZigBee协议栈分为物理层、MAC层、网络层和应用层。
物理层:ZigBee的物理层工作于2.4GHz带宽,提供了
16个信道,可以在不同频段工作。此外,它还支持双向数据
传输、自适应,能够自动优化网络性能。物理层与MAC层之间的接口在帧结构中定义。
MAC层:ZigBee MAC层是机制,它负责管理网络的访问
控制、组织网络拓扑结构等。在ZigBee中,通信是按照设备
类型进行的,有一些设备被指定为“协调器”,这些设备负责管理网络中的资源,调度传输时间等。
网络层:ZigBee网络层的主要职责是管理设备之间的通信,为应用层提供稳定的通信基础。它提供了一组缺省的网络协议,可以在多种不同环境下使用。
应用层:ZigBee应用层是通过使用设备描述文件来定义
应用层协议和服务的标准集合。通过设备描述文件(或“簇”),应用程序可以访问底层硬件和网络服务。
总之,ZigBee协议栈是一种广泛应用于安防、能源管理、自动化等领域的低功耗、近距离、无线通信协议,能够支持多种应用需求,有着良好的安全性和稳定性。
ZigBee协议栈OSAL介绍
讨论ZigBee协议栈的构成以及内部OSAL的工作机理。
ZigBee协议栈OSAL介绍
操作系统抽象层
OSAL常用术语:
1.资源(Resource):任何任务所占用的实体都叫资源,如变量、数组、结构体
2.共享资源(Shared Resource):两个或两个以上任务使用的资源,为防止破坏资源,任务在操作共享资源时是独占状态。
3.任务(Task):即线程,简单的程序的执行过程。任务设计时将问题尽可能分成多个任务,每个任务独立完成某项功能,同时赋予优先级、CPU寄存器和堆栈空间。一般一个任务设计为一个无限循环。
4.多任务运行(Muti-task Running):其实同一时刻只有一个任务运行。
5.内核(Kernel):内核负责管理各个任务。包括:分配CPU时间;任务调度;任务间的通信。
6.互斥(Mutual Exclusion):多任务通信最常用方法是共享数据结构。
保护共享资源常用的方法:
关中断;
使用测试并置位指令(T&S指令);
禁止任务切换;
使用信号量;
7.消息队列(Message Queue):用于任务间传递消息。
OSAL提供如下功能:
任务注册、初始化和启动;
任务间的同步、互斥;
中断处理;
储存器分配和管理;
OSAL运行机理:
OSAL就是一种支持多任务运行的系统资源分配机制。
OSAL是一种基于事件驱动的轮询式操作系统。、
void osal_start_system(void)是ZigBee协议栈的灵魂,不断的查看事件列表,如果有事件发生就调用相应的事件处理函数。
SYS_EVENT_MSG是一个事件集合,是由协议栈定义的事件,即系统强制事件(Mandatory Events),它的定义为:
zigbee协议栈初步统计V0.3
Zigbee协议栈实现-调查 ——Jack 2013-04-26
提纲
一.关于zigbee的相关思考 二.ZigBee 5大芯片厂商,代表型号及协议栈名称 三.开源Zigbee协议栈介绍 四.“国产Zigbee协议栈”进程介绍 五.参与开源“Zigbee协议栈”必要性
一、关于zigbee的相关思考
TinyOS
• 主页: • http://www.tinyos.net/ • 目前在WSN领域最 权威的操作系统,里 面完成协议设计自带 仿真软件。看过不少 文章,它最多。而且 网上资料也很多。 • 成立了 TinyOS ZigBee Working Group 已经开 始设计开源的zigbee, 期待中...... • http://www.tinyos.net /scoop/special/working _group_tinyos_zigbee
OpenMAC
• 主页: http://sourceforge.net/projects/openmac/ • OpenMAC is a TinyOS-based implementation of IEEE 802.15.4 MAC layer, which lies at the core of MeshNetics ZigBee stack, and provides basic wireless networking (star,peer to peer) to WSN's. Available for low-power ZigBit modules and Atmel AVR Z-Link Kits
Z-Stack协议栈操作系统抽象层(OSAL)API
Z-Stack协议栈操作系统抽象层(OSAL)API
Z-Stack协议栈操作系统抽象层(OSAL)API
操作系统抽象层(OSAL)是被用来使Z-Stack协议栈的软件组件与特殊的出来环境无关。操作系统抽象层能独立于具体的出来环境,主要提供以下功能:
1、任务的注册,初始化和启动。
2、任务间的消息交换。
3、任务的同步。
4、中断处理。
5、定时器处理。
6、存储器的分配。
1 消息管理API
消息管理API为任务间或不同处理环境中的处理单元的消息交换提供一种手段。消息管理API中的函数使能一个任务分配或者释放消息缓冲区,发送命消息给另一个任务并接收响应消息。
1.1 osal_msg_allocate()
该函数被一个任务调用来分配一个消息缓冲区,该任务/函数将填写消息并通过调用osal_msg_send()函数来将消息发送给另一个任务。如果缓冲区不能被分配,msg_ptr将被置位NULL。(注意:本函数被用来分配一个缓冲区以便在两个任务之间发送信息(使用osal_msg_send()函数)。使用osal_mem_alloc()函数是分配存储器的一个块。)。
函数原型为:
uint8 * osal_msg_allocate( uint16 len )
其中参数:
len 为消息的长度。
函数返回值:一个指向为消息分配的缓冲区的指针。如果返回值为NULL表
示操作失败。
1.2 osal_msg_deallocate()
该函数被用来释放一个消息缓冲区。当一个任务(或处理单元)在它已经完成对接收到的消息处理后调用本函数。
Zigbee协议栈OSAL层API函数(译)OSAL_API_F8W-2003-0002
3.信息管理API3.1 概述这部分API提供了任务或处理单元与不同的处理环境之间的数据交换。这部分API函数能够为任务分配和收回消息缓冲区,发送命令消息给以外一个任务并且接收应答。3.2 osal_msg_allocate ( )概述:当一个任务调用这个函数时,将为消息分配缓冲区,函数会将消息加入缓冲区,并调用osal_msg_send()将消息发送到另一个任务。原型:byte *osal_msg_allocate( uint16 len )参数:len :消息的长度返回值:指向消息缓冲区的指针,当分配失败时返回NULL3.3 osal_msg_deallocate( )概述:用于收回缓冲区原型:byte osal_msg_deallocate( byte *msg_ptr )参数:Msg_ptr : 指向将要收回的缓冲区的指针返回值:RETURN VALUE DESCRIPTIONZSUCCESS 回收成功INVALID_MSG_POINTER 错误的指针MSG_BUFFER_NOT_AVAIL 缓冲区在队列中3.4 osal_msg_send( )概述:任务调用这个函数以实现发送指令或数据给另一个任务或处理单元。目标任务的标识必须是一个有效的系统任务,当调用osal_create_task ( )启动一个任务时,将会分配任务标识。osal_msg_send()也将在目标任务的事件列表中设置SYS_EVENT_MSG原型:byte osal_msg_send( byte destination_task, byte *msg_ptr )参数:destination_task :目标任务的标识msg_ptr :指向消息缓冲区的指针返回值:ZSUCCESS 消息发送成功INVALID_MSG_POINTER 无效指针INVALID_TASK 目标任务无效3.5 osal_msg_receive( )概述:任务调用这个函数来接收消息。消息处理完毕后,发送消息的任务必须调用osal_msg_deallocate()收回缓冲区。原型:byte *osal_msg_receive( byte task_id )参数:task_id :消息发送者的任务标识返回值:指向消息所存放的缓冲区指针,如果没有收到消息将返回NULL。4.任务同步API4.1概述这个API使能一个任务等待一个事件的发生和返回控制而不是一直等待。在这个API中的函数可以用来为任务设置事件,立刻通知任务有事件被设置。4.2 osal_set_event( )概述:函数用来设置一个任务的事件标志原型:byte osal_set_event( byte task_id, UINT16 event_flag )参数:task_id :任务标识event_flag :2个字节,每个位特指一个事件。只有一个系统事件,其他事件在接收任务中定义。返回值:ZSUCCESS 成功设置INVALID_TASK 无效任务
zigbee协议栈
zigbee协议栈
Zigbee协议栈是一种基于IEEE 802.15.4无线技术的低功耗通
信协议,用于构建无线传感器网络和物联网设备。它由几个层次的协议组成,包括物理层、MAC层、网络层和应用层。
物理层是Zigbee协议栈的最底层,负责无线信号传输和接收。它定义了无线模块和设备的硬件要求,包括频率、调制方式、传输速率等。
在物理层之上是MAC层,负责网络节点之间的数据传输和管理。它提供了一系列函数,用于数据包的发送和接收,以及网络节点的寻址和路由。
网络层位于MAC层之上,负责整个网络的拓扑结构和数据路由。每个节点都有一个唯一的网络地址,用于标识和寻址。网络层使用路由算法决定最佳的数据传输路径,以确保数据的可靠传输。
最上层是应用层,这是开发人员编写应用程序的层次。它提供了一系列应用程序程序接口(API),用于数据的发送和接收。开发人员可以利用这些API实现各种应用程序,如传感器数
据采集、远程控制等。
Zigbee协议栈具有以下几个特点。
第一,低功耗。由于无线传感器网络和物联网设备通常是由电池供电,因此低功耗是一个非常重要的设计考虑。Zigbee协议
栈通过最小化数据传输以及使用睡眠和唤醒机制来实现低功耗。
第二,短距离通信。Zigbee协议栈的设计目标是用于部署在短距离范围内的网络,通常不超过100米。这使得它非常适用于家庭自动化、智能电网等场景。
第三,高可靠性。Zigbee协议栈支持多路径数据传输,以确保数据能够在网络中快速可靠地传输。此外,它还支持自动路由和包重传机制,以应对网络中节点的故障或丢失。
OSAL运行机制
HAL_ENTER_CRITICAL_SECTION(intState); events = tasksEvents[idx]; tasksEvents[idx] = 0; // 本任务运行完了,要对其清空,为后面要运行的任务让路 HAL_EXIT_CRITICAL_SECTION(intState);
OSAL(Operating System Abstraction Layer )即:操作系统抽象层.和真正的 windows 和 linux 等有很大的差别.为了实现多事件和多任务切换,需要把事件和任务对应 并起运行,形成了一个简单多任务的操作系统。 首先, OSAL 需要初始化,包括软件系统初始化(也就是初始化一些变量,OSAL 重要的组成部分任务表,任务结构体和序列号); 硬件资源初始化(主要包括内存, 中断,NV(Non Volatile)非易失等各种设备模块资源).接着,OSAL 通过 osal_add_task 添加任务到任务表中,形成一个任务链表.这个任务链表是以 任 务 的 优 先 级 先 后 排 序 的 .优 先 级 高 的 排 在 前 , 低 者 排 于 后 。最 后 , 开 始运行系统,系统运行后就这么简单——系统是以一个死循环的形式工 作的.在循环体当中不断地检测各个任务, 看是否要运行等.这就相当于 我们平时用的 linux 和 window 等多任务系统,把 CPU 分成 N 个时间片(有多 少任务就分成多少时间片),只要处理频率 高,就相当于多任务同时运行了. 当然了,OSAL 远没有 pc 系统优化的那么好,但对于我们平时没有采用任何机 制的单片机程序,执行效率还是要高得多的.. 这就是为什么,同样是一块 51 内核的 MCU,TI 的 CC 系列(eg:CC2430,CC2540)能处理这么多事件了。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
讨论ZigBee协议栈的构成以及内部OSAL的工作机理。
ZigBee协议栈OSAL介绍
操作系统抽象层
OSAL常用术语:
1.资源(Resource):任何任务所占用的实体都叫资源,如变量、数组、结构体
2.共享资源(Shared Resource):两个或两个以上任务使用的资源,为防止破坏资源,任务在操作共享资源时是独占状态。
3.任务(Task):即线程,简单的程序的执行过程。任务设计时将问题尽可能分成多个任务,每个任务独立完成某项功能,同时赋予优先级、CPU寄存器和堆栈空间。一般一个任务设计为一个无限循环。
4.多任务运行(Muti-task Running):其实同一时刻只有一个任务运行。
5.内核(Kernel):内核负责管理各个任务。包括:分配CPU时间;任务调度;任务间的通信。
6.互斥(Mutual Exclusion):多任务通信最常用方法是共享数据结构。
保护共享资源常用的方法:
关中断;
使用测试并置位指令(T&S指令);
禁止任务切换;
使用信号量;
7.消息队列(Message Queue):用于任务间传递消息。
OSAL提供如下功能:
任务注册、初始化和启动;
任务间的同步、互斥;
中断处理;
储存器分配和管理;
OSAL运行机理:
OSAL就是一种支持多任务运行的系统资源分配机制。
OSAL是一种基于事件驱动的轮询式操作系统。、
void osal_start_system(void)是ZigBee协议栈的灵魂,不断的查看事件列表,如果有事件发生就调用相应的事件处理函数。
SYS_EVENT_MSG是一个事件集合,是由协议栈定义的事件,即系统强制事件(Mandatory Events),它的定义为:
#define SYS_EVENT_MSG 0x8000;
它包含如下事件:
AF_INCOMING_MSG_CMD 收到一个新的无线数据
ZDO_STATE_CHANGE 网络状态发生变化事件,利用它判断终端加入网络后何时向协调器发送数据包。
ZDO_CB_MSG 指示所有注册的ZDO响应消息。
AF_DATA_CONFIRM_CMD 调用AF_DataRequest()发送数据时,需要确认信息。
OSAL消息队列
消息与事件的区别:
消息:事件和数据的封装
事件:驱动任务去执行某些操作的条件
OSAL维护一个消息队列,即消息链表
OSAL添加新任务
要添加新任务要编写两个函数:
1.新任务的初始化函数
2.新任务的事件处理函数
OSAL应用编程接口
API(Application Programming Interface)有8个
消息管理
任务同步
时间管理
中断管理
任务管理
内存管理
电源管理
非易失性闪存管理
消息管理API:主要用于处理任务间消息交换,包括任务分配消息缓存、释放消息缓存、接收消息、发送消息
osal_msg_allocate() 分配缓存空间
osal_msg_deallocate() 释放消息缓存空间
osal_msg_send() 一个任务发送消息到消息队列
osal_msg_receive() 一个任务从消息队列接收属于自己的消息
任务同步API:用于任务间的同步,允许一个任务等待某个任务发生。
osal_set_event() 运行一个任务设置某一事件
时间管理API:用于开启关闭定时器
osal_start_timerEx() 设置一个定时时间,时间到后,相应事件被设置。
osal_stop_timerEx() 停止已启动的定时器
中断管理API:用于控制中断的开启和关闭。
很少用
任务管理API:用于对OSAL进行初始化和启动
osal_init_system() 初始化OSAL,该函数是第一个被调用的OSAL函数
osal_start_system() 之前重点讲的函数
内存管理API:用于在堆上分配缓存区,以下的两个API函数要成对使用,防止内存泄露。
osal_mem_alloc() 在堆上分配指定大小的还存区
osal_mem_free() 释放之前函数分配的缓存区
电源管理API:主要用于电池供电的ZigBee网络节点
非易失性闪存管理API:Non-Volatile Memory,NV一般指Flash或EEPROM,每个NV分配唯一的ID号。
osal_nv_item_init() 初始化NV条目,如果NV条目不存在,创建并初始化该条目,如果存在,每次调用osal_nv_read()和osal_nv_write()之前必须调用该函数。
osal_nv_read() 从NV条目中读取数据,可读取整条也可读取部分。
osal_nv_write() 写数据到NV条目
ZigBee协议栈中串口应用详解
使用串口的基本步骤:
1.初始化串口,设置波特率、中断等。
2.向发送缓冲区发送数据或者从缓冲区读取数据。
ZigBee协议栈中提供的与串口相关的函数:
HalUARTOpen()
HalUARTRead()
HalUARTWrite()
回调函数是通过函数指针(函数地址)调用的函数,如果把函数指针作为参数传递给另一个函数,当通过指针调用它所指向的函数时,称为函数的回调。
回调函数不是由该函数的实现方直接调用的,而是在特定的事件或条件发生时,由另一方调用的,用于对该事件或条件进行响应。
回调函数机制提供了系统对异步事件的处理能力。首先将异步事件发生时需要执行的代码编写成一个函数,并将该函数注册成为回调函数,这样当该异步事件发生时,系统会自动调用事件注册好的回调函数,回调函数的注册实际上就是将回调函数的信息填写到一个用于注册回调函数的结构体变量中。
程序中调用回调函数的步骤:
1.定义回调函数
2.初始化时,提供函数实现的一方将回调函数的函数指针传递给调用者
3.当特定的事件或条件发生时,调用者使用函数指针调用回调函数对事件进行处理。
使用条件编译是因为单片机的存储器资源有限。