您好、欢迎来到现金彩票网!
当前位置:ds视讯 > 服务原语 >

zigbee 任务调度机制

发布时间:2019-07-15 20:07 来源:未知 编辑:admin

  1、任务调度:osal采用一个链表结构来管理协议栈各层相应任务。相关操作函数有,添加任务到链表中;获取下一个活动任务;根据taskID查找下一个任务。osal采用轮询任务调度队列(任务链表),通过两个函数:调度程序主循环函数和设置事件发生标志函数。

  2、时间管理:通过为事件设置超时等待时间,一旦等待时间结束,便为对应任务设置事件发生标志,从而达到对事件进行延时处理目的。

  3、原语通信:请求响应原语操作:一旦调用了下层相关函数后,就立即返回。下层处理函数在操作结束后,将结果以消息的形式发送到上层并产生一个系统事件,调度程序发现这个事件后就会调用相应的事件处理函数对它进行处理。两个相关函数:向目标任务发送消息的函数;消息提取函数。

  现有的嵌入式操作系统可以分为两类,即通用的多任务操作系统(General—purpose Multi-tasking OS)和事件驱动的操作系统(Event-driven OS)。前者能够很好地支持多任务或者多线程,但是会随着内部任务切换频率的增加而产生很大的开销,这类操作系统有:uC/OS-II、嵌入式Linux、WinCE等。后者支持数据流的高效并发,并且考虑了系统的低功耗要求,在功耗、运行开销等方面具有优势。典型的代表如TinyOSl291。

  目前TinyOS操作系统支持的平台有ATMEL公司的AVR系列、TI公司的MSP430系列。由于TinyOS操作系统还没有对Chipcon公司(才知道TI把它收购了)提供CC2430开发平台提供支持,因此,要在CC2430开发平台上使用TinyOS系统来开发Zigbee协议栈软件,就必须首先对TinyOS进行移植。灰常麻烦……

  因此Chipcon公司为自己设计的ZStack协议栈中提供了一个名为操作系统抽象层OSAL的协议栈调度程序。

  ZigBee协议栈中的每一层都有很多原语操作要执行,因此对于整个协议栈来说,就会有很多并发操作要执行。协议栈的每一层都设计了一个事件处理函数,用来处理与这一层操作相关的各种事件。这些任务,由ZigBee协议栈中调度程序OSAL来进行管理。这样,对于协议栈来说,无论何时发生了何种事件,我们都可以通过调度协议栈相应层的任务,即事件处理函数来进行处理。这样,整个协议栈便会按照时间顺序有条不紊的运行。

  ZigBee协议栈的实时性要求并不高,因此在设计任务调度程序时,OSAL只采用了轮询任务调度队列的方法来进行任务调度管理。

  链表的建立是按照任务优先级从高到低的顺序进行插入的。优先级高的任务将被插入到优先级低的任务前面。如果俩任务优先级相同,则按照时间顺序加入到链表中。那么这个任务链表在系统启动的时候建立,一旦建立后便一直存在于事个系统运行的过程中,直到系统关闭或硬件复位才被销毁。

  网络层中,任务初始化函数为nwkInit(),用来对网络层相关数据进行初始化操作。函数声明为

  对于 pfnEventProcessor是指向协议栈相关层的事件处理函数指针。比如:

  网络层中,事件处理函数nwk_event_loop(),用来处理与网络层相关的各种事件。函数声明为

  否则,就将任务插入到链表的尾部。在这个过程中,将为每个任务分配一个唯一的任务号。函数声明为:

  这个函数将根据任务列表在建立过程中为协议栈中每个任务分配的任务号,来查找对应任务。函数声明:

  当任务链表建立成功后,系统便开始运行。如果在系统运行的过程中有事件发生,系统就会通过调用相应的任务,即事件处理函数,对所发生的事件进行相应处理。在整个运行过程中,调度程序(OSAL)始终不停地轮询任务队列链表,以发现需要处理的事件。这个过程涉及两个函数操作:

  当协议栈中有任何事件发生时,我们可以通过设置osalTaskRec_t结构中的events来标记有事件发生,以便主循环函数能够及时加以处理。函数声明如下:

  协议栈中的每层都会有很多不同的事件发生,这些事件发生的时间顺序各不相同。很多时候,事件并不要求立即得到处理,而是经过一定的时间后再进行处理。OSAL调度程序设计了与时间管理相关的函数,用来各种不同的要被处理的事件。

  对事件进行时间管理,OSAL也采用了链表的方式进行,有时发生一个要被处理的事件,就启动一个逻辑上的定时器,并将此定时器添加到链表当中。利用硬件定时器作为时间操作的基本单元。设置时间操作的最小精度为1ms,每1ms硬件定时器便产生一个时间中断,在时间中断处理程序中去更新定时器链表。每次更新,就将链表中的每一项时间计数减1,如果发现定时器链表中有某一表项时间计数已减到0,则将这个定时器从链表中删除,并设置相应的事件标志。这样任务调度程序便可以根据事件标志进行相应的事件处理。具体参见关于“系统时钟”的记录。

  这个函数为事件event_id设置超时等待时间timeout_value。一旦等待结束,便为task_id所对应的任务设置相应的事件发生标记,再对事件进行相应处理。

  (原语只是一个理论层面上的术语,描述了服务层次的关系,以及两个通信的N用户和它们相连的N层(子层)对待协议实体之间的关系。初学时总是想不通原语跟协议栈的代码有什么关系,后来才了解了原语只是规范里面的一个术语,反映到协议栈代码里就是一个个具体的函数了!例如我们可以看到很多原语是以request,confirm等为后缀的,到了程序里面就是相应的request请求函数,confirm确认函数了。)

  对请求(request)、响应(response)原语可以直接使用函数调用来实现

  对确认(confirm)、指示(indication)原语则需采用间接处理机制来完成

  一个原语的操作往往需要逐层调用下层函数并根据下层返回的结果来进行进一步的操作。在这种情况下,一个原主的操作从发起到完成需要很长时间。因此,如果让程序一直等待下层返回的结果再进一步处理,会使微处理器大部分时间处于循环等待之中,无法及时处理其它请求。

  因此,与请求、响应原语操作相对应的函数,一旦调用了下层相关函数后,就立即返回。下层处理函数在操作结束后,将结果以消息的形式发送到上层并产生一个系统事件,调度程序发现这个事件后就会调用相应的事件处理函数对它进行处理。(调用就返回,而不管函数有没有处理完成。当函数处理完成后将结果以消息的形式发送到上层产生一个系统事件)。

  这个函数主要用来将原语操作结果以消息的形式往上层任务发送,并产生一个系统事件来通知调度程序。函数声明如下:

  参数destination_task是目标任务的任务号,参数指针msg_ptr指向要被发送的消息,参数len为消息长度

  这个函数返回一个指向osal_msg_received结构的指针,通过msg_ptr这个指针就可以提取出所需要的信息。(有一个例子,是以MAC层返回原语firm所对应的函数为例,下次再说明)

  说明:本文作者所记录,错误处还请高手指点,本人随时更新,转载请注明出处。

  本文《OSAL调度机制》主要内容参考厦门大学闫沫的《zigbee协议栈分析与设计》

  什么是真正的实时操作系统    做嵌入式系统开发有一段时间了,做过用于手机平台的嵌入式Linux,也接触过用于交换机、媒体网关平台的VxWorks。实际应用后回过头来看理论,才发现自己理解的肤浅,也发...博文来自:kanghe

  OSAL的运行机理   事件表函数表使用查表法来取得事件所对应函数   taskCnt  任务总数taskEvents 指向事件表首地址的指针taskArr 事件处理函数数组,每一项都是一个函数指针 ...博文来自:guomutian911的专栏

  这篇文章我们重点来看看zstack启动的过程中做了什么,如何启动起来的。github:博文来自:任杰的博客

  【Zigbee技术入门教程-02】一图读懂ZStack协议栈的基本架构和工作机理广东职业技术学院 欧浩源    Z-Stack协议栈是一个基于任务轮询方式的操作系...博文来自:wangyunfeis的博客

  广东职业技术学院 欧浩源    Z-Stack协议栈是一个基于任务轮询方式的操作系统,其任务调度和资源分配由操作系统抽象层OSAL管理着。      你可以理解为:Z-Stack协议栈 = OSAL操...博文来自:灵思致远Leansmall的博客

  本章简单的介绍一下ZigBee的消息机制,如果说的有问题还请多多指正。通俗的说,ZigBee的消息机制就好比这有一排抽屉,当我要向某个任务或者事件发送消息时,就把该消息和对应的数据放到抽屉中,在任务轮...博文来自:小杜的专栏

  1.任务状态FreeRTOS可以创建多个任务,但是对于单核cpu来说,在任意给定时间,实际上只有一个任务被执行,这样就可以把任务分成2个状态,即运行状态和非运行状态。当任务处于运行状态时,处理器就执行...博文来自:偏飞的博客

  zigbee在发送数据不成功的时候,会启用重发机制,而这个重发机制分为:MAC重发,APSC重发,NWK重发,而APSC和NWK重发是以接收到MACACK为前提,否则不会重发。参考资料:博文来自:MENGHUANBEIKE的专栏

  从一个驱动的代码中看到了request/indication/response/confirm等函数,不知是什么功能,上网找了找才发现原来是《计算机网络》中有关服务原语的概念。摘抄如下:服务原语包含四...博文来自:Hansel的专栏

  首先声明,我是纯粹的菜鸟,看zstack有三周了。昨天读了《RemoTI原版按键程序分析》感觉获益匪浅,在他的那篇帖子的基础上,我又自己将思路梳理了一遍,将回调函数这一部分的东西先写出来,呵呵。在...博文来自:ceci zhou

  我做操作的芯片是TiCC2530。就不考虑Zstack协议栈而言,如果要用到按键,无非是中断或者查询两种方式。查询方式是通过查询按键对应I/O口的状态来判断按键的状态,从而进行相应的处理。外部中断的方...博文来自:SteelStraightMan的博客

  进程调度负责决定哪个进程投入运行,何时运行以及运行多长时间。进程调度:非抢占式和抢占式Linux这么酷的系统当然是抢占式的喽。进程在被抢占之前可以运行的时间是预先设定好的,叫做时间片。有效...博文来自:One2zeror的专栏

  Windows是一款微内核、抢占式多任务、软实时的操作系统。Windows的任务调度主要以线程为单位进行,线为最高优先级,最高和最低优先级均...博文来自:caoshunxin01的专栏

  Hadoop其实没那么复杂,对每个子功能进行细分,一一解读,就可化整为零。MapReduce调度过程——主要角色JobTrackerHadoop任务调度的主脑,整个集群中的唯一角色,负责任务的分配。侦...博文来自:lt200819的专栏

  答:在stm32中是使用systick定时器来作为操作系统的时钟的。首先要清楚,在什么场合下会发生任务调度?在执行下面这些函数时,都会调用OS_Sched()函数进行任务调度。OSSchedUnloc...博文来自:m0_38056437的博客

  Spark任务调度1.任务调度流程图各个RDD之间存在着依赖关系,这些依赖关系就形成有向无环图DAG,DAGScheduler对这些依赖关系形成的DAG进行Stage划分,划分的规则很简单,从后往前回...博文来自:Running_Tiger的博客

  1.DAG调度器简介DAG即DirectedAcyclicGraph,有向无环图的意思,Spark会存储RDD之间的依赖广西,依赖关系是有向的,总是由子RDD指向父RDD(平时我们看到的箭头一般是数据...博文来自:PJ·Javis的专栏

  讲说spark的资源调度和任务调度,基本的spark术语,这里不再多说,懂的人都懂了。。。按照数字顺序阅读,逐渐深入理解:以下所有截图均为个人上传,不知道为什么总是显示别人的QQ,好尴尬,无所谓啦,开...博文来自:jagel-95

  问题起源于丢包率:丢包率的定义由自己去定义,重传收到数据算不算丢包由你自己去定义。问题起源于丢包率,发100个数据包,结果收到超过100个数据包。Zstack中mac层中默认有CSMA/CA机制,但是...博文来自:wearlee的博客

  任务调度1、任务级调度OSSched()2、中断级调度OSIntExit()3、运行多个任务具有相同优先级,可以被设置为循环轮转调度4、任务发生调度的情况   (1)任务调用提交服务函数Post,发送...博文来自:xxwl的博客

  ZigBee规范各层原语及其功能概述一、物理层服务规范1、物理层数据服务(1)请求原语PD-DATA.request:PD-DATA.request由MAC层发送到本地物理层,以请求发送MPDU(即物...博文来自:IWTLDFIP的博客

  AES加密算法,是一个迭代的、对称密钥分组的密码,它可以使用128、192和256位密钥,并且用128位分组加密和解密数据。Z-Stack中采用的是128位的加密方式。三步配置:1、创建密钥在配置文件...博文来自:Geek_LFP

  网络设备类型:802.15.4无线网路中有两种设备类型:PAN协调器(FFD)、设备(RFD)网络信道访问方式:信标(Beacon):在基于非竞争的信道访问方式中使用,PAN协调器为特殊设备留出一个时...博文来自:bandaostart

  Linux任务调度 一、概念Linux任务调度:定期调用Linux主机上的shell脚本任务,例如监控主机的内存、CPU和空间的使用率。 二、思路1) 触发方式:Spring定时器 a. @Compo...博文来自:weixin_42310288的博客

  freertos内核走读2——task任务调度机制博文来自:jorhai的博客

  1.MAC层:1):提供两种服务:通过MAC层管理实体接口(MLMESAP)向MAC层数据和MAC层管理提供服务2):MAC层特征:信标管理,信道接入,时隙管理,发送确认帧,发送连接和断开请求,提供安...博文来自:bandaostart

  近期嵌入式课程要求学习linux下的任务调度与管理指令,在这里记录一下,只是单个指令,不系统也不全,仅作参考例行性工作调度(crontab)首先简单介绍一下:    linux有非常多的例行性工作,这...博文来自:jmzlzl的博客

  1.定义及概述    路由的定义是:将数据从源节点传输到目的节点。路由这个词本义是动词,指将网络数据传输(transfer)到目标节点的动作,这个动作需要多个节点参与;有时也可能是名词,表示路由路径,...博文来自:jason_lm的专栏

  今天看了RTOS,很好奇系统什么时候进行任务切换来保证实时性,经过看ucosii发现,几乎做任何动作,系统都会任务切换一次,所以呢就在这里做个笔记。OSSchedUnlock();OSMboxPend...博文来自:菜鸟博客

  上面对ZigBee协议栈作了一些介绍,要知道ZigBee能胜任什么工作,还需要作进一步的分析,主要有几个方面:数据速率、可靠性、时延、能耗特性、组网和路由。ZigBee的数据速率比较低,在2.4GHz...博文来自:似水流年的专栏

  μcosIII任务调度原理解析前言μcosIII任务调度相关的数据结构任务控制块OS_TCB就绪任务表结构μcosIII时间节拍轮任务阻塞表任务调度实现细节任务调度点时钟节拍轮相关调度任务阻塞表相关调...博文来自:weixin_43862847的博客

  在DAG调度器完成了阶段划分的工作后,并把任务集交给任务调度器,接下来将深入到任务调度器内部,观察任务集已经任务的调度与执行过程1.任务分类与执行在Spark中,Task进一步被划分为ResultTa...博文来自:PJ·Javis的专栏

  在使用pip安装某个包时,python install xxx,会报拒绝访问的错误,解决方式是修改python安装目录的权限博文来自:AI百科的博客

  用以前以前写过的自定义课表软件 ,Android 自定义View课程表表格 n原生View截图合成分享的图片 n n n n n n n n n 看到的是图片只显示到11节处,下面的没有...博文来自:ShallCheek

  jquery/js实现一个网页同时调用多个倒计时(最新的)nn最近需要网页添加多个倒计时. 查阅网络,基本上都是千遍一律的不好用. 自己按需写了个.希望对大家有用. 有用请赞一个哦!nnnn//jsn...博文来自:Websites

  最近比较有空,大四出来实习几个月了,作为实习狗的我,被叫去研究Docker了,汗汗!nnDocker的三大核心概念:镜像、容器、仓库n镜像:类似虚拟机的镜像、用俗话说就是安装文件。n容器:类似一个轻量...博文来自:我走小路的博客

  weixin_45204569:非常感谢楼主细心分享自己的学习心得,对大家非常有用。我们公司也一直用halcon,使用起来真的很方便,上手快,其实halcon学习真的很简单,只要是要掌握住方法和套路,所以强烈建议跟着教程学习,淘宝搜halcon教程,有很多高质量的教程,可以跟着老师一步一步的学习,可以事半功倍。

  yc87606322:高通801,用QPST,QXDM无法修改imei,我虽然看不懂这个,但觉得这方法能改,能帮帮我?

http://wendevick.net/fuwuyuanyu/698.html
锟斤拷锟斤拷锟斤拷QQ微锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷微锟斤拷
关于我们|联系我们|版权声明|网站地图|
Copyright © 2002-2019 现金彩票 版权所有