本发明专利技术公开了一种VxWorks系统多路选择模式下任务定时器的实现方法。当发生定时到期事件后,回调函数根据入口参数指针所指的定时器描述节点具体内容,向对应的任务设置定时到期事件标志,采用VxWorks的管道机制通知任务,最后重新启动内核定时器。任务悬挂等待在一组文件描述字上,其中有一个文件描述字是管道,用于通知是否有定时事件到达。当有定时事件到达时,任务检查定时器描述节点数组,对于设置定时标志的定时器进行相应的定时处理。本方法能够及时将内核定时事件利用管道机制通知到基于select模式运行的任务,提高了任务可以创建的定时器数量,避免了这些操作在任务之间的竞争条件,并能够防止因任务反应慢而导致定时事件堆积现象。
【技术实现步骤摘要】
本专利技术涉及一种VxWorks操作系统下基于select模式 运行的任务定时器的实现方法。(二) 、
技术介绍
定时器是嵌入式系统中广泛使用的一种重要机制。 VxWorks操作系统提供了一个看门狗定时器机制,允许C函数与一个特定的时 间延迟相联系。通常与看门狗定时器相联系的函数以系统时钟中断级作为中断 服务代码来执行。如果因为某种原因,如一个先前的中断或内核状态,不能立 即执行相应的回调函数,操作系统将该函数放在系统异常处理任务tExcTask 工作队列中,tExcTask工作队列中的函数通常以优先级O运行。因此与看门狗 定时器相联系的函数代码也有与中断服务程序相同的约束,这就会给应用任务 定时器的处理代码带来很大的局限性,即应用任务定时器的处理代码不能调用 可能引起调用阻塞的函数。另外,不管回调函数在中断级还是系统异常处理任 务中执行,还要考虑回调函数和应用任务其它事件处理之间的竞争条件。在默认的阻塞模式下的套接字里,系统调用recv()会阻塞在那里,直到套 接字连接上有数据可读,把数据读到缓冲区里后recv()函数才会返回。在单线 程的程序里出现这种情况会导致线程被阻塞,这样整个程序被悬挂在这里,如 果永远没数据发送过来,那么程序就会被永远悬挂。这个问题可以用多线程解 决,但是在有多个套接字连接的情况下,这不是一个好的选择,扩展性很差。 另外,使用忙查询方式会导致运行效率低下。Select模型就是为了解决这个问 题而出现的,它的作用就是防止在阻塞模式的文件描述字里被悬挂。VxWorks 操作系统提供sdect()函数调用,用于任务需要监管多I/0数据的运行模式。在这种模式下任务基于系统调用select(),使用统一的文件描述字对网络套接字、文件、管道、串行设备等具有文件描述字特征的多路i/o进行数据读写操作。正C 61850是智能变电站使用的系统通信标准,国内和国际上一般都是基 于SISCO公司的MMSEASE-LITE软件包来实现IEC 61850的,其在VxWorks 系统下的运行框架就是基于select模式的。目前这种模式下的定时器采用 selectO函数的超时等待结合系统时间的查询比较来判断超时,效率低下,并且 精度很差。因此,针对基于select模式运行的任务,需要提出一个新的高效定 时器的实现方法。(三)、
技术实现思路
本专利技术所要解决的技术问题是,提出一种VxWorks系 统多路选择模式下任务定时器的实现方法,将VxWorks内核产生的定时事件 通知到任务,从而在任务级处理定时事件。为了解决上述问题,本专利技术采用了以下技术方案。一种,其特征是内核定时器回调函数的入口参数是定时器描述节点指针,利用管道实现内 核定时器回调函数和任务之间的同步机制。每个任务创建一个管道,管道能够 排队的最大消息数量是l,每个消息的最大长度是1字节,如果管道里有数据 则表示任务有定时事件到达;当发生定时到期事件后,回调函数根据入口参数指针所指的定时器描述节 点具体内容,向对应的任务设置定时到期事件标志,采用VxWorks的管道机制通知任务,最后重新启动内核定时器;任务悬挂等待在一组文件描述字上,其中有一个文件描述字是管道,用于 通知是否有定时事件到达,当有定时事件到达时,任务检査定时器描述节点数 组,对于设置定时标志的定时器进行相应的定时处理。一个任务创建的所有定时器可以共用一个管道文件描述字。保证各个任务创建的定时器数量之和不超过系统配置的最大定时器数量,以提高任务能够创建的定时器数量。定时器的创建、删除和定时事件管理所操作的数据都是针对任务的,以避免这些操作在任务之间的竞争条件;定时事件在应用任务中处理,以调用可能引起阻塞的函数,并且与该任务其它部分的代码在执行上不存在竞争条件。用标志位表示定时事件,以防止因任务反应慢而导致定时事件堆积现象。本专利技术的积极效果在于利用管道实现内核定时器回调函数和任务之间的同步机制。VxWorks的管道是一种由I/0系统管理的虚拟设备,是一种任务间的通信机制,和消息队列有一定的相似性,但是可以提供消息队列不能提供的一个重要功能,即可以使用sdect()系统调用。每个任务创建一个管道,管道能够排队的最大消息数量是l,每个消息的最大长度是1字节,管道里有数据表示任务有定时事件到达。设计有一个通用的内核定时器回调函数,其入口参数是定时器描述节点指针。当发生定时到期事件后,回调函数根据入口参数指针所指的定时器描述节点具体内容,向对应的任务设置定时到期事件标志,采用VxWorks的管道机制通知任务,最后重新启动内核定时器。本专利技术任务基于select模式运行,悬挂等待在一组文件描述字上,其中有一个文件描述字是管道,用于通知是否有定时事件到达。当有定时事件到达时,任务检查定时器描述节点数组,对于设置定时标志的定时器进行相应的定时处理。文件描述字是系统级的资源, 一个任务创建的所有定时器共用一个管道文件描述字,既实现了内核定时器回调函数和任务之间的同步机制,又降低了系统文件描述字的使用数量。本专利技术能够及时将内核定时事件利用管道机制通知到基于select模式运行的任务。只要保证各个任务创建的定时器数量之和不超过操作系统配置的最大定时器数量即可,提高了任务可以创建的定时器数量。定时器的创建、删除和定时事件管理所操作的数据都是针对特定任务的,从而避免了这些操作在任务之间的竞争条件。定时事件在应用任务中处理,可以调用可能引起阻塞的函数,并且与该任务其它部分的代码在执行上不存在竞争条件。用标志位表示定时事件,可以防止因任务反应慢而导致定时事件堆积现象。(四) 附图说明图1是基于多路选择模式运行的任务及其管理的各种文件描述字示意图。(五) 具体实施方式下面结合附图和具体实施例进一步说明本专利技术。以下是本专利技术的重要数据结构和功能模块。(1) 任务定时器节点结构类型TTimerPara。主要包括如下成员Wdld,内核定时器标示号;Sign,应用定时器标示号;IsUsing,该定时器节点是否被使用;Ticks,定时间隔;Taskld,任务标示号;TimerNo,该定时器在任务内的序号。(2) 任务描述表结构类型TTask。该结构类型主要反映应用任务所使用的一些资源和数据。与本专利技术相关的重要成员包括Taskld,任务标示号;TimerPipeFd,用于通知定时事件的管道描述字;TTimerPara TimerPara,定时器描述节点数组;BYTE TimerFlags,定时器到期标志数组。其中TASK一MAX一TIMER一NUM表示任务可以设置的最大定时器数目,每个定时器在TimerFlags数组中占一位,表示是否到期,表达式(TASK_MAX—TIMER—NUM+7)/8计算出任务的最大定时器数目占用的字节数。任务描述表里的定时器到期标志数组TimerFlags和定时器节点数组TimerPara的数组下标i之间的对应关系i的范围为0 TASK—MAX—TIMER—NUM-l, i/8表示定时器节点i占用定时器到期标志数组TimerFlags的数组下标号,i%8表示定时器节点i占用定时器到期标志数组TimerFlags某字节的位号,按从高位到低位排序。pipe()的使用特点类似于I/O系统的文件,通本文档来自技高网...
【技术保护点】
一种VxWorks系统多路选择模式下任务定时器的实现方法,其特征是: 内核定时器回调函数的入口参数是定时器描述节点指针,利用管道实现内核定时器回调函数和任务之间的同步机制。每个任务创建一个管道,管道能够排队的最大消息数量是1,每个消息的最大长度是1字节,如果管道里有数据则表示任务有定时事件到达; 当发生定时到期事件后,回调函数根据入口参数指针所指的定时器描述节点具体内容,向对应的任务设置定时到期事件标志,采用VxWorks的管道机制通知任务,最后重新启动内核定时器; 任务悬挂等待在一组文件描述字上,其中有一个文件描述字是管道,用于通知是否有定时事件到达,当有定时事件到达时,任务检查定时器描述节点数组,对于设置定时标志的定时器进行相应的定时处理。
【技术特征摘要】
【专利技术属性】
技术研发人员:韩明峰,唐永建,郑永志,高旭涛,
申请(专利权)人:东方电子股份有限公司,
类型:发明
国别省市:37[中国|山东]
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。