基于VxWorks操作系统下的延时方法比较

上传人:ldj****22 文档编号:33104906 上传时间:2018-02-13 格式:DOC 页数:6 大小:27.50KB
返回 下载 相关 举报
基于VxWorks操作系统下的延时方法比较_第1页
第1页 / 共6页
基于VxWorks操作系统下的延时方法比较_第2页
第2页 / 共6页
基于VxWorks操作系统下的延时方法比较_第3页
第3页 / 共6页
基于VxWorks操作系统下的延时方法比较_第4页
第4页 / 共6页
基于VxWorks操作系统下的延时方法比较_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《基于VxWorks操作系统下的延时方法比较》由会员分享,可在线阅读,更多相关《基于VxWorks操作系统下的延时方法比较(6页珍藏版)》请在金锄头文库上搜索。

1、基于 VxWorks 操作系统下的延时方法比较引言VxWorks 操作系统是运行在目标机上的高性能、可裁剪的嵌入式实时多任务操作系统,其良好的可靠性和卓越的实时性被广泛地应用在通信、军事、航空、航天、航海等高精尖技术及实时性要求极高的领域中。在实际的工程应用中,周期任务,需要有最大的延迟或称为等待时间。这类任务一般会为 BIT 检测任务,链路检测任务,点迹查询任务等。这段等待时间,在VxWorks 操作系统中,可以通过多种延时方法实现。1 taskDelay 法原理taskDelay 是最简单的延时方法。延时操作提供了一个简单的任务休眠机制。当一个任务调用 taskDelay 后,它将主动放弃

2、 CPU 一段时间,进入 Delay 状态。超时后,这个任务会排到 Ready 队列中同优先级队列的队尾等待执行。它的单位是 tick,tick 是 VxWorks 下的时钟中断频率,可以通过 sysClkRateSet 设置,一般在 60-100 之间。在体系架构、CPU 频率等硬件条件允许的范围内,这个值可以随意设置。不过,设置的时候要根据实际需要,而不是每个时间片的间隔越短越好。时间片的数量影响着内核每秒钟调度的次数,而每次内核调度都需要消耗一定的 CPU 资源。如果每秒产生的时间片数量过大,内核调度所消耗的 CPU 资源就会过多,从而影响整机效率。在实际工程中,一般选取每秒 tick

3、数为 100。可以通过调用 taskDelay,将 CPU 交给同等优先级的任务。由于联盟其延时的基本单位为 tick,因此,最小延时单位为 10ms,延时精度不高。一般来说,当该任务通过 taskDelay 进入睡眠状态时,若这段时间内被高优先级的任务占有资源时,则一直得等高优先级的任务放弃资源时,这个任务才会获得资源。因此,taskDelay 延时很方便,却需要有一定的风险。实际的延时时间为预设延时时间与排队等候时间之和,这样将会导致延时不准确,也对任务的调度安排提出了一个挑战。这样看来,时间片延时并不是很准确,其准确程度需要根据任务调度的状况来决定。如果没有任务占用CPU,等待的误差不超

4、过一个时间片的时间长短;如果有高优先级或同优先级的任务不释放 CPU 资源,那么等待将直到任务获取 CPU 资源才能结束。1.具体实现STATUS taskDelay看门狗法原理实时系统任务的执行一般都有时限的约束。VxWorks提供了一种看门狗定时器机制,允许用户编写的函数与一个特定的时延相联系。这个时延,也是以 tick 来计量的。任何一个任务都可以创建 Watchdog Timer 并指定定时器超时后执行的例程。这个例程是在系统时钟 ISR 的上下文中执行,因此它具有与中断一样的优先级。Watchdog Timer并非一个周期性的定时器,在超时停止或是中途放弃计时之后,将一直处于静止状态

