针对嵌入式实时编程的系统性教学方法探讨

2009-08-28 09:09王苏峰陆洪毅侯方勇
计算机教育 2009年14期
关键词:嵌入式系统

王苏峰 窦 勇 陆洪毅 侯方勇

摘要:随着嵌入式计算技术的蓬勃发展和在各行各业的广泛应用,嵌入式系统成为当今国际教学和科研的热点领域之一。由于实际应用的需要,嵌入式系统大多是实时系统,对响应时间有严格的要求,因此其关键是如何保证系统的实时性。为了满足系统的实时性需要,人们提出了各种各样的实时编程结构,但是相关知识分散、叙述不够严密,且未能系统性的归纳和总结。本文针对这个问题,详细阐述了各种实时编程结构的结构模型、实时性和优缺点。

关键词:嵌入式系统;实时编程结构;前后台系统;实时操作系统

中图分类号:G642 文献标志码:B

1引言

随着嵌入式计算技术的蓬勃发展和在各行各业的广泛应用,嵌入式系统成为当今国际教学和科研的热点领域之一。由于实际应用的需要,嵌入式计算大多是实时计算系统,对响应时间有严格的要求,操作的正确性不但依赖于逻辑设计的正确程度,而且更依赖于这些操作进行的时间。所以嵌入式实时系统可以说是能在确定的时间内对外部的异步事件做出响应并执行其功能的计算机系统,这包含着两层含义:一个是外部的异步事件——事件响应,另外一个是执行其功能——任务处理。嵌入式实时系统有两种类型:软实时系统和硬实时系统。软实时系统仅要求事件响应是实时的,并不要求限定任务必须在多长时间内完成。硬实时系统不仅要求事件响应要实时,而且要求在规定的时间内完成任务的处理。通常大多数实时系统是两者的结合。因此,嵌入式实时系统的关键是如何保证系统的实时性。为了满足系统的实时性需要,人们提出了各种各样的实时编程结构,但是相关知识分散、叙述不够严密,且未能系统性的归纳和总结。为了满足教学的需要,针对这个问题,作者在此详细的阐述了各种实时编程结构的结构模型、实时性以及优缺点。

2无操作系统的实时编程结构

2.1基于查询方式的实时编程结构

在没有中断机制的情况下,仅采用查询方式实现的实时编程结构,如图1所示。

基于查询方式的实时编程结构侧重任务的处理,而事件的发生是通过查询事件标志来获取的;软件设计简单可靠,任务使用的堆栈可以预测,而且由于任务之间不嵌套,可以调用不可重入函数。但缺点也很明显,对事件响应不能实时,只有查询到该标志时才会记录该事件,因此容易丢弃异步事件;所有任务具有相同优先级别,众生平等;一个任务执行时间不可预测时,则所有任务的响应时间不可预测;采用无限循环结构,一个任务崩溃则引起整个系统崩溃。

在最坏情况下,一个任务要得到响应要等到其它所有任务执行完毕才会轮到它,所以实时性(最坏情况)取决于所有其它任务执行时间之和。

由于该类型嵌入式系统软件设计简单可靠,目前在某些任务简单且单一、可靠性要求极高而对实时性要求不是很高的领域(如航空航天领域)依然使用广泛。

2.2基于中断方式的实时编程结构

基于中断机制采用纯中断方式实现的实时编程结构,事件和任务处理全部由中断服务子程序(ISR)完成。如图2所示。

相对于基于查询方式的实时编程结构来说,基于中断方式的实时编程结构则侧重事件的处理,利用中断优先级解决了优先级问题,不再众生平等。但是由于高优先级中断长时间占用CPU,则容易漏掉低优先级的异步事件;中断无限制的嵌套则容易导致栈溢出(嵌入式系统栈容量很小),堆栈不可预测;由于中断嵌套,调用不可重入型函数时,要满足互斥条件。

由于高优先级中断能得到及时响应和处理,所以实时性(最坏情况)取决于中断响应时间(中断延迟+保存现场时间)。相对于任务执行时间来说,中断响应时间几乎可以忽略不计。中断恢复时间则包括恢复现场时间和执行中断返回指令的时间。

由于该类型嵌入式系统响应及时,但缺点也很明显,所以在任务数量不多且简单以及低功耗嵌入式系统中得到了广泛应用。

2.3基于前后台系统的实时编程结构

前后台系统通常把程序分成两部分:前台程序和后台程序。前台程序也就是事件处理程序(中断级),通过中断来处理事件。中断服务子程序一般只做简单的处理,然后给出事件发生的标志,待后台程序来处理,不会因处理费时的事件而影响其它中断。后台程序也就是任务处理程序(任务级),一个死循环,循环查询各种事件发生的标志位,如果标志位置位,就执行相应的任务处理程序。如图3、4所示。

中断有优先级,也可无优先级,因中断处理时间很短,几乎可以忽略不计。任务级采用周期循环调度,一个超循环系统,同查询系统一样,任务无优先级,众生平等。

事件响应实时性分析:由于中断服务子程序只一些做简单的处理(事件标志置位),事件能得到及时响应,可以避免中断嵌套(栈溢出),避免漏掉异步事件。

