用户登录  |  用户注册
首 页商业源码原创产品编程论坛
当前位置:PB创新网文章中心解决方案电子通信

通过任务分割提高嵌入式系统的实时性

减小字体 增大字体 作者:佚名  来源:本站整理  发布时间:2009-01-10 22:40:38
【本文由PB创新网为您整理】
摘要:分析长任务对嵌入式系统实时性的影响,在此基础上提出任务分割是提高嵌入式系统实时性的一种有效途径;总结长任务分割的方法,给出一个通过任务分割提高嵌入式系统实时性的实例。

    关键词:嵌入式系统 实时内核 时间片 任务分割

引言

随着工业的飞速发展,人们对系统实时性的要求越来越高。计算机技术的进步客观上也为进一步提高实时性提供了可能。因此近年来,嵌入式实时系统的研究已经成为单片同应用领域的又一大热点,实编排软件也越来越多,有商业软件,也有免费的代码。然而影响系统实时性的因素很多,有硬件,也有软件的。这就决定了提高系统的实时性并不是一件十分容易的事情,除了使用高性能的CPU和高效的实时内核外,在实时系统应用的过程中,还要结合具体情况进行具体分析,充分利用CPU的效率,挖掘内核的实时潜能。

1 任务与嵌入式多任务实时系统

1.1 任务与多任务javascript:window.open(this.src);" style="cursor:pointer;"/>

在嵌入式多任务实时系统时,任务是指一个程序分段。这个分段被操作系统当作一个基本单元来调度。

典型地,每个任务都是一个无限的循环,而且在同一时刻只能处于以下5种状态之一。这5种状态是休眠态、就绪态、运行态、等待态和被中断态,如图1所示。

多任务系统的执行过程实际上就是一系列任在这5种状态中循环流动、轮流被内核调度的过程。多任务运行使CPU的利用率得到最大的发挥,并使应用程序模块化。

1.2 嵌入式多任务实时系统

RTOS本质上就是嵌入的实时内核,它负责管理各个任务,或者说是为每上任务分配CPU时间,并且负责任务之间的通信。实时内核可分为可剥夺型和不同剥夺型两类。因此,按照所使用内核的不同,嵌入式实时系统也可分为两类:使用不可剥夺型内核的嵌入式实时系统和使用可剥夺型内核的嵌入式实时系统。

2 实时系统中的长任务问题

2.1 长任务的定义

在RTOS中,长任务就是指整个任务的执行时间较长,超出了RTOS中其它某一个或某几个任务的实时要求容限,而对整个RTOS的实时性构成威胁的那些任务。

2.2 长任务对RTOS的影响

当使用可剥夺型实时内核时,长任务由于执行的时间较长,因而更容易被高优先级的任务打断;一旦高优先级的任务进入了就绪态,当前任务的CPU使用权就被剥夺了,或者说任务被挂起了,那个高优先级的任务立刻得到了CPU的控制权。这样会出现两个问题:一是长任务可能在一次执行的过程中被频敏打断,长时间得不到一次完整的执行;二是长任务被打断时,可能要保存大量的现场信息,其目的是为了保证在高优先级的任务执行完返回后,长任务能得以继续执行。然而,这样做要占用一定的系统资源,同时保存现场本身也是要占用CPU时间的,因此,实时性也会下降。
javascript:window.open(this.src);" style="cursor:pointer;"/>
    当使用不可剥夺型实时内核时,长任务对RTOS的影响更为明显,因为在这种内核中,任务级响应时间取决于最长的任务执行时间。这也就是说由于长任务的存在,任务级的响应时间要变长。其结果是CPU长时间停留在长任务中,其它的任务得不到实时的响应,甚至于根本得不到执行,系统的实时性势必要下降。

总之,无论是使用可剥夺型内核,还是使用不可剥夺型内核,长任务都会对RTOS构成严重的威胁。

3 长任务问题的解决

解决长任务问题最有效的途径是进行任务分割。所谓任务分割指将影响系统实时性的长任务分割成若干个小任务。这样单个任务的执行时间变短,系统的任务级响应时间变短,实时性提高。

3.1 对RTOS的分析与计算

当然,长任务的分割必须结合系统中所使用的内核,以及各任务对实时性的要求情况,进行必要的分析计算,才能保证分割的合理性和有效怀,具体的步骤如下:

①分析系统共有多少个任务,这些任务对实时性的要求有多高,求出各个任务所要求的最小执行频率f1,f2,f3……fn。

②计算目前各任务的实际执行时间t1,t2,t3……tn。

③确定系统中的长任务

如果max(t1,t2,t3……tn)≤min(1/f1,1/f2,1/f3……1/fn)

则此系统中不存在长任务。

如果max(t1,t2,t3……tn)>min(1/f1,1/f2,1/f3……1/fn)

则存在长任务,而且执行时间为max(t1,t2,t3……tn)的那个任务就是要找的长任务。

④分析此长任务是否需要分割

分析一下是什么原因导致执行的时间过长,这个时间还能够通过程序的优化来缩短?如果能,则不需要进行任务分割;否则要对这个长任务进行分割。

    3.2 任务分割

常用的任务分割的方法有以下两种:

①将长任务按功能分为若干个小模块,每一个模块构成一个小任务,每个小任务执行一个相对独立的功能,且要保证执行时间t<min(1/f1,1/f2,1/f3……1/fn)。各个任务被内核顺序调用,合起来完成整个任务的功能。

②有的长任务比较特殊,例如键盘任务和动态LED显示任务,很难按照方法1所说的把它分成若干个功能相对独立的小模块。这时,一般是按照方便保存现场信息原则,强制将其分割成若干个小任务,每个任务在min(1/f1,1/f2,1/f3……1/fn)时间内主动保存现场信息、放弃CPU的控制权,等到再次被内核调度时继续执行。

这种分割方法相对复杂,各任务之间界限不是很明显,看似未经分割,但实际上它确实是由多次任务中断来完成。下面就以这种分割方法为例具体说明。

4 实例分析

4.1 系统介绍

在此,系统的硬件基础是基于MC68HC908GP32单片机系统的,用其普通I/O口作为矩阵式键盘的输入输出引脚;软件基础是在MC68HC908GP32中运行Motorola公司的Joanne Santangeli编写的基于时间片的不可剥夺的实时内核,如图2所示。
javascript:window.open(this.src);" style="cursor:pointer;"/>
   

[1] [2]  下一页

Tags:

作者:佚名

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
PB创新网ourmis.com】Copyright © 2000-2009 . All Rights Reserved .
页面执行时间:11,281.25000 毫秒
Email:ourmis@126.com QQ:2322888 蜀ICP备05006790号