5、。这一点与系统时钟不同。看门狗定时器超时之后,指定的函数在中断级执行。可以模仿 VxWorks 中对异常处理的方法,采用分步处理的方法:在 Watchdog Timer 的 ISR 中所作的知识发送signal,或是释放信号量等一些简单的操作,而创建专用的task 等待接收这类信号,依据信号的指示再去执行相应的复杂处理。这样既不会影响系统的实时性,也可以满足用户多样的需求。这种计时方法可以提供比较精确的计时,其原因在于定时时间一到,所安排的任务会以中断级别或更高任务优先级执行。作为代价,看门狗定时器比 taskDelay 消耗了更多的系统资源,包括存储空间和处理器时间。事实上,整个处理的过程可

6、能还会增加中断处理时间。2.具体实现需要创建看门狗,并启动。所需函数如下:int wdCreateSTATUS wdStart系统时钟定时器法原理定时器机制的实现是建立在时钟基础上的。VxWorks为支持精确实时控制,利用不同的硬件定时器提供了系统时钟和系统辅助时钟。由于这两个时钟都以周期时钟形式运行,因此相关的硬件定时器的运行方式也是周期形式。每经过一个固定的时间间隔,硬件定时器的 ISR 将通知VxWorks 内核。系统时钟的周期称为 tick,定时的时长只能是 tick 的整数倍。由于系统时钟,处理系统级任务,因而时钟频率一般不能很高。但是可以设置系统辅助时钟的 tick数,使其达到精确

7、地定时。硬件中断处理是实时系统设计的最重要、最关键的问题。由于中断通常对应着外部事件,系统通过中断与外部事件交互。为了获得尽可能快的中断响应事件,VxWorks的中断处理程序运行在特定的上下文中。因此,中断处理不会涉及任务任务上下文的交换。应用程序可以使用 VxWorks 未用的硬件中断。VxWorks 提供函数 intConnect,它允许指定的 C 函数与任意中断相联系。intConnect 函数原型是:STATUS intConnect只要在工程中定义了 INCLUDE_SYSCLK_INT,系统就会自动完成对系统时钟的初始化,也就是在文件中的usrRoot 函数中实现。考虑到需要根据实

8、际工程中的需求,需要对不同的周期任务设定不同的定时器,因而选择自己对系统时钟进行初始化。本文中设置了 10 个定时器,分别为定时10ms,20ms,50ms,100ms,200ms,500ms ,1s,2s,5s,10s 。3.具体实现bool timEinital初始化时,首先应该关中断;其次,调用sysClkConnect 挂接时间中断服务程序;然后再通过调用sysClkRateSet 来设置系统时钟每秒中断的次数;最后再通过调用 sysClkEnable 使能对系统时钟中断的响应。中断服务程序中,需要首先调用 tickAnnounce,来通知内核一个 tick 事件。本项目工程的中断服务

9、程序完成的操作包括:获取并保存系统时钟 ISR 要调用的例程;关联系统时钟 ISR;对中断次数计数;更新定时器使能标志。需要说明的是,需要定义定时器的结构。若定义多个定时器,则定时器的结构中需包含编号,定时器的时间间隔数,定时器的时间毫秒数和定时标志。定时标志就是定时时刻到为 true,否则为 false。若定时时刻到,会通知另一个标志,并重新将定期器定时标志置为 false。小结本文结合工程实践,比较了基于 VxWorks 操作系统下的多种延时方法。硬件方面,时钟芯片会在确定的时间内为系统产生一个中断。软件方面,中断响应的过程也就是计时的过程,不过系统不会为每一次中断都进行处理,而是经过一定计数之后才会产生一个时间片。计时控制的目的就是在一段时间之后开始特定的工作。taskDelay 是延时结束后将任务置于就绪队列等候调度,直至 CPU 资源可用时执行被延迟的任务。看门狗法和系统时钟定时器法是基于硬件时钟的, 因而可靠性高。对系统时钟定时器的中断服务程序进行了修改,达到了定时的目的。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 社科论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号