嵌入式系统误区探究

时间:2022-09-03 08:21:30

嵌入式系统误区探究

随着国内企业的产业升级、国内嵌入式系统的开发也同步发展起来。但国内相关的培训、教育并没有跟上嵌入式应用的大发展,由此也产生了很多嵌入式开发方面的误解。下面将逐步做一探讨。

嵌入式的特点就是以体现系统特性为目的,这一点与桌面应用有很大不同。

大多数嵌入式应用都较简单,目标单一。对于多任务分时操作系统来说,软件的执行对时间并不严格。实时操作系统的主要任务是对事件进行实时处理,虽然事件的到达时刻无法预知,但必须在事件发生时能在严格时限内做出响应(即系统响应时间),即使是在尖峰负荷下,否则超时就意味着失败。操作系统通常忙于自己的“分内工作”,比如内存分配、进程调度,但一旦接到实时性指令就要响应实时任务。这就存在实时响应与任务完成两个概念。系统在响应任务请求后把处理器资源交给实时任务,然后就是实时任务自身工作了。

系统实时性应用示例方面

嵌入式系统通常提到的实时概念,在实际应用中,主要是汽车驾驶或飞机飞行控制之类,它们对性能稳定可靠、任务响应及时的要求高。

而这种应用越简单,对可靠性、稳定性要求越高,就不可能完全依靠复杂的操作系统来实现。即使处理速度足够快,系统进行相当复杂的操作,稳定性也会很难保证。以汽车安全气囊为例,是传感器直接连接专用的处理器。我们必须跳出PC的架构思想去构造嵌入式应用,所有的技术是服务于设计的。

通常会碰到这种应用场景:一个分时复用的多任务操作系统系统正在显示图标、处理事务,但临时有一个实时响应进程抢占系统资源,其他进程全被阻塞。如果系统的设计允许这样也罢,但很多资料或文章却忽略了对系统其它进程的影响。

对一个复杂分时多任务系统来说,某一任务的实时响应会影响系统的整体性能,甚至是严重影响。如果实时任务和数据存储、处理、显示都很重要,那就要保证系统设计要有足够冗余处理能力,整体功能也要靠系统设计来实现。

嵌入式实时系统改进方面

嵌入式实时系统改进方面存在的误区,比较常见的是通过调整定时器精度来细化系统调度时钟精度,增加内核可抢占性、改进调度器来提高实时性能。

系统内核中,大量活动是由时间驱动的,系统定时器精度直接决定时间驱动事件调度的精确性。在复杂的分时多任务系统中,这一参数会直接影响实时精度,一味调高定时器精度会导致系统性能严重下降,而且很容易引起系统运行的颠簸。

市场上的实时系统通常都是可抢占式内核,最高优先级的任务一旦就绪,总能得到CPU控制权而不必等当前任务交出CPU控制权。

这就产生了一个误区:内核的可抢占绝不是任何时间都可抢占,这要看内核中抢占点的设置及在可抢占内核中抢占锁是否被置为可抢占。可参看图1。

图1 内核仅在黄色部分可抢占,其他部分是不可抢占的

经常有人想对调度器进行修改,希望通过这种方法来进一步改进某些指标,但往往会忽略系统均衡。如果对系统要求比较高,完全可以通过系统化的方法来满足应用的需要,而把改造调度算法作为项目之余的实验。

嵌入式操作系统尺寸方面

嵌入式系统要求系统越小越好,但任何指标都要满足系统整体设计要求。如果仅仅通过系统最小尺寸去考虑应用,很可能导致系统无法工作或者要增加很多其他相关的支持库才能正常使用。

理论上,系统能够把自身引导起来,并能给应用分配系统资源,管理输入输出就可以算作最小系统。但上层应用需要操作系统来管理复杂的图形显示、有良好的图形界面和各种协议支持能力。随着嵌入式CPU处理能力的增强,大容量存储介质价格的下降,对应用支持程度的关注早就超越了对系统尺寸的关注。所以抛开功能去讨论系统尺寸是没有意义的。

嵌入式整体系统设计方面

嵌入式操作系统是否适用于你的项目,如何应用。这取决于你对系统应用的要求。

嵌入式实时操作系统与实时嵌入式系统不是一个概念,不会由于你采用了一个实时嵌入式操作系统,你的系统就是实时嵌入式系统。也就是说,采用实时嵌入式操作系统只是给你提供了系统设计的基础,除此之外还要考虑中断响应时间、上下文切换时间、带不同数据量的上下文切换时间及应用的时序逻辑要求,再把相应的指标分解到你的应用设计中,还要考虑系统的冗余,对各种异常的处理、要严格防止优先级逆转的情况发生,这样才能做出符合要求的嵌入式系统设计。

应用的整体指标是依靠仔细的整体设计,绝不可能仅是通过简单地把一个应用提高优先级,然后在嵌入式实时操作系统上运行来达到要求。

优先级逆转方面

优先级逆转就是优先级高的任务由于低优先级任务保持了竞争资源被迫等待,或高优先级任务意外被低优先级任务中断,而阻止了高优先级任务的运行。

优先级逆转将导致高优先级进程的抢占延迟增大,较低优先级任务执行时间的不确定性导致了高优先级进程抢占延迟的不确定性,因此为了保证系统应用时序逻辑正确性,必须消除优先级逆转现象。

通常所说的spinlock(自旋锁)被mutex(互斥锁)抢占资源,然后导致优先级逆转,这其实需要很特殊的环境,因此通常不必考虑。Spinlock是应用在smp环境中,也就是为了保证数据的唯一性、准确性,用来锁总线的。但在单处理器情况下spinlock的结构(以linux为例)是spinlock-t,是一个空结构。

通常实际项目中,严重影响系统响应时序逻辑的问题都是由于应用系统没有开发好,整体设计有问题,越界访问,缓冲区溢出,其他设备异常抛出的出错信息没有处理,而导致系统必须调用异常处理程序,这种程序的优先级较高,从而中断正在响应的任务,甚至会崩溃。

大多数嵌入式系统开发者重点应考虑应用程序,对于实时嵌入式操作系统要依靠相应评测来分析,而不应纠缠在一些看似复杂概念上。如果认为程序能够运行在系统最高优先级,能随时抢占内核却完全忽略最终任务的要求与综合性能,反倒很可能达不到系统的设计目的。

链接

“国内嵌入式系统迅猛发展,而国内相关的人才教育、培训却没跟上这种发展趋势,由此产生了很多嵌入式开发方面的误解,这对整个嵌入式软件产业的发展是十分不利的。”多年从事嵌入式系统开发研究的专家(中科红旗)张津诗如是说。

上一篇:企业竞争情报系统架构设计 下一篇:三大模型架起数据仓库大厦