




已阅读5页,还剩8页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
OSAL的工作原理 ZigBee 协议栈依据 IEEE 802.15.4 标准和 ZigBee 协议规范。ZigBee 网络中的各种操作需要 ,利用协议栈各层所提供的原语操作来共同完成。原语操作的实现过程往往需要向下一层发起一 个原语操作并且通过下层返回的操作结果来判断出下一条要执行的原语操作。IEEE 802 15 4 标准和 ZigBee 协议规范中定义的各层原语操作多达数十条,原语的操作过程也比较复杂,它 已经不是一个简单的单任务软件。对于这样一个复杂的嵌入式通信软件来说,其实现通常需要 依靠嵌入式操作系统来完成。 挪威半导体公司 Chipcon( 目前已经被TI 公司收购)作为业界领先的 ZigBee 一站式方案供应 商,在推出其 CC2530 开发平台时,也向用户提供了自己的 ZigBee 协议栈软件-Z-Stack 。这是 一款业界领先的商业级协议栈,使用 CC2530 射频芯片,可以使用户很容易的开发出具体的应 用程序来。Z-Stack 使用瑞典公司 IAR 开发的 IAR Embedded Workbench for MCS 51 作为它的 集成开发环境。Chipcon 公司为自己设计的 Z-Stack 协议栈中提供了一个名为操作系统抽象层 OSAL 的协议栈调度程序。对于用户来说,除了能够看到这个调度程序外,其它任何协议栈操 作的具体实现细节都被封装在库代码中。用户在进行具体的应用开发时只能够通过调用API 接 口来进行,而无权知道 Zig,Bee 协议栈实现的具体细节。 Z-Stack1.4.3及以后的版本中引入了一个OSAL(Operating System Abstraction Layer 操作系统抽象层),但在我们整个的ZigBee协议栈的结构图中,我并没有能够发现这个层在哪个位置。但是整个的协议栈都要在OS的基础上才能运行。OSAL和我们通常所说的RTOS,pc上的操作系统还是有很大的不同,ZigBee2006中只是利用了操作系统的概念和思想,利用OS把Z-Stack软件组件从特殊的处理过程相分离,并将软件成分保护了起来。它提供了如下的管理功能:任务的注册、初始化、开始 任务间的消息交换 任务同步 中断处理 时间管理 内存分配OSAL主要是这样一种机制,一种任务分配资源的机制,从而形成了一个简单多任务的操作系统。首先,osal初始化系统,包括软件系统初始化和资源初始化其中软件系统初始化就是初始化一些变量,比如osal重要的组成部分任务表,任务结构体和序列号资源初始化主要包括内存,中断,等各种设备模块资源这就和我们嵌入式系统中的RTOS操作系统C/OS-II有了很大的相似处。C/OS-II中也是通过建立任务把一个问题进行分解,任务之间可以通过消息队列的方式进行通信。 接着,osal通过osal_add_task添加任务到任务表中,形成一个任务链表这个任务链表是以任务的优先级先后排序的优先级高的排在前,低者排于后 最后,开始运行系统,系统是以一个死循环的形式工作的在循环体当中不断地检测各个任务,看是否要运行等这就相当于我们平时用的linux和window等多任务系统,把分成个时间片(有多少任务就分成多少时间片),只要处理频率高,就相当于多任务同时运行了。下面我们来结合sampleAPP来说明一下OSAL的具体工作情况。 Sample Application是ZStack协议栈提供的一个非常简单的演示实例,实例中的每个设备都可以发送和接收两种信息:周期信息和闪烁信息。周期信息-当设备加入该网络后,所有设备每隔 5S(加上一个随机数,毫秒mS为单位)发送一个周期信息,该信息的数据载荷为发送信息的次数。闪烁信息-通过按下按键 SW1发送一个控制LED灯闪烁的广播信息,该广播信息只针对组 1 内的所有设备。所有设备初始化都被加入组 1,所以网络一旦建立完成便可执行LED灯闪烁实验。可以通过按下设备的 SW2 退出组 1,如果设备退出组1则不再接收来自组1的消息,其按键SW1发送的消息也不再控制组1LED灯的闪烁。通过再次按下 SW2 便可让设备再次加入到组1,从而又可以接受来自组1的消息,其SW1也可以控制组1内设备的LED灯闪烁了。当设备接收到闪烁信息会闪烁LED灯,而当接收到周期信息时协议栈没有提供具体的实验现象,留给了用户自行处理,可以根据实际需要自行更改实验代码。在该工程中使用了两个按键SW1和SW2。即ZStack协议栈中的HAL_KEY_SW_1和HAL_KEY_SW_2。同时工程中也定义了一个事件用来处理周期信息事件,即SAMPLEAPP_SEND_PERIODIC_MSG_EVTSampleApp.h。二、一般工程说明: 在学习ZStack协议栈的时候我们要把握一个重点就是事件的产生和事件的处理。任务的初始化为事件的产生制造了“温床”,是事件产生的前提,任何工程都需要先初始化。当有事件产生OS就会调用相应的处理函数进行处理。在OS循环那一节我们可以看到在任务初始化的最后一项就是应用层的初始化,而在指向处理函数的指针数组中最后一项是对应的应用层的处理函数。应用层相关事件会由应用层处理函数进行处理。每一层都是相互对应,各司其职。程序执行流程如下:ZMain.c的main()-osal.c的osal_init_system()-OSAL_SampleApp.c的osalInitTasks()之后分两部分执行-首先执行SampleApp.c的SampleApp_Init(),接着执行osal.c中的事件循环,不停的执行SampleApp_ProcessEvent(),进行应用层事件检测。两个关键函数1.SampleApp_Init2.SampleApp_ProcessEvent具体代码如下:SampleApp_initvoid SampleApp_Init( uint8 task_id )/osal应用层的任务ID赋值SampleApp_TaskID = task_id;/设备状态设定为ZDO层中定义的初始化状态SampleApp_NwkState = DEV_INIT;/定义消息IDSampleApp_TransID = 0;/后面的demo例子中用到这个编译选项#if defined ( SOFT_START )/如果选择了SOFT编译选项,则作为协调器启动 zgDeviceLogicalType = ZG_DEVICETYPE_COORDINATOR;#endif / SOFT_START/如果定义了HOLD_AUTO_START选项,则调用层的ZDOInitDevice,按照默认顺/序网络中的第一个设备作为协调器,其他的设备作为子设备#if defined ( HOLD_AUTO_START )ZDOInitDevice(0);#endif/定义广播地址/地址模式SampleApp_Periodic_DstAddr.addrMode = (afAddrMode_t)AddrBroadcast;/指定端点号SampleApp_Periodic_DstAddr.endPoint = SAMPLEAPP_ENDPOINT/指定目的网络地址为广播地址SampleApp_Periodic_DstAddr.addr.shortAddr = 0xFFFF;/ 设定flash中命令即按键命令要发送的目的地址SampleApp_Flash_DstAddr.addrMode = (afAddrMode_t)afAddrGroup;SampleApp_Flash_DstAddr.endPoint = SAMPLEAPP_ENDPOINT;SampleApp_Flash_DstAddr.addr.shortAddr = SAMPLEAPP_FLASH_GROUP;/ 定义本设备用来通信的APS层端点描述符/端点号SampleApp_epDesc.endPoint = SAMPLEAPP_ENDPOINT;/任务IDSampleApp_epDesc.task_id = &SampleApp_TaskID;/简单描述符SampleApp_epDesc.simpleDesc = (SimpleDescriptionFormat_t *)&SampleApp_SimpleDesc;/延时策略SampleApp_epDesc.latencyReq = noLatencyReqs;/ 向AF层注册端点描述符afRegister( &SampleApp_epDesc );/ 向osal层注册按键消息RegisterForKeys( SampleApp_TaskID );/ 设定一个新的组/组号SampleApp_Group.ID = 0x0003;/设定组名osal_memcpy( SampleApp_G, Group 3, 7 );/把该组添加到网络中aps_AddGroup( SAMPLEAPP_ENDPOINT, &SampleApp_Group );#if defined ( LCD_SUPPORTED )/如果选择了LCD_SUPPORTED编译选项,会打印一串字符Print8(HAL_LCD_LINE_2,20,SampleApp,1);#endifuint16 SampleApp_ProcessEvent( uint8 task_id, uint16 events )/定义应用层数据包afIncomingMSGPacket_t *MSGpkt;/判断osal层的消息类型/如果系统消息到来if ( events & SYS_EVENT_MSG ) /接收数据包 MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive(SampleApp_TaskID ); /如果数据包不为空 while ( MSGpkt ) /判断消息类型 switch ( MSGpkt-hdr.event ) / 如果是按键消息 case KEY_CHANGE: /调用按键处理函数 SampleApp_HandleKeys( (keyChange_t *)MSGpkt)-state,(keyChange_t *)MSGpkt)-keys ); break; / 如果是别的组设备周期发送的消息 case AF_INCOMING_MSG_CMD: /调用对周期消息的处理函数 SampleApp_MessageMSGCB( MSGpkt ); break; / 如果是设备状态变换的命令 case ZDO_STATE_CHANGE: /获取设备状态 SampleApp_NwkState = (devStates_t)(MSGpkt-hdr.status); /如果是三种状态之一 if ( (SampleApp_NwkState = DEV_ZB_COORD) | (SampleApp_NwkState = DEV_ROUTER) | (SampleApp_NwkState = DEV_END_DEVICE) ) / 按正常间隔启动一个定时器 osal_start_timerEx( SampleApp_TaskID, SAMPLEAPP_SEND_PERIODIC_MSG_EVT, SAMPLEAPP_SEND_PERIODIC_MSG_TIMEOUT ); else /设备不在网络中的不做任何处理 / Device is no longer in the network break; default: break; / 释放消息占用的存储区 osal_msg_deallocate( (uint8 *)MSGpkt ); / 判断操作系统层是否有未处理的数据包,继续处理缓冲区中的包 MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive(SampleApp_TaskID ); /判断是否有未处理的系统消息,有则接收数据包,放到缓冲区一个个处理 return (events SYS_EVENT_MSG);/ 判断是否有定时消息if ( events & SAMPLEAPP_SEND_PERIODIC_MSG_EVT ) / 定时时间到发送一个消息 SampleApp_SendPeriodicMessage(); / 重新启动定时器 osal_start_timerEx( SampleApp_TaskID,SAMPLEAPP_SEND_PER
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 心理发展与教育
- 中医护理技术对黄疸的治疗
- 餐饮店员工绩效考核与晋升合同
- 系统化代牧养殖合同范本
- 餐饮连锁总经理任期目标与绩效考核合同
- 矿产资源开采安全生产责任书范本
- 城市更新改造项目旧厂房物业财产移交及改造合同
- 车辆无偿租赁与品牌合作推广合同
- 车辆合伙经营运输市场拓展协议
- 餐馆厨师岗位竞聘与选拔合同
- 2025年广东省广州市越秀区第十六中学中考二模数学试卷(含部分答案)
- 橱柜厂规章管理制度
- 初三中考数学最后一课-主题班会【课件】
- 2025益阳市赫山区中小学教师招聘考试试题及答案
- 水利工程施工监理规范(SL288-2014)用表填表说明及示例
- 2020-2021成都石室联合中学蜀华分校小学数学小升初模拟试卷附答案
- 某冶金机械厂供配电系统设计
- 《在中亚细亚草原上》赏析 课件
- 城市轨道交通供电技术442页完整版教学课件汇总全书电子教案
- Q/GDW248-2008输变电工程建设标准强制性条文实施管理规程第3部分:变电站建筑工程施工教程文件
- 小学生综合素质评价方案与评价表
评论
0/150
提交评论