任务响应实时性分析:任务的执行是通过主循环查询相应的标志位(ISR置位)来执行的,可调用不可重入函数(任务间不嵌套),最坏的情况是循环中所有其它的任务处理程序执行完,才执行当前事件的任务处理程序。所以任务实时性(最坏情况)取决于所有其它任务执行时间之和。

显然任务实时性、可靠性难以满足要求,所有的任务具有相同的优先级别,即是平等的,对那些实时性要求高的任务不可能立刻得到处理。如果一个任务执行时间不能确定,则所有任务响应时间不可预测。任务处理(后台)程序是一个无限循环的结构,一旦在这个循环体中正在处理的任务崩溃,使得整个任务队列中的其它任务得不到机会被处理,从而造成整个系统的崩溃,任务优先级固定。

前后台系统结构简单,几乎不需要额外的存储开销,所以在简单的嵌入式应用中得到了广泛的应用。

3基于实时操作系统的实时编程结构

实时操作系统(Real Time Operating System,RTOS)指具有实时性、能支持实时系统工作的操作系统。首要任务是调度一切可利用的资源完成实时任务,其次才着眼于提高系统的使用效率。实时操作系统最重要特点是要满足对时间的限制和要求,基本结构如图5所示。

根据基于优先级的任务调度策略,实时操作系统可分为两类:非抢占(non-preemption)式实时操作系统和抢占式(preemption)实时操作系统。非抢占式实时操作系统也叫不可剥夺或非抢先式实时操作系统;抢占式实时操作系统也叫可剥夺或抢先式实时操作系统。

3.1基于非抢占式实时操作系统的实时编程结构

非抢占式实时操作系统就是一个任务运行后,就把CPU控制权完全交给了该任务,直到它主动将CPU控制权还回来。事件处理由中断服务子程序来处理,可以激活一个挂起态的任务,使之进入就绪态;中断服务子程序很简单,类似于前后台系统仅使标志置位。任务响应时间由最长任务执行时间、寻找最高优先级任务的时间以及任务切换时间决定,所以实时性(最坏情况)主要取决于最长任务的执行时间(其它可忽略)。

采用非抢占式实时操作系统的优点:实时性比前后台系统的要好,程序设计相对简单,可调用不可重入函数(任务间不嵌套)。缺点:如果最长任务的执行时间不能确定,系统的实时性(任务响应时间)就不能确定。

非抢占式实时操作系统运行原理如图6所示。

3.2基于抢占式实时操作系统的实时编程结构

抢占式实时操作系统就是指内核可以抢占正在运行任务的CPU使用权并将使用权交给进入就绪态的优先级更高的任务。事件处理由中断服务子程序来处理,可以激活一个挂起态的任务,使之进入就绪态。由于任务之间存在嵌套问题,应用程序不应该直接调用不可重入函数。调用不可重入型函数时,要满足互斥条件;调用可重入函数使得堆栈不可预测。任务响应时间包括寻找最高优先级任务的时间和任务切换时间,所以实时性(最坏情况)主要取决于任务切换时间(其它可忽略)。

采用抢占式实时操作系统的优点:实时性好,优先级高的任务只要具备了运行的条件,就可以立即运行。缺点:如果任务之间抢占CPU控制权处理不好,会产生系统崩溃、死机等严重后果(优先级倒置);调用不可重入型函数时,要满足互斥条件。

抢占式实时操作系统运行原理如图7所示。

4结束语

前面我们阐述了五种实时编程结构,下面比较一下各种结构的任务响应实时性。查询方式和前后台系统一样,实时性取决于它所有任务执行时间之和,可能不可预测;中断方式实时性取决于中断响应时间,可预测;非抢占式实时操作系统实时性取决于最长任务执行时间,可能不可预测;抢占式实时操作系统实时性取决于任务切换时间,可预测。

这是我们多年来从事嵌入式系统教学以及科研得来的一点点心得和体会,仅是我们的一家之言,希望对同行起到抛砖引玉的作用,也欢迎同行批评指正。

参考文献:

[1]王志英,李宗伯,王苏峰,等. 嵌入式系统原理与设计[M]. 北京:高等教育出版社,2007.

[2](英)Andrew Bateman,Lain Paterson Stephens. DSP算法、应用与设计[M]. 陈健,陈伟,汪书宁,译.北京:机械工业出版社,2003.

[3]Bruce Powel Douglass. 嵌入式与实时系统开发——使用UML、对象技术、框架与模式[M]. 柳翔,译. 北京:机械工业出版社,2005.

猜你喜欢
嵌入式系统
Teaching Research on IoT and—Embedded System of Software Engineering
基于Xilinx口袋实验室的组合逻辑电路设计实验
面向应用的智能专业嵌入式系统教学
基于AVR单片机的SPI接口设计与实现
办公自动化系统的设计
基于物联网项目驱动的嵌入式系统教学改革的研究与实践
嵌入式系统课程“中断、异常与事件”教学实践及启示
面向实践创新人才培养的嵌入式系统教学研究