ZigBee协议栈OSAL介绍
ZIGBEE协议栈OSAL运行机理及任务添加
授课内容
OSAL的调度机制
OSAL任务添加
OSAL的简介
•
OSAL是一种支持多任务运行的系统资源分配机 制。 OSAL与标准的操作系统有一定的区别,它实现 了类似操作系统的功能,如:任务切换、提供了 内存管理功能等,但OSAL并不是真正意义的操 作系统。
OSAL添加新任务
将事件处理函数的地址加入tasksArr[]数组中:
void osalInitTasks(void) { Uint8 taskID=0; taskEvent=(uint16*)osal_mem_alloc(sizeof(uint16)*task aCnt); Osal_memset(tasksEvents,0,(sizof(uint16)*tasksCnt)) macTaskInit(taskID++); nwk_init(taskID++) ; Hal_Init(taskID++); #if defined(MT_TASK)
}
OSAL添加新任务
GenericApp_ProcessEvent函数添加到了数组的 末尾,GenericApp_Init函数在osalInitTasks中被 调用
taskArr[]数组各事件处理函数的排列顺序与 osalInitTasks函数调用各任务初始化函数的顺序 保持一致; 为了保存osalInitTasks函数所分配的任务ID,给 每个任务定义一个全局变量。
APS_event_loop;
#if defined (ZIGBEE_FRAGMENTATION)
OSAL添加新任务
事件处理函数的地址加入tasksArr[]数组, 代码:
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 网络中节点之间的通信规则和协议。
通过使用 Zigbee 协议栈,开发人员可以快速构建低功耗、低成本、可靠性和安全性的Zigbee 网络应用,满足不同应用场景的需求。
zigbee
我们用的是TI的CC2530F256,结合的是黄金单元协议栈(Z-Stack™),而所谓协议栈呢,就是网络中各层协议的总和,由上层协议到底层协议,再由底层协议到上层协议。
CC2530芯片40pins,GND4个,AVDD6个,DVDD2个,DPIO有21个,分别是P0,P1,和P2.0~P2.4,其中P1.0和P1.1的输出驱动电流是20mA,其余IO是4mA;6-mm ×6-mm 的QFN40 封装,焊接有点难度。
VDD的范围是2v~3.6v,最高不超过3.9v。
CC2530 有8KBSRAM ,映射到DATA和XDATA;256KB闪存,映射到CODE和XDATA。
内部集成了一个增强型8051,每个指令周期是1个时钟(一般mcu-51是12个时钟)。
(1)MCU的存储器:CODE 用于存储程序的64KB只读存储器,DATA,可读可写的256byte 的数据存储器,XDATA,与CODE共享64KB的存储空间,可读可写的数据存储器;SFR,128Byte 可读可写寄存器存储空间;2(2)中断:有18个中断源,然后分为6个中断优先组,通过设置IP0_IPGX(X为0到5)和IP1_IPGX来设定优先级;(3)电源和时钟:有五种电源模式,主动模式、空闲模式、PM1,PM2和PM3。
空闲模式是CPU停止工作,主动模式是完全工作模式,PM1,PM2和PM3是部分休眠模式,32M 和16M晶振不开启,32k晶振运行,等待复位或者外部中断、定时器中断到了,便自动跳转到主动模式;(4)闪存有256kb,以页为单位,每页2048byte,共128页;一页是最小可擦除单元,地址是器FADDRH:FADDRL,16位地址;一字(32位)是最小可写单元,地址是通过寄存器FADDRH[7:1寻址;这个需要注意的;(5)IO:21个IO,每个都可独立使用,通过设置寄存器PXSEL来选择是IO口还是第二功能,然后PXDIR设置输入还是输出,0入1出;每当复位之后,所有21个引脚都是通用输入IO,然后每个IO都可以在设置为输入后用作中断,PXEN是中断使能,PXIFG是中断标志,(其中X是0,1,2);这些同MSP430是相似的设置。
ZIGBEE技术规范与协议栈分析
ZIGBEE技术规范与协议栈分析篇一:ZigBee知识无线龙1.协议栈工作流程和无线收发控制 LED 实验内容:1. ZigBee 协议栈简介2. 如何使用 ZigBee 协议栈3. ZigBee 协议栈的安装、编译与下载4. 协议栈无线收发控制 LED5. 协议栈工作流程实现现象:协调器、终端上电,组网成功后 D1 灯闪烁 1. ZigBee 协议栈简介什么是 ZigBee 协议栈呢?它和 ZigBee 协议有什么关系呢?协议是一系列的通信标准,通信双方需要共同按照这一标准进行正常的数据发射和接收。
协议栈是协议的具体实现形式,通俗点来理解就是协议栈是协议和用户之间的一个接口,开发人员通过使用协议栈来使用这个协议的,进而实现无线数据收发。
图 1 展示了 ZigBee 无线网络协议层的架构图。
ZigBee 的协议分为两部分,IEEE 802.15.4 定义了 PHY(物理层)和 MAC(介质访问层)技术规范;ZigBee联盟定义了NWK(网络层)、APS(应用程序支持子层)、APL(应用层)技术规范。
ZigBee协议栈就是将各个层定义的协议都集合在一直,以函数的形式实现,并给用户提供 API(应用层),用户可以直接调用。
图 1 ZigBee 无线网络协议层 2. 如何使用 ZigBee 协议栈协议栈是协议的实现,可以理解为代码,函数库,供上层应用调用,协议较底下的层与应用是相互独立的。
商业化的协议栈就是给你写好了底层的代码,符合协议标准,提供给你一个功能模块给你调用。
你需要关心的就是你的应用逻辑,数据从哪里到哪里,怎么存储,处理;还有系统里的设备之间的通信顺序什么的,当你的应用需要数据通信时,调用组网函数给你组建你想要的网络;当你想从一个设备发数据到另一个设备时,调用无线数据发送函数;当然,接收端就调用接收函数;当你的设备没事干的时候,你就调用睡眠函数;要干活的时候就调用唤醒函数。
所以当你做具体应用时,不需要关心协议栈是怎么写的,里面的每条代码是什么意思。
zigbee协议栈系统说明
当有一个事件发生的时候,OSAL负责将此事件分配给能够处理此事件的任务,然后此任务判断事件的类型,调用相应的事件处理程序进行处理。
{ GenericApp_TaskID = task_id; } 这条语句将分配给GenericApp的任务ID保存了下来。 到此,我们就给应用程序中完整的添加了一个任务。
我们回到OSAL如何将事件分配给任务这个问题上来
在OSAL_GenericApp.c这个文件中,在定义TaskArr这个数组之后,又定义了两个全局变量。
下图是ZigBee协议的结构图:
从这幅图中,我们可以很清楚地从宏观上了解ZigBee协议的结构。可是,经过粗略的浏览,我们并没有发现任何OSAL的踪迹。当然,我们都知道,Z-Stack与ZigBee之间并不能完全划等号。Z-Stack是ZigBee的具体实现,所以存在于Z-Stack中的OSAL并不一定出现在ZigBee中。但是,我们可以在ZigBee中找到些许OSAL的踪影。
C:\Texas Instruments\ZStack-1.4.3-1.2.1\Projects\zstack\Samples\GenericApp。
首先我们去繁就简,先来了解应用程序的运行方式。
在右侧工作空间窗口打开App文件夹,我们可以看到三个文件,分别是“GenericApp.c”、“GenericApp.h”、“OSAL_GenericApp.c”。我们整个程序所实现的功能都在这三个文件当中。 首先打开GenericApp.c这个文件。我们首先看到的是比较重要的两个函数:GenericApp_Init和GenericApp_ProcessEvent。从函数名称上我们很容易得到的信息便是,GenericApp_Init是任务的初始化函数,而GenericApp_ProcessEvent则负责处理传递给此任务的事件。
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有了很大的相似处。
μC/OS-II中也是通过建立任务把一个问题进行分解,任务之间可以通过消息队列的方式进行通信。
接着,osal通过osal_add_task添加任务到任务表中,形成一个任务链表.这个任务链表是以任务的优先级先后排序的.优先级高的排在前,低者排于后.最后,开始运行系统,系统是以一个死循环的形式工作的.在循环体当中不断地检测各个任务,看是否要运行等.这就相当于我们平时用的linux和window等多任务系统,把CPU分成N个时间片(有多少任务就分成多少时间片),只要处理频率高,就相当于多任务同时运行了总之,OSAL实现了类似操作系统的某些功能,但我认为并不能称之为真正意义上的操作系统。
zIgbee协议栈浅析
#ifndef NONWK // Since the AF isn't a task, call it's initialization routine afInit(); #endif
// Initialize the operating system osal_init_system(); // Allow interrupts osal_int_enable( INTS_ALL ); // Final board initialization InitBoard( OB_READY ); // Display information about this device zmain_dev_info(); /* Display the device info on the LCD */ #ifdef LCD_SUPPORTED zmain_lcd_init(); #endif
简介: ZigBee是一种低速短距离传输的无线网络协 议。 ZigBee协议从下到上分别为物理层(PHY)、媒体 访问控制层(MAC)、传输层(TL)、网络层(NWK)、 应用层(APL)等。其中物理层和媒体访问控制层遵 循IEEE 802.15.4标准的规定
优点: ZigBee网络主要特点是低功耗、低成本、低 速率、支持大量节点、支持多种网络拓扑、低 复杂度、快速、可靠、安全。 ZigBee网络中的设备可分为协调器 (Coordinator)、汇聚节点(Router)、传感器节 点(EndDevice)等三种角色
zIgbee典型的组网方式:
Z-Stack协议栈的开发 一、开发环境的搭建: 见 详细的操作方法可以打开
二、Z-Stack协议栈工程文件的介绍 下的
Source文件里存放的是我们自己编写的程序文件 和协议栈自带的OSAL_SampleApp.c、 SampleApp.c、SampleApp.h、 SampleAppHw.h 文件。这里的SampleApp.c是我们最常用的文件, 在这文件中我们可以在协议栈中加入并执行我们 自己的功能程序。
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 ishigh enough to run检测电源电压保证正常运行zmain_ram_init(); // Initialize stack memory 初始化内存InitBoard( OB_COLD ); // Initialize board I/O 初始化板子上的IO口HalDriverInit(); // Initialze HAL drivers 初始化硬件抽象层驱动osal_nv_init( NULL ); // Initialize NV System 初始化非易失存储系统zmain_ext_addr(); // Determine the extended address 确定扩展地址也就是64位的IEEE地址zgInit(); // Initialize basic NV items 初始化基本的NV条目ZMacInit(); // Initialize the MAC 初始化MAC层#ifndef NONWKafInit(); // Since the AF isn't a task, call it'sinitialization routine#endifosal_init_system(); // Initialize the operating system 初始化操作系统osal_int_enable( INTS_ALL ); // Allow interrupts 打开中断InitBoard( OB_READY ); // Final board initialization 最终板子的初始化zmain_dev_info();// Display information about this device 显示关于设备的信息#ifdef LCD_SUPPORTED /* Display the device info on the LCD */显示设备信息在LCD上zmain_lcd_init();#endifosal_start_system(); // No Return from here 启动操作系统没有返回值} // main()我们可以看出里面都是一些初始化函数,但main是按照一定的顺序对系统进行初始化的。
zigbee协议栈深入详解
zigbee协议栈2010-03-10 15:11zigbee协议栈结构由一些层构成,每个层都有一套特定的服务方法和上一层连接。
数据实体(data entity)提供数据的传输服务,而管理实体(managenmententity)提供所有的服务类型。
每个层的服务实体通过服务接入点(Service AccessPoint.SAP)和上一层相接,每个SAP提供大量服务方法来完成相应的操作。
ZigBee协议栈基于标准的OSI七层模型,但只是在相关的范围来定义一些相应层来完成特定的任务。
IEEE 802.15.4—2003标准定义了下面的两个层:物理层(PHY层)和媒介层(MAC层)。
ZigBee联盟在此基础上建立了网络层(NWK 层)以及应用层(APL层)的框架(framework)。
APL层又包括应用支持子层(Application Support Sub—layer,APS)、ZigBee的设备对象(ZigBee Device 0bjects。
ZD0)以及制造商定义的应用对象。
1物理层(PHY)IEEE802.15.4协议的物理层是协议的最底层,承担着和外界直接作用的任务。
它采用扩频通信的调制方式,控制RF收发器工作,信号传输距离约为50m(室内)或150m(室外)。
IEEE802.15.4.2003有两个PHY层,提供两个独立的频率段:868/915MHz 和2.4GHz。
868/915MHz频段包括欧洲使用的868MHz频段以及美国和澳大利亚使用的915MHz频段,2.4GHz频段世界通用。
2媒体访问控制层(MAC)MAC层遵循IEEE802.15.4协议,负责设备间无线数据链路的建立、维护和结束,确认模式的数据传送和接收,可选时隙,实现低延迟传输,支持各种网络拓扑结构,网络中每个设备为16位地址寻址。
它可完成对无线物理信道的接入过程管理,包括以下几方面:网络协调器(coordinator)产生网络信标、网络中设备与网络信标同步、完成PAN的入网和脱离网络过程、网络安全控制、利用CSMA—CA机制进行信道接入控制、处理和维持GTS(Guaranteed Time Slot)机制、在两个对等的MAC实体间提供可靠的链路连接。
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),它的定义为:#define SYS_EVENT_MSG 0x8000;它包含如下事件:AF_INCOMING_MSG_CMD 收到一个新的无线数据ZDO_STATE_CHANGE 网络状态发生变化事件,利用它判断终端加入网络后何时向协调器发送数据包。
OSAL在Zigbee的应用详解【入门级】
第一部分OSAL主循环流程我使用的协议栈版本及例子信息:ZigBee2006\TexasInstruments\ZStack-1.4.3-1.2.1\Projects\zstack\Samples\Sampl eApp接上篇OSAL初始化流程.记录下个人对OSAL主循环流程的学习: OSAL系统主循环函数:void osal_start_system(void){#if!defined(ZBIT)//不知道是什么东西for(;;)//Forever Loop#endif{uint8idx=0;Hal_ProcessPoll();//This replaces MT_SerialPoll()and osal_check_timer().//轮询TIMER与UART//执行循环语句:tasksEvents[idx]是一个指针变量,指向存放任务idx的存储空间,初始化时由//osal_memset()设为0,只要不为空类型NULL,//即有相对应任务事件发生,就break跳出循环体,通过下面的程序进行任务事件处理。
//如果为空,执行判断语句,即idx自增,再返回轮询有无各层的任务事件发生。
如果//执行完循环语句都没有检测到有事件发生,idx=7,进入睡眠。
(对于本例子来说,任务数组里只有七个任务,tasksEvents[0]~tasksEvents[6],tasksEvents[6]就是用户自已添加的任务,idx随着用户添加任务的增多而增大)do{if(tasksEvents[idx])//Task is highest priority that is ready.{break;}}while(++idx<tasksCnt);//tasksCnt=7(针对本例子,随着用户应用任务增多而增大)if(idx<tasksCnt){uint16events;halIntState_t intState;//中断位状态HAL_ENTER_CRITICAL_SECTION(intState);//中断临界状态:保存先前中断状态,然后关中断events=tasksEvents[idx];//uint16events;对应有事件发生的任务的数组tasksEvents[idx]=0;//Clear the Events for thistask.NULLHAL_EXIT_CRITICAL_SECTION(intState);//跳出中断临界状态:恢复先前中断状态events=(tasksArr[idx])(idx,events);//调用相对应的任务事件处理函数处理,各类事件处理函//数M(task_id,event)返回的都是这个任务未被处理的事件HAL_ENTER_CRITICAL_SECTION(intState);tasksEvents[idx]|=events;//Add back unprocessed events to the current task.//把刚才返回未处理的任务事件添加加当前任务中再进行处理//(跳出此if(idx<tasksCnt)循环再进行if(tasksEvents[idx])判断并处理)HAL_EXIT_CRITICAL_SECTION(intState);}#if defined(POWER_SAVING)else//Complete pass through all task events with no activity?{osal_pwrmgr_powerconserve();//Put theprocessor/system into sleep}#endif}}说明:(1)OSAL调用Hal_ProcessPoll();来轮询UART与TIMER,涉及HAL层,晚点总结.(2)HAL_ENTER_CRITICAL_SECTION(intState);与HAL_EXIT_CRITICAL_SECTION(intState);见1;(3)events=tasksEvents[idx];tasksEvents[idx]=0;见2;(4)events=(tasksArr[idx])(idx,events);见3;(5)tasksEvents[idx]|=events;见4;1、HAL_ENTER_CRITICAL_SECTION(intState)与HAL_EXIT_CRITICAL_SECTION(intState)定义在hal_mcu.h中,如下:*******************************************/*/*********************************************Interrupt Macros**************************************************************************************/*/#define HAL_ENABLE_INTERRUPTS()st(EA=1;)//开中断#define HAL_DISABLE_INTERRUPTS()st(EA=0;)//关中断#define HAL_INTERRUPTS_ARE_ENABLED()(EA)typedef unsigned char halIntState_t;//中断位状态//中断临界状态:把原先中断状态EA赋给X,然后关中断;以便后面可以恢复原先的中断状态#define HAL_ENTER_CRITICAL_SECTION(x)st(x=EA;HAL_DISABLE_INTERRUPTS();)//跳出上面的中断临界状态,恢复先前的中断状态#define HAL_EXIT_CRITICAL_SECTION(x)st(EA=x;)//中断临界状态以及跳出临界状态的全过程:#define HAL_CRITICAL_STATEMENT(x)st(halIntState_t s; HAL_ENTER_CRITICAL_SECTION(s);x;HAL_EXIT_CRITICAL_SECTION(s);)st()函数,定义在hal_defs.h中:*This macro is for use by other macros to form a fully valid C statement.*Without this,the if/else conditionals could show unexpected behavior.#define st(x)do{x}while(__LINE__==-1)/*-------------------------------------------------------------------------------------------------------------*#define st(x)do{x}while(__LINE__==-1)*1,__LINE__是个宏,它代表当前代码在源文件的行号,它是大于0的,所以__LINE__==-1等同于0,化简为:*#define st(x)do{x}while(0)*2,do{}while(0)通常用于宏中,为的是避免如下情况:*#define st(x)x*那么我们在调用if(0)st(a=b;b=c;)时会被解释成*if(0)*a=b;*b=c;*可见if只对a=b;起作用--------------------------------------------------------------------------------------------------------------*/*/---------------------2、events=tasksEvents[idx];tasksEvents[idx]=0;个人认为,tasksEvents[]是一个指针数组(但是在协议栈里对这个“数组”的定义我还没有找到,只是在OSAL_SampleApp.c下有这么一个声明:uint16*tasksEvents;以及系统任务初始函数下对tasksEvents的定义),内部各元素都是指向uint16类型变量的指针变量(对于本例子来说内部各元素即tasksEvents[0]~tasksEvents[6];tasksEvents[0]指向任务1的存储空间……),对events的声明也是uint16events;。
zigbee OSAL NV 区操作
ZCD_NV_PRECFGKEY 0x0062 预先配置的安全密钥
ZCD_NV_PRECFGKEYS_ENABLE 0x0063 密钥配置为整个网络还是协调器
//ZDO层的项
ZCD_NV_USERDESC 0x0081
0x0001-0x0020 OSAL
0x0021-0x0040 NWK
0x0041-0x0060 APS
0x0061-0x0080 Sec
0x0081-0x00A0 ZDO
0x00A1-0x0200 保留
ZCD_NV_QUEUED_POLL_RATE 0x0025 队列轮询率
ZCD_NV_RESPONSE_POLL_RATE 0x0026 响应轮询率
ZCD_NV_REJOIN_POLL_RATE 0x0027 重新连接轮询率
// NWK层的项
ZCD_NV_NIB 0x0021
ZCD_NV_DEVICE_LIST 0x0022
ZCD_NV_ADDRMGR 0x0023
ZCD_NV_POLL_RATE 0x0024 轮询率
// ZCL 层的项
ZCD_NV_SCENE_TABLE 0x0091
// Non-standard NV item IDs
ZCD_NV_SAPI_ENDPOINT 0x00A1
用户自定义NV项:
为用户保留的NV项目号从 0x0201 --- 0x0FFF
ZCD_NV_APS_ACK_WAIT_MULTIPLIER 0x0045 这个数被用做非轮询设备
ZCD_NV_BINDING_TIME 0x0046 终端设备绑定时间数
// 安全层的项
ZCD_NV_SECURITY_LEVEL 0x0061 安全等级
zigbee协议位于osi的哪层
zigbee协议位于osi的哪层竭诚为您提供优质文档/双击可除zigbee协议位于osi的哪层篇一:zigbee无线网络协议层各层的作用zigbee无线网络协议层各层的作用zigbee无线网络协议层共分为4层,分别为phy层,mac 层,nwk层和apl层,各层作用的简单介绍如下。
1.phy层在zigbee无线网络中,phy层位于协议层的最底层,是距离硬件最近的层,它直接控制并与无线收发器通信。
phy 层负责激活发送或接受数据包的无线设备。
phy层还选择信道的频率并确保该频道当前没有被任何一个其他网络中的设备所使用。
2.mac层mac层为phy层和nwk层提供了接口,它负责产生信标和为信标(beacon-enabled网络)同步设备,mac层还提供建立连接和解除连接的服务。
3.nwk层nwk层接口负责管理网络形成和路径选择。
路径选择就是选择将信息转发到目标设备的路径。
zigbeecoordinator和router负责发现和维护网络中的路径,zigbee终端设备不能执行发现路径。
zigbeecoordinator或者router将代表终端执行路径发现,zigbeecoordinator的nwk层负责建立一个新的网络和选择网络拓扑(树型,星型,或网状网络拓扑),zigbeecoordinator还为网络中的设备分配网络地址。
4.apl层apl层是zigbee无线网络中的最高协议层并且管理应用对象。
生产商开发应用对象来为各种应用定制一款设备,在zigbee设备中,应用对象控制和管理协议层,单个的设备中最多可以有240个应用对象。
在开发一个应用时,zigbee标准提供了使用应用框架的选择。
应用框架是一系列关于特定应用消息格式和处理动作的协议。
使用应用框架可以使不同供应商开发的同一款应用的产品之间有更好的互操作性。
篇二:网络题目+答案选择:1.ip、telnet、udp分别是osi参考模型的哪一层协议?a.1、2、3b.3、4、5c.4、5、6d.3、7、42.如何跟踪Rip路由更新的过程?a.showiprouteb.debugipripc.showipripd.cleariproute*3.Rip的最大跳数是:__________________a.24b.18c.15d.124.ieee802.1qVlan能支持的最大个数为?a.256b.1024c.2048d.40945.在访问列表中,有一条规则如下:access-list131permitipany192.168.10.00.0.0.255eqftp在该规则中,any的意思是表示:____________ a.检察源地址的所有bit位b.检查目的地址的所有bit位c.允许所有的源地址d.允许255.255.255.2550.0.0.0 6.访问列表是路由器的一种安全策略,你决定用一个标准ip访问列表来做安全控制,以下为标准访问列表的例子为:______________a.access-liststandard192.168.10.23b.access-list10deny192.168.10.230.0.0.0c.access-list101deny192.168.10.230.0.0.0d.access-list101deny192.168.10.23255.255.255.255 7.当Rip向相邻的路由器发送更新时,它使用多少秒为更新计时的时间值?a.30b.20c.15d.258.如果子网掩码是255.255.255.128,主机地址为195.16.15.14,则在该子网掩码下最多可以容纳多少个主机?a.254b.126c.62d.309.ieee802.1q数据帧用多少位表示Vida.10b.11c.12d.1410.如何在R2624路由器上测试到达目的端的路径a.tracertb.pathpingc.tracerouted.ping11.190.188.192.100属于哪类ip地址a.a类b.b类c.c类d.d类e.e类12.Rip对应的端口号是什么a.25b.23c.520d.6913.校园网设计中常采用三层结构,s1908主要应用在哪一层a.核心层b.分布层c.控制层d.接入层14.对应osi参考模型的网络层在tcp/ip定义叫什么名称?a.应用层b.网际层c.会话层d.传输层15.下列哪些访问列表范围符合ip范围的扩展访问控制列表?a.1-99b.100-199c.800-899d.900-99916.stp交换机缺省的优先级为:______________a.0b.1c.32767d.3276817.ieee制定实现stp使用的是下列哪个标准a.ieee802.1wb.ieee802.3adc.ieee802.1dd.ieee802.1x 18.R2624路由器如何验证接口的acl应用a.showintb.showipintc.showipd.showaccess-list 19.数据包丢失一般是由网络_________________引起的。
见过的最浅显易懂的ZigBee协议栈解析
见过的最浅显易懂的ZigBee协议栈解析ZigBee技术是物联网领域最常用的无线技术之一,如果我们要做基于ZigBee技术的物联网应用,最好对ZigBee协议栈有一个基本的了解。
这篇文章对ZigBee协议栈做一个简单明了的介绍。
概述本文准备介绍的ZigBee协议栈是ZigBee2007,也是目前业界最常用的标准版本,对于ZigBee协议栈的演进历程,可以参加《5分钟了解Zigbee的前世今生》。
ZigBee协议栈可以分为四层:物理层(PHY)、媒体访问控制层(MAC)、网络层(NWK)及应用层(APL)。
如图所示,粉色的部分是由IEEE标准中定义的,浅蓝色部分是由ZigBee联盟规定的,黄色部分是由设备厂商自行定义。
ZigBee协议栈图示在ZigBee协议栈的图示中,我们还可以发现有很多圆角矩形,都带有SAP的字样。
SAP的意思就是服务接入点(Service Access Point)的意思,是协议栈层与层之间的接口,协议栈都是分层结构的,接口就是层与层之间的沟通渠道。
协议栈相邻的上下层之间一般都有两个接口,也就是两个SAP。
名字中带字母D的SAP是数据接口,负责层间数据传输;名字中带字母M的SAP是管理接口,供上层或协议栈的管理平面对该层进行控制,比如进行一些参数配置,或读取状态等。
PHY & MAC & NWKZigBee2007协议栈的物理层及MAC层都是IEEE802.5.14-2003标准中定义的。
PHY层(物理层)规定了所使用的频段,以及所使用的编码、调制、扩频、调频等无线传输技术;有了物理层,就有了一个实现点到点之间的信号发射与接收的基础,没有物理层协议,设备间是根本没有办法通信的,有可能都不在一个频段上。
MAC层的主要作用规定了无线信道的访问控制机制,也就是规定各个设备按照什么规矩轮流使用信道;如果没有MAC层协议,节点一多,大家没有个规矩,就会发生信号冲突,谁都没法正常传输数据了。
ZigBee协议栈的分析与设计
ZigBee协议栈的分析与设计ZigBee协议栈的分析与设计引言随着物联网的不断发展,无线传感器网络(WSN)得到了广泛的应用。
ZigBee作为一种低功耗、短距离、低带宽的无线通信协议,逐渐成为物联网中最受欢迎的通信协议之一。
本文将对ZigBee协议栈进行深入的分析与设计,以期更好地理解其工作原理并提供一种优化方案。
一、ZigBee协议栈的结构与功能1. ZigBee协议栈结构ZigBee协议栈由两部分组成:上层和下层。
上层包括应用层(Application Layer)、网络层(Network Layer)和安全层(Security Layer)。
下层包括物理层(Physical Layer)和介质访问控制层(Media Access Control Layer)。
2. ZigBee协议栈功能- 物理层(Physical Layer):负责将数据转换为无线信号,通过无线传输介质进行通信。
ZigBee协议栈支持多种物理层标准,例如2.4GHz、900MHz和868MHz等。
- 介质访问控制层(Media Access Control Layer):负责数据帧的分发和接收,同时处理多跳中继和协议转发。
- 网络层(Network Layer):提供网络拓扑管理、路由选择、数据包传输和安全性等功能。
ZigBee协议栈使用了Ad-hoc On-Demand Distance Vector(AODV)路由协议来实现自组网和动态路由选择。
- 应用层(Application Layer):定义应用程序的协议和接口,包括设备发现、网络配置、设备控制等功能。
- 安全层(Security Layer):提供数据加密和认证等安全机制,确保通信的可靠性和机密性。
二、ZigBee协议栈的分析1. 物理层分析ZigBee协议栈采用低功耗、短距离的射频通信技术。
2.4GHz频段是其最常用的无线传输介质,具有广泛的应用领域。
ZigBee协议栈使用了Direct Sequence Spread Spectrum (DSSS)技术来提高抗干扰性能。
Zigbee协议栈OSAL层API函数(译)OSAL_API_F8W-2003-0002
event_flag :2个字节,每个位特指一个事件。只有一个系统事件,其他事件在接收任务中定义。
返回值:
ZSUCCESS 成功设置
INVALID_TASK 无效任务
参数:
task_id :消息发送者的任务标识
返回值:
指向消息所存放的缓冲区指针,如果没有收到消息将返回NULL。
4.任务同步API
4.1概述
这个API使能一个任务等待一个事件的发生和返回控制而不是一直等待。在这个API中的函数可以用来为任务设置事件,立刻通知任务有事件被设置。
4.2 osal_set_event( )
概述:
函数用来设置一个任务的事件标志
原型:
byte osal_set_event( byte task_id, UINT16 event_flag )
参数:
task_id :任务标识
msg_ptr :指向消息缓冲区的指针
返回值:
ZSUCCESS 消息发送成功
INVALID_MSG_POINTER 无效指针
INVALID_TASK 目标任务无效
参数:
event_id :将要结束的目标事件(该事件是启动定时器的事件)
返回值:
ZSUCCESS Timer 成功停止
INVALID_EVENT_ID 无效事件
原型:
byte *osal_msg_allocate( uint16 len )
参数:
len :消息的长度
返回值:
指向消息缓冲区的指针,当分配失败时返回NULL
3.3 osal_msg_deallocate( )
概述:
ZigBee协议栈的OSAL运行机理研究与测试
2017年 / 第8期 物联网技术390 引 言从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所示。
图1 OSAL 的程序实现流程图打开一个ZigBee 工程文件,在左侧通常可以看到三个文件,分别为“Coordinator.c ”、“Coordinator.h ”、“OSAL_GenericApp.c ”。
整个程序所实现的功能都包含在这三个文件中。
首先打开Coordinator.c 文件,可以看到两个比较重要的函数GenericApp_Init 和 GenericApp_ProcessEvent 。
GenericApp_Init 是任务的初始化函数,GenericApp_ProcessEvent 则负责判断由参数传递的事件类型,然后执行相应的事件处理函数[3]。
我们的设计同样需要遵循该流程,既要进行任务初始化也需要完成开中断执行操作系统实体的功能。
Zigbee协议栈中文说明免费
1.概述1.1解析ZigBee堆栈架构ZigBee堆栈是在IEEE 802.15.4标准基础上建立的,定义了协议的MAC和PHY层。
ZigBee设备应该包括IEEE802.15.4(该标准定义了RF射频以及与相邻设备之间的通信)的PHY和MAC层,以及ZigBee堆栈层:网络层(NWK)、应用层和安全服务提供层。
图1-1给出了这些组件的概况。
1.1.1ZigBee堆栈层每个ZigBee设备都与一个特定模板有关,可能是公共模板或私有模板。
这些模板定义了设备的应用环境、设备类型以及用于设备间通信的簇。
公共模板可以确保不同供应商的设备在相同应用领域中的互操作性。
设备是由模板定义的,并以应用对象(Application Objects)的形式实现(见图1-1)。
每个应用对象通过一个端点连接到ZigBee堆栈的余下部分,它们都是器件中可寻址的组件。
图1-1 zigbe堆栈框架从应用角度看,通信的本质就是端点到端点的连接(例如,一个带开关组件的设备与带一个或多个灯组件的远端设备进行通信,目的是将这些灯点亮)。
端点之间的通信是通过称之为簇的数据结构实现的。
这些簇是应用对象之间共享信息所需的全部属性的容器,在特殊应用中使用的簇在模板中有定义。
图1-1-2就是设备及其接口的一个例子:图1-1-2每个接口都能接收(用于输入)或发送(用于输出)簇格式的数据。
一共有二个特殊的端点,即端点0和端点255。
端点0用于整个ZigBee设备的配置和管理。
应用程序可以通过端点0与ZigBee 堆栈的其它层通信,从而实现对这些层的初始化和配置。
附属在端点0的对象被称为ZigBee设备对象 (ZD0)。
端点255用于向所有端点的广播。
端点241到254是保留端点。
所有端点都使用应用支持子层(APS)提供的服务。
APS通过网络层和安全服务提供层与端点相接,并为数据传送、安全和绑定提供服务,因此能够适配不同但兼容的设备,比如带灯的开关。
- 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.当特定的事件或条件发生时,调用者使用函数指针调用回调函数对事件进行处理。
使用条件编译是因为单片机的存储器资源有限。