访问电脑版页面

导航:老古开发网手机版其他

模拟比较器的应用(二)

导读:
关键字:
关于嵌入式应用开发技术 北京系统工程研究所蔡建平 摘要在阐述嵌入式系统概念和特性的基础上,介绍嵌入式系统设计中的硬件和软件协同设计、实时理论算法模型、实时设计表示、实时设计过程、实时软件设计方法等。文中还对应用软件开发的最小编程环境和实时操作系统、实时数据库以及软件的应用测试进行了阐述。 关键词嵌入式系统嵌入式应用开发软件测试 随着生产和科学技术的发展,特别是微电子技术的迅猛发展,原型技术和设计技术的不断成熟,以及计算机技术迅速地向非计算机领域的渗透,嵌入式计算机系统或者简称嵌入式系统越来越普遍地得到应用,也越来越显示出其商用的巨大市场回报。嵌入式系统上的投资或开销正在逐年上升。其中,硬件费用上升幅度慢慢减小,而软件费用上升幅度迅速增加。10年以后,嵌入式系统将在计算机应用领域占主导地位。 那么,什么是嵌入式系统呢?回答是:嵌入式系统是将计算机硬件和软件结合起来,构成一个专门的计算装置,完成特定的功能或任务。它是一个大系统或大的电子设备中的一部分,工作在一个与外界发生交互并受到时间约束的环境中,在没有人工干预的情况下进行实时控制。其中,软件用以实现有关功能并使其系统具有适应性和灵活性;硬件(处理器、ASIC、存储器等)用以满足性能甚至安全的需要。 嵌入式系统通常具有如下特性: (1) 完成单一或一组紧密相关的特定功能; (2) 具有高性能和实时的要求,并且这些要求正不断增加; (3) 系统作为设备的一部分,其运行一般不需要人工干预; (4) 系统的电源可靠性和安全性,通常是影响设计的重要因素; (5) 处理器的选择是嵌入式系统设计的关键一步(系统的硬件尺寸、电源以及开发费用,如设计费用和开发环境的费用等,与处理器紧密相连)。 嵌入式系统的用途很广,如移动通信设备(手机)、数字相机或摄像机、洗衣机、微波炉、汽车刹车和引擎控制、打印机和复印机、多媒体应用设备、工业仪器和仪表以及医疗器械和设备等。对于各个嵌入式系统其要求也是千变万化的,既要求体积小(如手机)、性能高(如信号处理),又要求安全可靠(如核电站)等。从这里我们可以看到嵌入式系统应用的多样性和特殊性,以及与之对应的市场竞争的激烈性。 考虑到嵌入式系统软硬件结合的时间限制、性能约束及对外交互的特点,实时应用通常是一个特殊过程。它常常是被硬件体系结构、软件体系结构、操作系统特性、应用需求、编程语言及开发和调试环境的变化所驱动的。因此,嵌入式应用与通常说的计算机应用有很大不同。它不但要求满足功能需求,还要求满足性能需求,甚至把性能需求放在第一位。而这种性能的需求体现在限定时间的约束或代码大小的约束上,如一个处理算法能否满足严格的时间约束,是否需要建造特殊的硬件来完成其任务;操作系统是否满足进行高效的中断处理、多任务和通信的需求,编程语言是否支持并发程序设计等问题。总之,嵌入式系统的开发或嵌入式应用的设计与通常意义下的计算机应用开发或计算机软件设计有很大的不同。它不但要考虑软件的设计,同时还要考虑硬件的设计;不但要考虑功能的设计,还要考虑性能的设计。事实上,嵌入式系统开发的最大问题是设计问题,而不是实现问题。 一、 嵌入式系统设计方法 嵌入式系统产生某种动作,以响应外部事件的要求。为了完成这个功能,嵌入式系统在软件的控制下通过硬件来高速地获取数据,并进行处理,而后产生响应动作。整个过程是在严格的时间和可靠性的约束下进行的。由于这些约束相当苛刻,嵌入式系统通常只用于满足单方面的应用。 实时特征是嵌入式系统的主要特征。根据截止时间的要求,可将实时分为硬实时和软实时。硬实时要求的响应时间范围很严格,如响应不及时,将产生严重后果。例如,飞行控制、汽车自动刹车等,就要求必须在规定的时间内及时完成所有的处理。软实时的时间限制稍宽,响应时间晚点也可以接受,不致产生严重后果。例如,通信设备中的数字电话交换机等,只要求能够有效地处理系统负载。 嵌入式系统通常需要处理不同类型的任务:一类是周期性任务,即按照固定时间间隔执行的任务;另一类是非周期性的任务,常常是随机性任务,要求在任务出现的任意时刻都能进行相应的处理。一般对于非周期性任务的处理都有响应要求,这样当新的事件到来时,即使系统正在处理别的任务,也必须及时响应,从而导致了需要同时处理多个互相竞争的请求,包括中断请求。而对于一个连续的输入数据流处理,必须保证其数据不会丢失。除此之外,还要能够响应异步事件,这样,到达序列和数据容量是很难事先预测的。 嵌入式系统与外界有联系,因而有可能造成系统负荷过载。此时,要允许系统性能可以合理降级。由于资源有限,导致有些任务必须等待处理,甚至造成任务丢失。因此,对于不同的任务要根据它们的重要程度和时间约束,来决定其优先处理的次序。原则是保证重要任务。 尽管要求所有软件都必须可靠。但嵌入式系统在可靠性、重启动和故障恢复方面有更为特别的要求,而且通常有用于备份的内置冗余。另外,还要考虑系统的降级使用。 综上所述,实时嵌入式系统的设计相对于通常的计算机应用设计要复杂得多,涉及面也更为广泛,特别是嵌入式系统的物理尺寸朝着小巧、紧凑的方向发展,更增加了设计的复杂性,因此,需要对嵌入式系统的设计技术进行较为全面的研究。 1 硬件/软件协同设计技术 嵌入式系统的设计与当前的硬件所能提供的支持(包括开发手段)及软件技术的发展紧密相连。应用先进的硬件设计和开发技术,不但可以获得所需的性能(如速度、电源、费用、可靠性等),而且还能取代部分软件,完成特定的功能。另外,软件的设计离不开硬件的支持(如处理器、高级缓冲、并行能力等),而且高性能、多功能的硬件允许在软件开发和设计上采用好的方法,应用好的语言,使用好的工具,而不用把精力放在代码的紧凑和效率上,从而提高了软件开发效率,保证了软件质量。反之,应用好的软件设计技术和开发手段,可以充分发挥硬件的作用,提高系统的性能。最后,由于嵌入式应用具有多样性,特别是嵌入式系统是硬件和软件的混合体,这表明了在嵌入式系统的设计中以及在保证系统性能的前提下,要综合考虑硬件和软件的任务分工(包括考虑用硬件代替软件,或用软件置换硬件);要考虑硬件设计(如运用ASIC、FPGA及HDL/VHDL进行固件设计的技术)和软件设计的并行/交替和协同;要考虑硬件和软件的合成。因此,硬件和软件的协同设计在嵌入式系统设计中是一项很重要的技术。 2 实时理论、算法、模型及有关设计概念 嵌入式系统的软件设计与一般的软件设计有很大的不同,它涉及到更多的计算机理论(如并发计算理论、队列理论、调度理论、可靠性理论等)和基于这些理论的算法(如资源访问控制算法、循环调度算法、优先级驱动算法、时钟驱动算法、EDF算法、N\ Version算法等)以及有关的模型技术(工作负荷模型、周期性任务模型、多帧任务模型、处理器共享模型、漏斗模型等)。另外,实时设计在概念上,除了通常的软件设计概念外,有限状态机、并发任务等概念对于实时嵌入式系统的设计相当重要。上述这些是实时嵌入式系统设计的基础,对它们进行全面研究,并掌握它们,能够大大地提高嵌入式系统开发、设计和应用的水平。 3 实时设计表示——模型技术 实时嵌入式应用的多样性是说实时嵌入式应用的不同,所涉及到的问题域也不同,因此采用的设计方法和设计手段也不同。但从设计角度来说,无外乎功能、结构和时间。为了在设计上清楚、无歧义地表示它们,也为了使设计文档化,甚至设计过程自动化,必须采用各种方法表示这些设计,即设计表示和模型。目前,常用的设计表示或模型有:数据流/控制流图、任务结构图、MASCOT图、结构图、结构图表、实体结构图、JSD网络图、对象图、类结构图、状态转移图、状态图、Petri网、离散事件模型、面向对象模型和功能模型等。对于这些设计表示或模型,除了考虑它们的各自特点、应用范围和自身局限性外,还要考虑它们的可用性及混合使用情况。另外,还可根据具体的应用情况,有针对性地选择(如数字信号处理DSP应用采用数据流模型、控制加强器应用采用有限状态机模型、HW模拟采用模拟模型、事件驱动应用采用响应模型等)和设计有关模型。大多数的模型是用图来表示的(一般采用节点、边构造其图),并且有相应的语法、语义,也可进行层次表示,甚至还提供模型设计语言。而用应用模型进行软件设计的关键是:① 对各种模型要有很深入的了解并能够灵活地应用;② 要有基于模型的设计工具(甚至要支持可视化的设计);③ 要提供设计所需要的辅助工具;④ 要能够对设计过程进行管理。总之,应用模型设计技术,要有配套的工具支持。 4 实时设计过程 嵌入式软件开发和设计与通常的软件开发一样,具有生命周期和相应生命周期的各个阶段(概念、需求、概要设计、详细设计、实现、测试及维护),各个阶段可选择相关模型进行设计支持。整个开发和设计过程可沿用瀑布模型、原型模型、螺旋模型及螺旋周期式模型等模式。其一般的设计原则(如抽象、模块化、信息隐藏、完整性、维护性、可重用及可验证等)都适用于它。但嵌入式软件具有自身独有但又相当重要的设计概念,如有限状态机模型、并行和同步、时间约束以及空间约束等。这些设计概念直接或间接地影响着实时嵌入式软件的实时性能。实时嵌入式系统有关性能的满足是设计过程中要自始至终考虑和关注的问题,也需要有相应的工具支持(如性能设计表示或模型表示、性能分析、测试或评估工具等)。 5 实时软件设计方法 软件设计用到设计方法是自20世纪70年代初开始的。首先,是结构化编程方法(自顶向下,逐步求精),然后,是基于数据的结构化方法(面向数据流设计、数据结构化设计),为数据库设计奠定基础的物理数据和逻辑数据分离方法。70年代末,提出了信息隐藏概念和并行系统设计方法。到了80年代,各种软件设计方法逐渐成熟并得到具体应用,如实时结构化分析和设计(RTSAD)方法、实时系统设计途径(DARTS)方法、杰克逊系统开发方法(JSD),以及面向对象设计方法(OOD)。进入90年代后,软件设计方法进一步得到发展,如综合设计方法(综合、集成不同的设计方法)、领域分析和设计方法(基于领域的可重用部件和体系结构)、硬件/软件协同设计方法以及知识库技术、形式化方法等得到了具体应用。另外,实时嵌入式设计中的性能分析越来越迫切,实时性能分析技术也不断完善,这就为设计者从各种设计方案中选择满足性能要求的设计方案提供了便利。支持软件设计的CASE工具和软件开发环境不断推出,特别是启发式设计工具极大地方便了实时嵌入式软件的设计。声明和设计执行工具帮助设计者检验其设计,实时性能分析工具则分析其设计是否满足性能要求。 选择设计方法是以开发者采用的设计策略为基础的,如:基于功能分解设计策略选择RTSAD方法;基于并行任务结构设计策略采用DARTS方法;基于信息隐藏设计策略选择OOD方法。当然,采用何种设计策略,与应用紧密相连,很难为嵌入式系统设计确定通用的设计原则。而且,有些方法尽管很流行或很受欢迎,但它不一定就适用于嵌入式系统,如面向对象方法就不能很好地解决实时设计中所涉及到的中断和上下文切换、多任务和多处理器的并行处理、任务间的通信和同步、数据和通信速率大幅度的变化、时间约束、硬实时性能需求、异步处理以及与操作系统、硬件及其他外部系统元素间的耦合等问题。相应地,必须研究或改进对象模型技术(OMT),使之能够处理实时问题,满足实时开发者的需求,即OMT/Real\ Time或UML\ RT软件开发方法,要求与UML完全向上兼容。其中,UML\ RT(UML for Real\ Time)软件开发方法是由ObjecTime公司和Rational公司共同开发的,它是对UML(Unified Modeling Language)1.1的扩展(即与ROOM\ Real\ Time,Object\ Oriented Modeling Language合并而成)。UML\ RT作为一个完整的实时模型标准,能够辅助或指导软件开发人员设计/开发复杂的、事件驱动的、实时的软件系统。 另外,为了正确地获取用户真正的需求,强调用户的真正参与,Ivar Jacobson提出了使用实例(Use\ Case)驱动的面向对象的软件方法。该方法从组成系统的实际操作入手。首先分析系统是如何使用的,强调系统使用时与各种不同类型的用户交互时的状况——从使用实例出发。得到使用实例模型后,提出一套规范化的方法,寻找类、对象等进行建模、设计等一系列工作,并将它们纳入到软件工程中。实践表明,这是解决用户参与的很好方法。 随着嵌入式应用日益广泛,涉及领域日益增多,由此导致它的应用规模越来越大,复杂程度越来越高。这样,软件设计方法和支持软件设计的工具越来越重要。因为,它们能够减小嵌入式应用的复杂性,提高软件设计能力和效率。因此,对软件设计方法(特别是实时嵌入式软件设计方法)和与之相关的设计支持工具进行研究是很有必要的。 6 构件、重用及组合 人们常提到的模块化软件指的是软件基本上是由模块拼装而成的。模块的显著特征就是它的结构简单、声明和实现分离、数据抽象、信息隐藏、功能封装。能够用以拼装其他软件的模块,我们常称之为构件。构件一般要遵循某个事先定义的接口标准。构件是可以多次使用或重新使用的。通过构件组装软件这种方式,可以大大提高软件的开发效率,保证软件的质量。特别是对于实时嵌入式软件,涉及到大量的与时间相关的算法,如果将它们模块化或构件化,并按照特定的模式/定式和框架在软件开发中重用它们,其意义不言而喻。另外,基于构件进行软件开发,有利于软件开发的自动化。 通过构件重用来开发实时软件,其关键是组合问题。事实上,实时软件系统的组合不能仅仅是功能的组合,而应是功能、时间和容错的组合。组合时离线方法和在线方法都要考虑,并且组合后的结果要经得起检验。这样,组合后的系统满足嵌入式系统的高性能、容错要求,即动态地满足其实时约束,并在系统一级上保证其性能要求,同时还要能够在系统出现问题后系统能够降级使用。实际上,应用组合技术需要其他配套的技术、工具和环境支持,如容错技术、编程方法、分析工具及操作环境等。研究组合技术必须综合考虑,只有这样,才能够达到降低软件开发费用,缩短软件开发周期,提高软件质量的目的。 7 设计定式和框架 前面介绍了实时嵌入式软件开发和设计可能涉及到的理论和算法设计、表示和模型技术以及设计过程、设计方法及构件重用技术等。但对于大多数设计者来说,他们缺乏设计经验,不知怎样并且何时才能最佳地应用这些技术,造成开发软件(特别是开发可重用软件)的困难。为此,人们提出软件设计定式(Patterns)和框架(Frameworks)的概念和方法。所谓定式表示的是解决在特定的上下文里开发软件所产生问题的方法,这些方法可重新使用。它支持软件结构和设计的重用。定式收集各种静态和动态结构以及解决在特定领域里建立应用而产生问题等是成功方法,对于将要重用的小型结构(如构件)归档是很有用的。这些小型结构通常是对象结构的抽象,有经验的开发者用它们解决实时软件中的问题(如死锁、调度、同步和资源分配等)。研究和应用定式,开发者就能够开发比较成熟、可靠的软件。而框架则是可重用的、大致完整的应用,我们能够用它构造相关的应用。是一个集成的用来为一类相关的应用提供一个可重用结构的部件集合。它支持详细设计和代码的重用。 定式和框架两者都是通过收集成功的软件开发策略来推动重用,它们的主要差别是框架的着重点在具体的设计、算法及应用特定编程语言进行实现的重用上,而定式的着重点则是放在抽象设计和软件小型结构的重用上。 很显然,应用设计定式和框架技术,能够改进软件质量,缩短软件开发时间,也有利于软件开发的自动化。特别是实时嵌入式应用,涉及大量的各种各样的问题,而这些问题的解决是非常棘手的。对于新手,有一个漫长的学习和实验过程。如果将这些问题及解决这些问题的算法或模型以设计定式和框架的形式表示,并在其他实时嵌入式软件开发过程中重用它们,将会大大提高软件生产率和软件质量。目前,国外在这方面有很多的成功经验,我们应加以借鉴和研究,如:研究设计定式的描述和框架的结构;研究设计定式的设计和框架的构造;研究它们单独应用方式和综合应用方式;研究基于设计定式和框架的软件开发技术等。 二、 嵌入式应用开发支持研究 嵌入式应用软件典型的开发方式是“宿主机/目标机”方式:首先,利用宿主机上丰富的资源及良好的开发环境开发和仿真调试目标机上的软件。然后,通过串行口或网络将交叉编译生成的目标代码传输并装载到目标机上,并用交叉调试器在监控程序或实时内核/操作系统的支持下进行实时分析和调试。最后,目标机在特定的环境(如分布式环境)下运行。 1 实时编程及最小编程环境 运用软件设计方法进行实时嵌入式软件的设计,应用编程语言完成实时嵌入式软件的实现。前面介绍了实时嵌入式软件的特征,如功能复杂/多样,分离部件的并行控制、与硬件打交道的机制、高可靠性和安全、满足响应时间要求等。所有这些特征最好是编程语言能够有相应的语言特征(如多任务支持)或手段/机制支持其实现,或者能够用操作系统提供的功能或采用低级手段来满足实时嵌入式的特殊要求。 应用高级语言或实时编程语言开发实时嵌入式软件,最基本的要求是要有一个最小编程环境,如交叉编译、交叉调试器、宿主机和目标机间的通信工具、目标代码装载工具、目标机内驻监控程序或实时内核/实时操作系统等。其中交叉编译最为关键。考虑到我国实时嵌入式应用刚刚起步,交叉编译及工具主要以引进为主、改造为辅。而目前国际上的自由软件组织之一——GNU,提供的基于各种平台并公开源码的GCC/G++及Gnat等交叉编译和Gdb交叉调试器正逐步推广且渐渐被人们接受。我们可以在它们的基础上分析并改造成适合我国国情的交叉编译和相应的开发环境。其中要重点考虑编译的优化、运行、系统在裸机/操作系统上的运行(要求能够剪裁和配置等);同时还要考虑提供各种系统接口,提供数据库、图形、网络和分布计算等的联编和有关实时嵌入式应用开发的各种工具包。 2 实时内核和实时操作系统 所谓实时操作系统就是能进行实时处理的操作系统。实时操作系统分为两类:一类是专为实时应用设计的专用操作系统,如:pSOS、VxWorks、VRTX32、RTEMS等,它们的核心是实时内核;另一类是在通用操作系统的基础上增加实时功能,如:实时Linux、实时Unix、实时POSIX等,其扩展部分是实时执行程序(execute)。实时执行程序的使用使得通用操作系统的实时性能变得可行,执行程序在行为上类似于一个应用程序,它负责执行大量的操作系统功能(尤其是那些影响实时性能的功能),它比通用操作系统更快、更有效。 根据内核所具有的功能,实时内核分为如下几类: (1) 毫微内核(有分配功能); (2) 微内核(毫微内核基础上增加了任务调度); (3) 内核(在微内核基础上增加了任务之间的同步); (4) 执行程序(自身具有存储块、I/O服务及其他复杂功能的内核); (5) 操作系统(提供了用户界面、安全/保密、文件管理系统等的执行程序)。 实时内核设计时要考虑轮询、协同、中断驱动及前/后台工作等需求,提供对任务、中断、时间和多处理器等的全面管理,并要求用高级语言实现(可移植性考虑)。设计出的实时内核要求紧凑、高效、专用、可移植性好。 实时内核的多处理器支持应包括处理同构和异构系统的能力,其内核程序应具有自动补偿不同处理器之间体系结构的差别(如字节交换等)。这使得从一个处理器族到另外一个处理器族的转换变得异常容易,且不需要重新设计。 为满足实时软件开发的要求,我们必须自主地研制实时内核。该实时内核符合POSIX实时扩展标准接口(支持系统的开放性和可移植性要求),必须提供高性能环境以保证具有多线程和多任务能力、同族及异族多处理机系统、事件驱动、基于优先级、抢先调度、各种实时调度支持(如单调速率调度)、任务之间的通信和同步、优先级继承、响应中断管理、动态存储分配、高级用户配置和剪裁,甚至支持多平台、多目标机、多语言、网络和分布计算(如对多种通信协议、远程访问、CORBA技术等的支持)等特征的嵌入式应用需要。 另外,要研究通用操作系统实时化技术,如实时Linux以及实时POSIX的实现技术等。 3 实时数据库 前面已经提到,实时系统的正确性不仅仅依赖于产生结果的逻辑特性,而且还依赖于这些结果的时间特性。像许多数据库处理系统一样,实时系统常具有数据库管理功能,而且能够进行数据并行处理的分布式数据库常常是首选。在数据库中,实时意味着除了通常对逻辑要求一致(如数据项值的约束)以外,还有事物处理完成时间的约束及数据访问和更新时间的约束等。例如,用于C3I中的传感数据有效时间间隔很短(如目标跟踪),因此事物对它的访问及处理必须在很短的时间内完成,否则就会丢失数据。这就要求我们能够确定事物处理在最糟糕情况下的执行时间,而这实际上是一件非常复杂的事情,因为事物处理通常涉及到对各种资源(如CPU、I/O、缓冲和数据等)的访问,甚至多个事物之间还存在对资源的竞争从而影响了响应时间。另外,处理或查询的数据量大小对实时响应也有很大的影响。因此,为了保证事物处理在规定的时间内完成并且保持数据库的一致性,调度算法必须同时考虑硬件资源和数据资源的调度。由此可见,研制和开发实时数据库管理系统相对于普通的数据库管理系统所面临的挑战和制约要大的多。 为了满足时间约束和结果可确定的基本需求,不仅要对通常的调度方法和事物管理进行重新设计,而且还要提出在通常数据库系统中没有考虑到或者在实时系统中要增加的新概念,以及对应的新技术。如实时情况下的数据截止时间和事物截止时间、事物调度、多任务处理、并行控制和资源管理、事物处理中断后的备份和恢复、容错服务质量和安全、实时数据库语言(如实时SQL)、实时分布式数据库的事物处理和多媒体处理(如视频会议)的体系结构(要求系统具有开放性)、互操作技术和构件技术(包括功能、时间、容错及安全等方面),以及实时数据库应用等技术。 4 实时分布式中间件 实时嵌入式信息应用系统正连续不断地增长。这些系统共同面临的技术问题是如何实时地访问和处理分布的、面向对象的数据(这些数据由多个用户通过高性能的客户机/服务器网络来共享),且要求不断增强其数据访问和处理功能。随着功能增强的需求加大和用户的增多,实时嵌入式信息系统的复杂程度也迅速增大。并且,这些系统通常是相当关键的,它们承担着重要使命。因此,迅速增长的分布式实时系统需要对各种服务质量QoS(如响应时间、紧急程度及吞吐量等)进行全面的支持,如:C3I系统、电讯、军用/民用航空、internet上多媒体的音/视频流信号和图像等。 提高软件生产率和软件质量的需求激发了人们使用DOC中间件的愿望。DOC中间件位于应用和底层(即复杂的分布式实时嵌入式系统中的操作系统、协议及硬件)之间。它能够使系统设计人员从部件位置、编程语言、OS平台、通信协议和互连以及硬件依赖中解放出来,从而大大地简化了软件的开发。 理论上,中间件简化了实时应用的创建、构造及配置,且不产生时间和空间的消耗。但实际上,目前的技术已阻碍了对实时系统进行有效的、可预见的、且可升级的中间件的开发。尤其是基于COTS的DOC中间件常常缺少: (1) QoS声明和规范的支持; (2) 与高速网络技术集成; (3) 效率、可预见性、可升级和优化。 这些限制了对性能有严格要求的系统的应用速度,如视频会议和电子对抗等。 在分布式环境下,考虑实时应用的特点(响应时间、可靠性、正确性、完整性、并行性和分布式等),提出了支持中间件应用的实时CORBA的各种需求: (1) 功能需求。如:追逐事件能力、全局时钟能力、各种调度方案的支持、基于查询优先级和继承优先级、多线程和客户/服务支持、多通信协议支持、失败通知支持等。 (2) 操作需求。使CORBA的功能具有时间特性,共享存储、垃圾回收,支持对远程对象大数量的并行连接等。 (3) 实现需求。占用内存小,线程安全和再入。 (4) 修改ORB和它的服务需求。动态调用接口、线程抽象层、对部件和服务基于优先级的查询、优先级继承、优先级升级、时间认知、所有功能最坏情况下的执行时间发布、有关协议、对象移动和透明分布等。 (5) 为实时增加新的服务需求。新的实时服务(如调度服务)、定时异常服务(客户/服务两端)等。 (6) IDL扩充需求。限时调用作为IDL的部分内容。 目前的关键问题是要突破对应上述需求的相关技术,研制支持这些需求的开发工具和环境,如:实时IDL的stub和Skeletons、实时对象分配器、ORB的QoS接口、实时I/O子系统、高速网络分配器等。另外,要对用于实时嵌入式系统中的面向对象中间件标准化。 目前,分布式实时系统的开发趋势是:编程采用可重用部件;对整个分布式应用部件采用远程方法调用;在异构环境下尽量定义标准的软件低层基础;在系统中确保QoS的需求。 三、 嵌入式应用的测试技术研究 软件测试在整个软件开发过程中处于相当重要的地位,其测试费用占项目总费用的25%以上,对于嵌入式软件则花费更大。嵌入式应用软件的测试同人们通常使用的传统的软件测试相比有较大的差别,即除了要考虑和运用传统的测试技术外,还要考虑与时间和硬件密切相关的测试技术运用,如多处理器情况下的测试问题。因此,嵌入式应用的日益复杂导致嵌入式软件的设计、开发、测试和维护日趋复杂。因嵌入式应用的复杂性带来的问题和事故也越来越多,如:金融在线事物处理系统瘫痪、电话网络瘫痪和电话系统崩溃、电脑控制机场行李运送系统出现故障、商务飞机坠毁等。从这些事例中我们看到嵌入式应用的重要性和复杂性。为此,我们必须下大力气,研究和掌握嵌入式应用的测试技术,确保嵌入式应用安全、可靠。 1 软件分析和仿真技术 实时嵌入式系统最大的特点是它具有一组动态属性,即中断处理和上下文切换、响应时间、数据传输率和吞吐量、资源分配和优先级处理、任务同步和任务通信等。所有这些性能属性可以很容易地说清楚,但要测试或验证它们(特别是时间确认)是很困难的。如系统的响应时间是否得到满足,系统资源是否足以满足计算需求,有关算法的执行速度是否足够快,甚至分布式环境下的与时间相关的服务质量是否达到要求等。这些是需要进行分析才能知道的。而对实时嵌入式系统进行分析需要建模和仿真,需要数学工具(如McCabe实时分析方法)的支持。状态图、排队和网络模型使得程序分析员能够评价总体响应时间、处理率以及其他时间和大小问题。形式化的分析工具为实时系统提供了仿真机制。 2 软件测试技术 前面提到,嵌入式软件的测试,还须额外考虑时间和硬件的影响和问题。对于硬件,一般是采用专门的测试仪器进行测试;而对于软件,特别是实时嵌入式软件,则需要有关的测试技术和测试工具支持,需要采取特定的测试策略。当然,实时嵌入式应用相当广泛,我们也仅就一些通用性的问题进行泛泛讨论。 测试技术指的是软件测试的专门途径,以及提供能够更加有效地运用这些途径的特定技术。测试技术主要有回归测试、基于代码的测试及功能测试。这些技术可分别用在软件开发过程中的不同阶段,如开发方的内部测试(基于代码的测试或白盒测试)、第三方的验证和确认测试(功能测试或黑盒测试)及维护中的修改和升级测试(回归测试)等。目前,大量的实时嵌入式软件是面向对象编程、基于部件开发的,它们对时空的约束限制及宿主机\ 目标机的交叉开发方式以及可能的分布式运行环境等给运用上述技术带来新的问题和挑战。 测试工具指的是那些能够用以支持和辅助测试的工具。支持工具主要是用来支持测试人员的测试工作,而不是直接用来进行测试。它们通常都是通用工具,须由测试人员根据应用情况对它们进行适当调整。它们是缺陷跟踪工具、配置管理工具、数据库系统(测试数据、测试结果的搜集、存储、查询和管理等),以及其他工具(测试数据生成工具、测试用例生成工具、测试报告生成工具以及测试数据和测试结果分析工具等等)。测试自动化工具专门用以特定测试类型的测试或者帮助特定测试阶段的测试。如覆盖工具、内存分析工具、性能分析工具以及基于GUI客户/服务方式的测试工具(如运用录制/回放技术)等。这些工具在一定条件下可以自动或半自动的方式工作。 测试策略主要是针对软件测试里的诸多问题而言的,即怎样才能很好地处理和解决这些问题。对于测试,首先,要建立一个好且实用的测试文档标准和开发方及测试方的协作关系。然后,明确测试需求和目的及测试过程,制定测试计划。最后,进行的是测试开发、测试实施、测试分析和测试报告。总之,要设计各种查找错误、定位错误的方法和途径,并切实地排除它们。 3 软件调试技术 软件调试在软件测试之后进行,用以定位和排除错误。对于嵌入式应用,无论是测试还是调试,有效的方法仍是借助硬件仿真的手段,辅助软件来进行测试和调试。 运用仿真器进行仿真的目的是模仿微处理器的能力,并进一步提供执行、控制和可观察内部工作情况的能力,保证其操作就像目标机的处理器所做的一样,从而简化软、硬件开发。 仿真器一般是由硬件和软件构成。硬件提供低级的监控、控制和保护功能;软件提供状态和控制功能以及与宿主机的通信。在宿主机上工作的软件提供操作仿真器的用户接口以及能够有效地调试应用软件的功能,这就是常说的调试器。人们通过调试器的用户接口与仿真器的硬件和软件打交道,来控制和监督微处理器的工作,以发现应用软件的错误。 实际上,仿真器既可用来发现软件错误,也可用来查找硬件错误。这就是仿真器和调试器的主要区别。仿真器包含仿真控制的处理器和所有的存储外围设备接口、通信口和在线仿真所需的硬件(如仿真控制电路、随机存储器、跟踪存储器、事件系统、比较器、宿主机通信控制器等)。与仿真器配套使用的有宿主机系统、探头、探头电缆及目标机等。 对于调试器,至少要能够对被测试的软件或固件进行执行控制,显示当前软件或固件当前运行点寄存器和栈的内容、汇编代码及CPU状态。高级的则要提供源级调试功能(如源行执行控制、变量或程序位置通过符号名的形式进行访问,多语言支持和优化支持等)。 结束语 嵌入式应用已从传统的单机、板级及串行通信的形式走向多机、分布计算及网络通信的形式。因此,除了考虑研究上面所讨论的开发支持技术外,还要考虑实时嵌入式系统的改进或升级技术、实时开放技术、实时组合技术及实时软件工程技术等。另外,实时嵌入式系统的性能保证技术、安全技术、容错技术、可靠性的形式化验证技术、质量保证技术及测试认证技术等也是很重要的,也应进行专门的研究。最后要强调,实时嵌入式软件开发相对其他软件开发而言,因性能保证的要求,而涉及到更多的概念和技术。要全面掌握并能够很好地运用它们,离不开学习和培训。因此,搞好实时嵌入式软件开发的教学和培训,也是推动实时嵌入式应用的一个良好举措。MES
来源:单片机与嵌入式系统应用   作者:华东地质学院 周航慈 张福柳  2006/2/12 0:00:00
栏目: [ ]

相关阅读

安森美推出新的高功率图腾柱PFC控制器,满足具挑战的能效标准

动态功耗低至60μA/MHz!助力设备超长续航,首选国民技术低功耗MCU!