龙源期刊网httpwwwqika
comc
基于VxWorks操作系统下的延时方法比较
作者:白晓慧来源:《科技视界》2016年第07期
【摘要】比较了基于VxWorks操作系统的多种延时方法,编写了基于系统时钟定时器的延时方法的中断服务程序。该方法精确,可靠。已在工程实践中,证实了该方法的有效性以及精确性。【关键词】VxWorks操作系统;延时方法;中断服务程序0引言VxWorks操作系统是运行在目标机上的高性能、可裁剪的嵌入式实时多任务操作系统,其良好的可靠性和卓越的实时性被广泛地应用在通信、军事、航空、航天、航海等高精尖技术及实时性要求极高的领域中。在实际的工程应用中,周期任务,需要有最大的延迟或称为等待时间。这类任务一般会为BIT检测任务,链路检测任务,点迹查询任务等。这段等待时间,在VxWorks操作系统中,可以通过多种延时方法实现。1taskDelay法11原理taskDelay()是最简单的延时方法。延时操作提供了一个简单的任务休眠机制。当一个任务调用taskDelay()后,它将主动放弃CPU一段时间,进入Delay状态。超时后,这个任务会排到Ready队列中同优先级队列的队尾等待执行。它的单位是tick,tick是VxWorks下的时钟中断频率,可以通过sysClkRateSet()设置,一般在60100之间。在体系架构、CPU频率等硬件条件允许的范围内,这个值可以随意设置。不过,设置的时候要根据实际需要,而不是每个时间片的间隔越短越好。时间片的数量影响着内核每秒钟调度的次数,而每次内核调度都需要消耗一定的CPU资源。如果每秒产生的时间片数量过大,内核调度所消耗的CPU资源就会过多,从而影响整机效率。在实际工程中,一般选取每秒tick数为100。可以通过调用taskDelay(0),将CPU交给同等优先级的任务。由于其延时的基本单位为tick,因此,最小延时单位为10ms,延时精度不高。一般来说,当该任务通过taskDelay()进入睡眠状态时,若这段时间内被高优先级的任务占有资源时,则一直得等高优先级的任务放弃资源时,这个任务才会获得资源。因此,taskDelay()延时很方便,却需要有一定的风险。实际的延时时间为预设延时时间与排队等候时间之和,这样将会导致延时不准确,也对任务的调度安排提出了一个挑战。这样
f龙源期刊网httpwwwqika
comc
看来,时间片延时并不是很准确,其准确程度需要根据任务调度的状况来决定。如果没有任务占用CPU,等待的误差不超过一个时间片的时间长短;如果有高优先级或同优先级的任务不释放CPU资源,那么等待将直到任务获取CPU资源才能结束。1r