基于实时操作系统的嵌入式系统软件设计
摘 要:本文概述了嵌入式系统的核心,实时操作第及其特点,分析了在利用实时操作系统进行嵌入式系统设计时,经常要面对几个方面的问题。并提出了基于实时操作系统的嵌入式软件架构和组件的设计方法。该设计方法将嵌入式软件划分成不同的层级。使用这样的分层结构可以使整个软件系统更好地被管理,有效缩减了软件的开发周期和开发成本。
关键词:实时操作系统;嵌入式系统设计;
一、引言
嵌入式系统通常是指操作系统和功能软件集成于计算机硬件系统之中,简单地说就是系统的应用软件与系统的硬件一体化。具有软件代码少,高度自动化,响应速度快等特点。特别适合于要求实时和多任务的系统。由此可以看出嵌入式系统的特性,是利用有限的资源来完成一系列预先定义或特定的功能。随着竞争的日渐激烈,决定了对开发工具的需求是嵌入式市场的一个重要的方面。嵌入式系统开发工具的重要环节是实时操作系统, 还包括支持它们编程的工具:源代码调试器,集成开发环境和编译器。任一个实时操作系统不可能为每个应用都提供优化的解决方案,这就是现在的实时操作系统如此之多的原因所在。
二、实时操作系统(RTOS)
实时操作系统(RTOS)是嵌入式应用软件的基础和开发平台。RTOS是一段嵌入在目标代码中的软件,用户的其它应用程序都建立在RTOS之上。RTOS使各个任务,实际上也就是能进行特定操作的一段代码, 来“准同时”地运行。这意味着看上去各个任务似乎是在同时运行,同时做很多特定的工作。不但如此,RTOS还是一个可靠性和可信性很高的实时内核,将CPU时间、中断、I/O、定时器等资源都包装起来,留给用户一个标准的API,并根据各个任务的优先级,合理地在不同任务之间分配CPU时间。
“实时”用在操作系统中首要任务是调度一切可利用的资源完成实时控制任务,其次才着眼于提高计算机系统的使用效率。简单说就是嵌入式系统能够响应外部事件的同时,也能完成等待其他任务或进程的操作,重要特点是满足时限的要求。通常又分为“硬实时”和“软实时”。硬实时是指在特定时间内完成一个事件,通常有十几个微秒到几毫秒,例如视频数据流的处理,或是自动引擎上脉冲的处理;软实时应用于那些不要求硬实时的场合,当超过了截止时限也不会破坏系统的完整性,但对系统会产生不利的影响。例如,当POS机不能读出代码时,可能是刷卡太快,系统产生错误,可以再次查询识别。
三、通用实时操作系统
嵌入式系统开发是什么据实时杂志统计,有200多种RTOS可供选择。可以把它们分成三大类:
1.非商用的RTOS,主要适用于小型嵌入式系统。但是,这种操作系统支持的微处理器较少,并且提供的支持也很少。
2.实时扩展的NT。它的基本原理与众不同,是在一个平台上运行两个操作系统。
3.商用RTOS,被分成两类: 小型嵌入式应用系统和大型复杂的实时应用系统。
据嵌入式系统杂志最新报导,世界各国有40多家公司推出各种各样可供嵌入式应用的RTOS。其中几个著名的操作系统有: UCOS最适合于单片机上开发的操作系统;windowsCE即可用于硬实时又可用于软实时;VRTX老牌实时操作系统;VxWork曾用于美国火星探测上;pSOS是世界上最早的实时操作系统之一;QNX是X86上最好的实时操作系统;RTlinux能够提供实时的Linux操作系统等等。而且至今仍有不少的开发者使用自己开发的OS。我国也自主研制开发了嵌入式实时操作系统Hopen (女娲)等。
四、嵌入式系统设计中的问题
嵌入式系统的开发受到系统响应时间、大小,性能,开销等等因素的制约,要优化或充分利用这些限制因素,就使得设计嵌入式系统是一项比较困难的任务。只有充分考虑到这些,才能使设计过程更加高效。下面总结一下设计中遇到的主要问题:
1.事件限制
RTOS是专门为受时间限制的任务而设计的,例如有一些程序必须严格的每隔一段固定时间执行,而其他一些程序则不要求严格的时间安排。嵌入式编程者的重要任务是给那些要执行的每一个事件加以标记,这样它就知道了如何给那些事件安排优先级和资源,使得能够满足整个系统的性能目标。为了辅助这个任务,在嵌入式系统中需要中断事件的执行,这样有益于执行下列任务:
时间紧急任务程序: 是那些每隔一段固定时间就要发生,允许带有最小时延的任务。时间敏感任务程序: 不同于时间紧急任务,它允许稍多进延。与时间紧急任务程序一样,它们可能发生在固定时间或在任意时间内被初始化,但是保证一定执行。闲置任务程序: 是很重要的背景操作,可以方便地在随机时间间隔内执行任务。于线任务程序: 执行非实时功能,并调用时间敏感和闲置任务服务程序。
2.安全性
当硬件的可靠性有了很大程序的提高,并且嵌入式系统的任务也很紧急时,设计者通常会使用处理器测试和内存测试来提高系统安全性。可能嵌入式编程者学到的第一个简单的安全技术,就是利用中断结构填充未使用的编程内存。这种技术可以禁止程序跑飞,并且提供初级的安全保证。另一种通常的保护措施是使用缓冲器,可以阻止堆栈溢出和任务堆栈崩溃。许多商用RTOS现在含有的功能能够支持堆栈检查。为了证实存储在ROM中的程序和数据的完整性,应该包括一个简单的ROM测试,就像一个看门狗定时器用来防止软件进入死循环一样。
3.设备驱动程序
编写高效的设备驱劝程序既要有软件又要有硬件的知识。设备驱动程序往往被重复地调用,使得它是嵌入式系统性能的重要因素: 并且它利用响应时间、内存和其它系统资源来支配实时性能。嵌入式系统中10%的代码是设备驱动程序,为了能使编程更有效,对更复杂的系统编写设备驱动程序需要更多的开发时间,设备驱动程序应该充分利用微控制器的能力。
4.中断服务程序
使用中断服务程序很有效,通常要比用软件循环不断地查询外围设备要合理得多。然而,中断处理策略不是由编译器支配的,大部分的RISC处理器对中断响应很少。这些限制给嵌入式开发商带来了很大的压力。如何选择中断结构,有一些方法节省了内存堆栈的中断内容,而有一些则保存这些中断的内容在高速缓存器中、片上寄存器或是片外存储器。为简化调试, 最好保证中断服务程序短一些。
5.存储分配
存储分配是考虑选择RTOS或嵌入式系统设计时一个很重要的特性。设计动态的存储分配是很浪费的,原因有二: 第一,从堆栈中分配内存即慢又不确定。第二,内存分配的故障可能是同于分段的堆栈引起的。典型的解决办法就是将所有目标挂起,并除掉动态分配。
6.最优化性能
编写运行有效的代码带来了一整套的规则。为了优化速度和大小而不违背设计目标,建议使用三种技术: 第一,在大多数嵌入式交叉平台编译器中使用优化选项(例如,减少冗余码,
用方程代替操作,展开环,优化寄存器的使用)。第二,定点和浮点混合操作。第三,利用大部分可利用的资源优化用户。
7.调试内存的问题
因为许多RTOS和嵌入式微处理器不支持内存保护,追踪软件内存故障就变成了严重的调试问题。在处理这些问题上,最好按照被影响的内存类型分类问题。通常,分成三类:全部内存故障:那些故障导致全部内存数据区的崩溃。堆栈内存故障: 这些故障完全导致程序运行失败,而当这些故障作为外部事件的函数时,则很难追踪。动态分配内存故障: 存储器服务分配堆栈内存,用到了分配过的内存块或是使用了不再分配的内存块而引起的问题。
以上是在嵌入式系统设计过程中,为了合理地调度多任务、利用系统资源,选择RTOS开发平台时一定要考虑的问题,这样有助于系统设计的合理性和完善性。
五、总结
作为一个嵌入式开发者,面临的不仅仅是决定使用什么样的RTOS和其它开发工具: 而且必须要学会处理象资源有限、硬件设备驱动、中断队列、内存分配等等一些嵌入式开发中的
事项。这样才能保证程序执行的实时性、可靠性,并减少开发时间,保障软件质量。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论