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

姓名:屈彦维

学号:16020610026

引自:http://lw.3edu.net/qrs/lw_46805.html

嵌牛导读:分析长任务对嵌入式系统实时性的影响,在此基础上提出任务分割是提高嵌入式系统实时性的一种有效途径;总结长任务分割的方法,给出一个通过任务分割提高嵌入式系统实时性的实例。

嵌牛鼻子:嵌入式系统 实时内核 时间片 任务分割

嵌牛提问:如何通过任务分割提高嵌入式系统的实时性?

嵌牛正文:

引言

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

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

1.1 任务与多任务

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

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

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

1.2 嵌入式多任务实时系统

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

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

2.1 长任务的定义

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

2.2 长任务对RTOS的影响

当使用可剥夺型实时内核时,长任务由于执行的时间较长,因而更容易被高优先级的任务打断;一旦高优先级的任务进入了就绪态,当前任务的CPU使用权就被剥夺了,或者说任务被挂起了,那个高优先级的任务立刻得到了CPU的控制权。这样会出现两个问题:一是长任务可能在一次执行的过程中被频敏打断,长时间得不到一次完整的执行;二是长任务被打断时,可能要保存大量的现场信息,其目的是为了保证在高优先级的任务执行完返回后,长任务能得以继续执行。然而,这样做要占用一定的系统资源,同时保存现场本身也是要占用CPU时间的,因此,实时性也会下降。

当使用不可剥夺型实时内核时,长任务对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

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

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

4 实例分析

4.1 系统介绍

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

此内核主要是利用微控制器内部的时间模块产生恒定的实时中断,将CPU的运行时间分成一个个时间片。内核的任务调度工作都是在时间片的开始阶段完成的,而每个任务都必须在单个时间片内完成。

在这个内核中,每0.5ms发生1次时钟中断,而每10次时钟中断组成了1个时间片(5ms)。任务1的优先级最高,每2个时间片(10ms)会执行1次,任务2每4个时间片(20ms)执行1次,优先级最低的任务6则每64个时间片(320ms)会执行1次。

4.2 系统中的键盘任务问题

在单片机系统中,键盘主要用于输入数据、代码和命令,因此系统必须循环不停地扫描扫描;一是有键波按下,CPU立即做出响应。键盘任务子程序也是根据这个要求而设计的。一般有两种处理方式:一是中断方式,二是查询方式。从有键按下时开始,到按键释放并转相应子程序而终止。该任务被内核调度的情况如图3所示。

图3中,Δt是人手按键的时间,一般为100~300ms。为了能说明问题,这里取100ms。

令 t1'-t1=Δt1,t2'-t2=Δt2

则一次键盘任务的执行时间

Δt'=t'2-t'1=t2+(t'2-t2)-[t1+(t'1-t1)]=

t2+Δt2-t1-Δt1=

t2-t1+(Δt2+Δt1)=

Δt+(Δt2-Δt1)

由图3可知

Δt1≤tms Δt2≤5ms

实际上,由于两次任务执行的情况不完全相同,Δt1与Δt2可能会有相当于几个指令周期的时间差异,但也只是μs级的误差。而且,这里是以时间片的形式来计算的,所以依然可以认为

Δt2-Δt1=0

因而有

Δt'=Δt+(Δt2-Δt1)=Δt=100ms(20个时间片)

也就是说,在这20个时钟片内只执行1次键盘任务,大部分的时间都在空等待。在此期间,系统中会有20-1=19次其它任务的执行被错过,图3中虚线所示就是在此100ms期间被错过执行的19个任务。显然,这在大多数多任务系统中都是不允许的。

因此,在这个多任务实时系统中,键盘任务是个典型的长任务,要使其它19次任务中断都有被应用的机会,必须对该键盘任务进行分割。

4.3 键盘任务的分割

键盘分割的方法是将一次键盘任务分成多个小任务,通过多次任务中断来完成。我们将其放在任务4中(80ms执行1次)。这样有ttask4≤ttask≤2ttask4,即可以保证键盘任务完整可靠地执行,又提高了CPU的效率。图4是分割后的键盘任务的执行过程。

从图4可以看出,1次完整的键盘任务是由2~3次任务中断来完成的。情况a中,每一次任务中断发生在ta1时刻,在接下来的一个时间片(5ms)内,检测到有键按下,调用查询值任务;第一次任务中断发生在ta2时刻,在接下来的一个时间片(5ms)内,检测到按键已释放,跳转并执行相应键处理程序。

情况b中,第二次任务中断时(tb2时刻),键还没有松开,因此实际上什么也不做;第三次中断(tb3时刻)才跳到与键值对应的子程序。

通过这样的分割,每个子任务都可以在5ms内完成。如果系统中还有大于5ms的长任务的话,可按此法继续进行分割;如果没有的话,系统任务级响应时间一定小于5ms。这样,此系统的实时性大大提高,由100ms提高到5ms。本刊网络补充版(http://www.dpj.com.cn)中,介绍了此任务改进后的部分源程序。

结语

通过任务分割,可以显著地提高多任务系统的实时性。本文改进后的源程序已经在基于MC68HC908GP32的温室控制器中成功地运行过。除此以外,还成功地对LED和SCI任务进行了分割。改进后,除了实时性大大提高外,CPU的执行效率也有显著提高。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,558评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,002评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,036评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,024评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,144评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,255评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,295评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,068评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,478评论 1 305
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,789评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,965评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,649评论 4 336
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,267评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,982评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,223评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,800评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,847评论 2 351

推荐阅读更多精彩内容