传感网应用开发(高级)课件4.2-Z-Stack-OSAL运行机制.pptx

传感网应用开发(高级)课件4.2-Z-Stack-OSAL运行机制.pptx

ID:58527688

大小:3.21 MB

页数:22页

时间:2020-10-21

传感网应用开发(高级)课件4.2-Z-Stack-OSAL运行机制.pptx_第1页
传感网应用开发(高级)课件4.2-Z-Stack-OSAL运行机制.pptx_第2页
传感网应用开发(高级)课件4.2-Z-Stack-OSAL运行机制.pptx_第3页
传感网应用开发(高级)课件4.2-Z-Stack-OSAL运行机制.pptx_第4页
传感网应用开发(高级)课件4.2-Z-Stack-OSAL运行机制.pptx_第5页
资源描述:

《传感网应用开发(高级)课件4.2-Z-Stack-OSAL运行机制.pptx》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、Z-StackOSAL运行机制任务与事件的添加基于协议栈的串口通信01重点与难点02原理介绍03目录CONTENTS串口通信案例重点与难点重点:1、OSAL的运行机制;2、任务、事件、事件处理函数的概念。难点:1、事件响应机制;2、添加任务、事件的实现。2.1OSAL术语及概念Z-Stack采用基于一个轮转查询式操作系统,该操作系统命名为OSAL(OperatingSystemAbstractionLayer),中文为“操作系统抽象层”。Z-Stack协议栈将底层、网络层等复杂部分屏蔽掉,让程序员通过API函数就可以轻松地开发一套ZigBee系统。原理介绍任务(Task

2、)任务又称线程,是一个简单的程序的执行过程。在任务设计时,需要将问题尽可能地分为多个任务,每个任务独立完成某种功能,同时被赋予一定的优先级,拥有自己的CPU寄存器和堆栈空间资源。一般将任务设计为一个无限循环。事件(Events)ZigBee协议栈是由各个层组成的,每一层都要处理各种事件,所以就为每一层定义了一个事件处理函数,可以把这个处理函数理解为任务,任务从消息队列中提取消息,从消息中提取所发生的具体事件,调用相应的具体事件处理函数,比如按键处理函数等等。原理介绍2.2OSAL运行机制OSAL就是以实现多任务为核心的系统资源分配机制,主要提供任务注册、初始化和启动,任

3、务间的同步、互斥,中断处理,存储器分配与管理等功能。OSAL负责调度各个任务运行,如果有事件发生时,则会调用相应的事件处理函数进行处理。图1OSAL运行机制原理介绍事件和任务的事件处理函数是如何建立关系:首先,建立一个事件表,保存各个任务的对应的事件;其次,建立一个函数表,保存各个任务事件处理函数的地址;最后,将这两个表建立某种对应关系,当某一事件发生时,则查找函数表找到对应的事件处理函数。原理介绍图2事件表和函数表的关系■通过不断地查询事件表(tasksEvents[idx]),判断是否有事件发生,如果有则查找函数表(tasksArr[idx]),调用本事件的处理函数

4、。■事件表是用数组来表示,数组的每个元素对应用一个任务的事件,一般用户定义的事件最好是每一位二进制数表示一个事件,那么一个任务最多可以有16个事件(因为events是uint16类型)。例如:0x01表示串口接收新数据,0x02表示读取温度数据,0x04表示读取湿度数据等,但是不用0x03、0xFE等数值表示事件。■函数表是用指针数组来表示,数组的每个元素是相应任务的事件处理函数的首地址(函数指针)。OSAL是一种基于事件驱动的任务轮询式操作系统,事件有效才调用相应任务的事件处理函数。原理介绍2.3关键函数在ZigBee协议栈中,tasksCnt、tasksEvents

5、和tasksArr三个变量非常重要:tasksCnt:该变量保存了任务的总数量。tasksEvent:这是一个指针,指向了事件表的首地址。在OSAL_SampleApp.c中声明为:uint16*tasksEvents;tasksArr:这是一个数组,该数组的每个元素都是一个函数指针(函数的地址),指向了事件函数。原理介绍2.4添加任务与事件的方法在ZigBee协议栈应用程序开发时,添加新的任务及其对应的事件,方法如下:■在任务的函数表中添加新任务。■编写新任务的初始化函数。■定义新任务全局变量和事件。■编写新任务的事件处理函数。原理介绍3.1案例介绍在用户应用层任务处

6、理函数SampleApp_ProcessEvent中实现每隔1秒向串口发送“HelloZigBee!”;并增加一个应用层新任务,实现由PC端发送字符“1”和“0”控制ZigBee模块的LED2灯的开与关。实训案例1、移除工程中的SampleAppHw.h和SampleAppHw.c文件。修改SampleApp.c文件对头文件的引用(注意Workspace选择CoordinatorEB)。实训案例2、打开MT_UART.h,关闭串口流控,将波特率改为115200。实训案例3、修改SampleApp.h,增加周期时长和串口事件编号的宏定义。实训案例4、SampleApp.c

7、中修改SampleApp_Init函数,启动一个1秒定时器,向SampleApp_TaskID发送串口定时发送事件。实训案例实训案例5、修改SampleApp_ProcessEvent函数。增加新事件SAMPLEAPP_SEND_PERIODIC_UART_MSG_EVT的处理,先向串口输出“HelloZigBee”信息,再启动1秒定时器。实训案例6、添加应用层新任务。(1)创建UartApp.h头文件,并在该文件中增加任务初始化函数和事件处理函数声明。实训案例(2)创建UartApp.c文件,并在该文件中增加新任务的初始化函数和事件处理

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。