特性
嵌入式系统在最广的意义上说就是计算机系统,它包括除了专门用于通用目的之外的所有计算机。從便攜式的音樂播放器到航天飞机的实时控制子系统都能见到嵌入式系统的应用。
多数商业嵌入式系统都是为了低成本完成任务而设计的。其中绝大多数都有实时系统约束的要求,但并不是所有的嵌入式系统都有这些要求。对于其中一些过程来说它们要很快地完成,而其它一些功能可能并没有严格的时间要求。这些系统通过与特定目的的硬件和根据系统要求配置的软件组合在一起满足实时要求。
很难根据速度或者成本描述嵌入式系统的特点,但是对于大批量生产的系统来说,降低成本通常是设计的首要考虑。嵌入式系经常有很低的性能要求,这样系统硬件就可以简化以降低成本。工程师最小化的实现通常选择刚刚满足所需功能的硬件。
例如,一个卫星电视的数字机顶盒每秒需要处理数十兆连续数据,但是这些数据的绝大部分处理过程是由分析、导引和解码多路数字视频的定制的集成电路完成的。嵌入式CPU“建立”这些处理过程并且显示为机顶盒显示图形菜单等外观。随着嵌入式处理器速度越来越快、价钱越来越低,它们就可以从事更多的高速数据处理。
对于小批量的嵌入式系统来说,经常使用个人计算机通过限制运行的程序或者将操作系统更换为实时操作系统来实现。在这种情况下,用于特殊目的的硬件可以替换成一个或多个高性能的CPU。然而,有些嵌入式系统可能仍然需要高性能的CPU、特殊的硬件和大量的内存以完成所需任务。
对于大批量的嵌入式系统来说,如手持音乐播放器或者蜂窝电话,降低成本是需要主要考虑的问题。这些系统通常有少数几个集成电路、控制所有其它功能的高度集成的CPU和一片内存。在这些系统的设计中每个元件的选择和设计都要有利于降低总体成本。
许多嵌入式系统的软件,尤其是那些没有磁盘驱动器的嵌入式系统的软件也被称为固件。固件是嵌入到硬件设备中的软件,如固化到一个或多个ROM或者闪存IC芯片中。
嵌入式系统上的程序经常运行在有限的硬件资源上:经常没有磁盘、操作系统、键盘和屏幕。软件也可能没有如文件系统这样的部分,即使有文件系统的话通常也是使用日志(:en:journaling)文件系统的闪存驱动器(:en:flash drive)取代旋转的媒体。如果有用户界面的话,那么它就可能是一个小型按键或者液晶显示。
机器中的嵌入式系统通常需要能够经年不断地正确运行,所以它们的软件的开发和测试都要比个人计算机上的软件更为仔细。许多嵌入式系统避免使用可动的部件如磁盘驱动器、开关和按钮等,因为可动部件的可靠性要比如闪存这样的固态部件的可靠性差。
另外,嵌入式系统可能在人无法到达的地方运行,如下到油井钻孔中、发射到外层空间等等,这样嵌入式系统即使在发生灾难性的数据破坏情况下也必须能够自行重新启动。这通常是通过一个名为看门狗定时器的标准电子部件实现的,除非软件周期性地复位这个定时器否则它就会复位计算机。
嵌入式系统设计
通常使用微处理器或者微控制器构建嵌入式系统。一些大型的系统或者早期的系统使用通用大型计算机或者小型计算机构建。
![]()
用户界面
嵌入式系统的用户界面类型非常繁多,所以值得进行特殊说明。
PARC、苹果计算机公司、波音公司和惠普公司的界面设计人员发现界面应该遵循减少用户动作类型这样一个原则。在嵌入式系统中这样一个原则经常与降低成本的要求结合在一起。
在嵌入式系统中广泛采用的一个标准界面是使用两个按钮控制一个选单系统,其中一个按钮允许用户滚动选单条目,另外一个用来选择条目。
选单系统广受欢迎是因为它们本身就说明了自身内容,并且能够通过简单的用户操作选择。
另外一个基本的技巧是减少并简化输出的类型。有些设计在每个接口插头或者错误条件使用状态灯指示哪一部分发生故障。一种廉价的做法是使用两个发光条,另外带有一个打印出来的故障代码表格。用户可以将他所用语言表示的状态贴在标签上。例如,许多小型打印机使用亮灯表示状态,这些状态标示在打印成所需语言的不干胶标签上。在一些市场上,他们可能使用几种这些标签,这样用户就可以选择最适合他们的语言。
另外一个通用的技巧是界面模式要在用户的角度上看起来非常清楚。如果一个界面有不同的模式,它们通常应该可以用明显的方式的方式切换回去或者它们能够自动切换回去。
例如,波音公司的标准的测试界面就是一个按钮和一些亮灯。当按下按钮时,所有的灯就会变亮;当松开按钮时,出现故障的指示灯就不会熄灭。它们的标签都是用基础英语表示的。
设计人员会用不同的颜色表示状态。红色表示“危险”或者一些错误发生导致整个系统故障;黄色表示一些部分可能有故障;绿色表示状态正常或良好。这就类似于街头的红绿灯,大多数人都知道它们的含义。
一些设计保证在用户操作之后马上显示状态的变化。如果机器要做什么动作,通常在7秒内开始并且汇报工作过程。
如果一项设计需要屏幕,设计人员经常选择纯文本方式。优先选用这种方式是因为用户已经有多年识别标记的经验。图形用户接口看起来很漂亮也能完成所有的功能,但是通常它们会增加一年的设计、批准和翻译延期、增加项目一到两个程序员的费用,而这些工作并没有多少实际意义。经常一个过于聪明的图形用户接口因为可能使用用户不熟悉的符号,所以实际上可能会让他们感到困惑。
如果设计需要指示如复印机那样的机器零部件,在实际的机器上它们通常使用数字进行编号,这些编号能在机器外观上看到。
网络界面就是一个远程的屏幕,同其它的用户界面类似。
最成功的屏幕界面之一就是两个选单按钮和一行用户所说语言的文字。它用在寻呼机、中档打印机、网络交换机和其它一些需要用户复杂操作的中档价位的场合。
如果使用的是较大的屏幕,触摸屏和屏幕旁的按钮也可以减少用户操作的类型并且容易控制选单选择。这种系统的优点就是按钮的含义可以随着屏幕而变化,并且选择的过程非常类似于人们自然选择东西的方式。
当使用文字的时候,设计人员就要选择一种或者多种语言。缺省语言通常是目标用户最为常用的语言。许多设计人员使用目标客户群的本地语言以更好地满足他们的需要。
文本通常是由专业人员进行翻译,即使开发人员也说那种语言也是这样。市场销售人员能够告诉国外的销售商说这些翻译都是非常专业的。一个国外的制造商有可能要求最大的销售商审查、更正这些本地语言的翻译以促进产品被本地销售人员接受。
许多权威人士认为可用性测试比任何数量的观点都重要,设计人员推荐可用性要尽早进行测试。一个常用的快速、dirty测试方法是让秘书使用工程师使用奇怪的标志拖动、控制的纸板模型。录制的录像带显示这样做不仅很幽默也很有教育意义,In the tapes, every time the engineer talks, the interface has failed because it would cause a service call.
在许多组织里,用户界面要有一个人要批准,通常这个人是客户、主要的销售商或者直接负责系统销售的人。
平台
在嵌入式系统设计中有许多不同的CPU架构,如ARM、MIPS、Coldfire/68k、PowerPC、X86、PIC、8051、Atmel AVR、Renesas H8、SH、V850、FR-V、M32R等。
这与桌面计算机市场有所不同,写这篇文章的2003年为止在那个领域只有少数几家竞争的架构,其中主要是英特尔/AMDx86和用于Apple Macintosh的Apple/Motorola/IBM PowerPC。在桌面计算机领域,随着对于Java接受程度的增长,软件对于特定运行环境的依赖越来越少。
PC/104标准是小型、小批量嵌入式和ruggedized系统设计的基础。这些系统通常使用DOS、Linux、NetBSD或者如QNX、Inferno这样的实时嵌入式操作系统。
大批量生产的嵌入式系统的通常配置是system on a chip,它是一个专用集成电路,CPU是外购的知识产权并且添加到集成电路设计中。一个类似的常用机制是使用可编程门阵列,所有的逻辑包括CPU部分都可以编程实现。许多时髦的FPGA都是为这个目的设计的。
![]()
工具
同典型的计算机程序员一样,嵌入式系统设计人员也使用编译器、连结器和调试器开发嵌入式系统软件。然而,他们也使用一些大多数程序员不熟悉的工具。
软件工具的来源有如下几种:
嵌入式系统设计人员也使用一些不为普通计算机程序员所熟悉的软件工具:
- 一个常用工具是“电路内部仿真器”(ICE,in-circuit emulator)或者是最新设计中的嵌入式调试器。这个调试工具是开发嵌入式程序的基本技巧。它代替微处理器或者嵌入微处理器内部,提供了在系统中快速调用和调试试验代码的便捷工具。一个焊点通常就是一个插入系统的特殊电路,通常使用一台连结到这些焊点的个人计算机作为调试界面。
- 连结器通常是各种各样(:en:exotic)。对于大多数商业编程来说,连接器几乎总是最后才想起的(:en:afterthough)部分,缺省设置也从来不变。与此相反,嵌入式连结器有完整、复杂的命令行语言是很普通的。经常有不同类型的内存,分别保存特殊的代码和数据。单独的数据结构能够放在特殊的地址,这样软件能够很方便地访问映射到内存的控制寄存器。嵌入式连结器经常有用于减小代码大小和运行时间的外部(:en:exotic)优化工具。例如,他们可能移动子程序的位置以使用较小的调用和跳转指令。它们经常带有管理data overlays和band switch技术的特性,这些技术是在嵌入式软件经常使用的扩展廉价CPU的方法。
- 另外一个常用的工具是一个在程序中添加代码和或者CRC的工具程序(经常是自己写的),使用这个工具嵌入式系统能够在执行程序之前先进行程序数据检查。
- 为数字信号处理开发软件的嵌入式程序员经常使用MatchCad或者Mathematica这样的数学工具进行数学仿真。
- 一些较少使用的工具有将数据文件转换成代码的工具,使用这种工具就可以在程序中包含任意类型的数据。
- 少数一些项目为了特殊的可靠性或者数字型号处理要求使用同步编程语言(:en:Synchronous programming language)。
一些编程语言为嵌入式系统编程提供了一些特殊支持。
- 对于[C programming language|C]],ISO/IEC TR 18037:2005定义了
- 指定的地址空间
- 指定的存储类
- 基本输入输出的硬件寻址



选择表情