嵌入式系统(Embedded System),是一种嵌入机械或电气系统内部、具有专一功能和实时计算性能的计算机系统。嵌入式系统常被用于高效控制许多常见设备,被嵌入的系统通常是包含数字硬件和机械部件的完整设备,例如汽车的防锁死刹车系统。相反,通用计算机如个人电脑则设计灵活,可以智能处理各式各样的运算情况,以满足广大终端用户不同的需要。
现代嵌入式系统通常是基于微控制器(如含集成内存和/或外设接口的中央处理单元)的,但在较复杂的系统中普通微处理器(使用外部存储芯片和外设接口电路)也很常见。通用型处理器、专门进行某类计算的处理器、为手持应用订制设计的处理器等,都可能应用到嵌入式系统。常见的专用处理器有数字信号处理器。
由于嵌入式系统专用于特定的任务,设计工程师可以对其进行优化,以减小产品的尺寸和成本,并提高可靠性和性能。一些嵌入式系统是批量生产的,受益于规模经济。
嵌入式系统应用于从数字手表和MP3播放器等便携式设备,到交通灯、工厂控制器等大型固定设备,以及混合动力汽车、磁共振成像和航空电子设备等复杂系统。其复杂性范围广泛,从低复杂性的单个微控制器芯片到高复杂性的安装在大型机箱或机箱内的多个单元、外围设备和网络。
阿波罗导航计算机是最早被认可的现代嵌入式系统之一,由麻省理工学院仪器实验室的查尔斯·斯塔克·德雷珀1965年开发完成。在项目开始时,阿波罗制导计算机被认为是阿波罗项目中风险最大的项目,因为它采用了当时新开发的单片集成电路来减小尺寸和重量。一个早期大规模生产的嵌入式系统是1961年发布的Autonetics D-17,这个系统用于Minuteman发射的制导计算机。当Minuteman二号于1966年投入生产时,D17被一台首次运用大规模集成电路的新的计算机取代。
自从20世纪60年代这些早期应用以来,嵌入式系统的价格已经下降,处理能力和功能也有了显著的提高。例如,早期的微处理器英特尔4004(1971年发布)是为计算器和其他小型系统设计的,但仍然需要外部存储器和支持芯片。1978年,国家工程制造商协会发布了可编程微控制器的“标准”,包括几乎所有基于计算机的控制器,如单片机、数字控制器和基于事件的控制器。
随着微处理器和微控制器成本的下降,用微处理器读出的上/下按钮或旋钮取代电位计和可变电容等基于旋钮的昂贵模拟元件变得可行,甚至在消费品中也是如此。到20世纪80年代初,存储器、输入和输出系统组件已经集成到与构成微控制器的处理器相同的芯片中。微控制器发现通用计算机价格太高的应用。
可以对相对低成本的微控制器进行编程,以实现与大量独立组件相同的作用。尽管在这种情况下,嵌入式系统通常比传统的解决方案更复杂,但大多数复杂性都包含在微控制器本身中。可能只需要很少的额外组件,而且大部分设计工作都是在软件中完成的。与不使用嵌入式处理器的新电路的设计和构建相比,软件原型和测试可以更快。
嵌入式系统普遍存在于消费者、工业、汽车、医疗、商业和军事应用中。
电信系统在网络电话交换机到终端用户的手机之中采用许多嵌入式系统。计算机网络使用专用路由器和网桥来路由数据。
消费电子产品包括MP3播放器、手机、视频游戏机、数码相机、全球定位系统接收器和打印机。家用电器使用嵌入式系统,如微波炉、洗衣机和洗碗机,可以提供灵活性、效率和功能。先进的暖通空调系统使用网络恒温器来更精确和有效地控制温度,温度可以随时间和季节而变化。家庭自动化使用有线和无线网络,可用于控制灯光、气候、安全、音频、视频、监控等。所有这些都使用嵌入式设备进行传感和控制。
从飞机到汽车的运输系统,越来越多领域开始使用嵌入式系统。新型飞机内部包含先进的航空电子设备,如安全性要求很高的垂直导航系统和全球定位系统接收器。各种电动机——无刷DC电动机、感应电动机和DC电动机——使用电动/电子电动机控制器。越来越多的汽车、电动汽车和混合动力汽车使用嵌入式系统来最大限度地提高效率、减少污染。其他汽车安全系统包括防抱死制动系统(ABS)、电子稳定控制(ESC/ESP)、牵引力控制(TCS)和自动四轮驱动。
医疗设备使用嵌入式系统进行生命体征监测,使用电子听诊器放大声音,并使用各种医学成像(正电子发射断层扫描、断层扫描、计算机断层扫描和核磁共振成像)进行非侵入性内部检查。医疗设备中的嵌入式系统通常由工业计算机提供动力。[1]
嵌入式系统用于运输、消防安全、安全和安保、医疗应用和生命关键系统,因为这些系统可以与黑客隔离,因此更加可靠,除非通过片上3G蜂窝或其他物联网监控方法连接到有线或无线网络。为了消防安全,这些系统可以被设计成具有更强耐热性并能持续运行。在处理安全性问题时,嵌入式系统可以自给自足,并且能够处理中断的电气和通信系统。
一种称为微尘的新型微型无线设备是网络化无线传感器。无线传感器网络(WSN)利用先进的集成电路设计使小型化实现成为可能,它将完整的无线子系统耦合到复杂的传感器,使人们和公司能够测量物理世界中的无数事物,并通过信息技术监控系统对这些信息采取行动。这些微尘是完全独立的,在电池需要更换或充电之前,通常会消耗电池数年。
嵌入式无线模块提供了一种简单的无线方式,支持任何通过串口通信的设备。
嵌入式系统旨在完成一些特定的任务,而不是作为一台通用计算机来完成多项任务。出于安全性和可用性等原因,有些还必须满足实时性能限制;其他嵌入式系统可能有低性能要求或没有性能要求,从而简化系统硬件以降低成本。
嵌入式系统不全是独立的设备。许多嵌入式系统由用于一般用途的更大设备中的小部件组成。例如,吉布森机器人吉他有一个嵌入式系统来调节琴弦,但是机器人吉他的总体目的当然是演奏音乐。[2] 类似地,汽车中的嵌入式系统作为汽车本身的一个子系统来提供特定的功能。
为嵌入式系统编写的程序指令称为固件,存储在只读存储器或闪存芯片中。它们在有限的计算机硬件资源下运行:内存小,键盘或屏幕小或不存在。
嵌入式系统的范围涵盖了从完全没有用户界面(在仅用于一项任务的系统中)到类似现代计算机桌面操作系统的复杂图形用户界面的系统。简单的嵌入式设备使用按钮、发光二极管、图形或字符液晶显示器(例如HD44780液晶显示器)和简单的菜单系统。
更复杂的设备在具有灵活性的同时最小化了使用的空间,这些设备带有屏幕边缘按钮或支持触摸感应的图形屏幕:按钮的含义可以随着屏幕而改变,选择涉及指向所需内容的自然行为。手持系统通常有一个带有“操纵杆按钮”作指向设备的屏幕。
有些系统借助串行接口(如RS232、USB、I2C等)或网络(例如以太网)连接为用户远程提供界面。这种方法有几个优点:扩展了嵌入式系统的功能,避免了显示器的成本,简化了平衡计分卡,并允许在个人电脑上建立丰富的用户界面。一个很好的例子是运行在嵌入式设备(如网络摄像机)或网络路由器上的嵌入式网络服务器的组合。用户界面显示在连接到设备的电脑上的网络浏览器中,因此不需要安装软件。
与通用计算机相比,典型的嵌入式计算机具有功耗低、体积小、运行范围宽、单位成本低等特点。这是以有限的处理资源为代价的,这使得它们很难编程和交互。然而,通过在硬件上构建智能机制,利用可能存在的传感器和嵌入式单元网络的存在,可以优化管理单元和网络级别的可用资源,并提供远远超出可用资源的增强功能。[3]例如,可以设计智能技术来管理嵌入式系统的功耗。[4]
嵌入式处理器可以分为两大类。普通微处理器(μP)使用独立的集成电路作为存储器和外设。微控制器(μC)具有片上外设,从而降低功耗、尺寸和成本。与个人计算机市场相反,普通微处理器使用了许多不同的基本中央处理器体系结构,因为软件是为应用程序定制的,不是给用户安装的商品。冯·诺依曼和不同程度的哈佛结构都在普通微处理器中被使用。普通微处理器中具备精简指令集处理器和非精简指令集处理器。字长从4位到64位甚至更长,尽管最典型的仍然是8/16位。大多数架构都有许多不同的变体和形态,其中许多也是由几家不同的公司制造的。
成千上万的微控制器为嵌入式系统开发使用。通用微处理器也用于嵌入式系统,但通常比微控制器需要更多的支持电路。
现成的计算机板
PC/104和PC/104+是面向小型、低容量嵌入式和加固系统(主要基于x86)的现成计算机主板的标准示例。虽然与标准电脑相比,它们通常体积较小,但与大多数简单的(8/16位)嵌入式系统相比,仍然相当大。他们经常使用DOS、Linux、NetBSD或嵌入式实时操作系统,如MicroC/OS-II、QNX或VxWorks。有时这些主板使用非x86处理器。
在某些应用中,小尺寸或电源效率不是主要考虑因素,所使用的组件可能与通用x86个人计算机中使用的组件兼容。如VIA EPIA系列的主板通过与pc兼容但高度集成、物理尺寸更小或其他吸引嵌入式工程师的特性来弥补与其他主板的差距。这种方法的优点是,低成本的商品组件可以与用于一般软件开发的相同软件开发工具一起使用。以这种方式构建的系统仍然被认为是嵌入式的,因为它们被集成到更大的设备中并完成单一的角色。可以采用这种方法的设备有自动取款机和街机,它们包含针对应用程序的代码。
然而,大多数现成的嵌入式系统板不是以计算机为中心的,也不使用ISA或PCI总线。当涉及片上系统处理器时,使用连接离散组件的标准化总线可能没有什么好处,并且硬件和软件工具的环境可能有很大不同。
一种常见的设计风格是使用一个小型系统模块,大概有名片那么大,可以容纳高密度的集成电路芯片,例如基于ARM的片上系统处理器和外围设备、用于存储的外部闪存和用于运行时存储器的动态随机存取存储器。模块供应商通常会提供引导软件,并确保有多种操作系统可供选择,通常包括Linux和一些实时选择。这些模块可以由熟悉其专门问题测试的组织大量制造,并与产量更低的具有特定应用外设的定制主板相结合。
嵌入式系统的实现已经十分发达,因此可以很容易地用基于全球公认平台的已有主板来实现。这些平台包括但不限于Arduino和Raspberry Pi。
专用集成电路和现场可编程门阵列解决方案
超大容量嵌入式系统的常见阵列是片上系统(SoC),它包含由单个芯片上的多个处理器、乘法器、高速缓存和接口组成的完整系统。片上系统可以被实现为专用集成电路(ASIC)或使用现场可编程门阵列(FPGA)。
嵌入式系统通过外设与外界交互,例如:
串行通信接口(SCI): RS-232、RS-422、RS-485等
同步串行通信接口:I2C、SPI、SSC和ESSI(增强型同步串行接口)
通用串行总线
多媒体卡(SD卡、闪存卡等)
网络:以太网、伦敦工厂等
现场总线:CAN总线、LIN总线、PROFIBUS等
定时器:锁相环、捕获/比较和时间处理单元
离散输入输出:又称通用输入输出(GPIO)
模数转换/数模转换
调试:JTAG、ISP、BDM端口、BITP和DB9端口。
与其他软件一样,嵌入式系统设计者使用编译器、汇编器和调试器来开发嵌入式系统软件。但是,他们也可以使用一些更具体的工具:
软件工具可以来自几个来源:
随着嵌入式系统复杂性的增加,更高级别的工具和操作系统正在向有意义的机器迁移。例如,手机、个人数字助理和其他消费类计算机所需的一些重要软件,这些软件需要由电子产品制造商以外的人购买或提供。在这些系统中,需要一个开放的编程环境,如Linux、NetBSD、OSGi或嵌入式Java,以便第三方软件提供商能够向市场广泛销售。
嵌入式系统普遍存在于消费者、烹饪、工业、汽车、医疗应用中。嵌入式系统的一些例子有MP3播放器、移动电话、视频游戏机、数码相机、DVD播放器和全球定位系统。家用电器如微波炉、洗衣机和洗碗机都含有嵌入式系统,以提供灵活性和效率。
嵌入式调试可以在不同的级别执行,具体执行级别取决于可用的工具。表现不同形式嵌入式调试的不同指标有:它是否减缓了主应用程序的速度,被调试的系统或应用程序与实际系统或应用程序有多接近,可以为调试设置的触发器有多大的表达能力(例如,当达到特定程序计数器值时检查内存),以及在调试过程中可以检查什么(例如,只有内存,或者内存和寄存器等)。
从最简单到最复杂,它们可以大致分为以下几个方面:
除非受限于外部调试,否则程序员通常可以通过工具加载和运行软件,查看处理器中运行的代码,并开始或停止其操作。代码的视图可以是HLL源代码、汇编代码或两者的混合。
因为嵌入式系统通常由多种元素组成,所以调试策略可能会有所不同。例如,调试以软件(和微处理器)为中心的嵌入式系统与调试由外围设备(数字信号处理器、现场可编程门阵列和协处理器)执行大部分处理的嵌入式系统不同。如今,越来越多的嵌入式系统使用不止一个处理器内核。多核开发的一个常见问题是软件执行的适当同步。在这种情况下,嵌入式系统设计者可能希望检查处理器内核之间总线上的数据流量,这一过程需要在信号/总线级别利用逻辑分析器等进行非常低级别的调试。
实时操作系统(RTOS)通常支持操作系统事件的跟踪。主机工具基于系统行为记录呈现图形视图。跟踪记录可以通过软件、RTOS或特殊的跟踪硬件来执行。RTOS跟踪让开发人员了解软件系统的时间和性能问题,并对高级系统行为有很好的理解。像RTXC Quadros或IAR系统这样的商业工具是存在的。
嵌入式系统通常驻留在机器中,这些机器预计会连续运行数年而不出现错误,在某些情况下,如果发生错误,它们会自行恢复。因此,软件的开发和测试通常比个人电脑更仔细,并且避免了机械中不可靠的运动部件,如磁盘驱动器、开关或按钮。
具体的可靠性问题可能包括:
用于错误恢复的技术多种多样,有时也结合使用,错误中既有软件错误(如内存泄漏),也有硬件中的软错误:
对于便携式音乐播放器或移动电话等大容量系统,最大限度地降低成本通常是首要的设计考虑因素。工程师通常选择“足够好”的硬件来实现必要的功能。
对于小容量或原型嵌入式系统,通用计算机可以通过限制程序或将操作系统替换为实时操作系统来进行调整。
常用的软件体系结构有几种不同的类型。
在这种设计中,软件只是有一个循环。循环调用子程序,每个子程序管理硬件或软件的一部分。因此,它被称为简单的控制回路或控制回路。
一些嵌入式系统主要由中断控制。这意味着系统执行的任务由不同类型的事件触发;例如,中断可以由预先设定频率的定时器产生,或者由接收字节的串行端口控制器产生。
如果事件处理程序需要低延迟且简短,则使用这种系统。通常,这类系统在主循环中也运行一个简单的任务,但是这个任务对意外的延迟不是很敏感。
有时中断处理程序会将更长的任务添加到队列结构中。稍后,中断处理程序完成后,这些任务由主循环执行。这种方法使系统接近具有离散进程的多任务内核。
一个非重发多任务系统与简单的控制循环方案非常相似,除了循环被隐藏在一个应用编程接口中。[10] 程序员定义了一系列任务,每个任务都有自己的“运行”环境。当任务空闲时,它调用一个空闲例程,通常被称为“暂停”、“等待”、“产出”、“无操作”等。
协同多任务处理的优点和缺点与控制回路相似,只通过简单地写一个新任务或添加到队列中,这使添加新软件更容易。
在这种类型的系统中,低级代码根据定时器(连接到中断)在任务或线程之间切换。这是系统通常被认为具有“操作系统”内核的级别。根据需要多少功能,它或多或少从概念上引入了流水线中管理多任务运行的复杂性。
由于任何代码都有可能潜在地损坏另一个任务的数据(使用MMU的大型系统除外),因此必须仔细设计和测试程序,并且对共享数据的访问必须由某种同步策略控制,例如消息队列、信号量或非阻塞同步方案。
由于这些复杂性,组织通常使用实时操作系统(RTOS),允许应用程序程序员专注于设备功能而不是操作系统服务,至少对于大型系统而言是如此;由于内存大小、性能或电池寿命的限制,较小的系统通常无法负担与通用实时系统相关的开销。然而,需要RTOS这一选择带来了它本身的问题,因为开始应用程序开发之前必须做好选择。这种开发时序迫使开发人员根据当前需求为他们的设备选择嵌入式操作系统,从而很大程度上限制了未来的选择。[10] 随着产品寿命的缩短,未来选择的限制变得越来越成为一个问题。此外,由于需要设备管理各种变量,如串行、通用串行总线、传输控制协议/网际协议、蓝牙、无线局域网、中继无线电、多通道、数据和语音、增强图形、多状态、多线程、众多等待状态等,复杂性水平不断提高。除了实时操作系统之外,这些趋势还导致嵌入式中间件的出现。
微内核是实时操作系统逻辑上的升级。通常的安排是操作系统内核分配内存并将中央处理器切换到不同的执行线程。用户模式进程实现主要功能,如文件系统、网络接口等。
一般来说,当任务切换和任务间通信快速的情况下,微内核的设计是成功的,当任务切换和任务间通信缓慢时,微内核的设计是不利的。
外核通过一般的子程序调用进行高效地通信。系统中的硬件和所有软件可供应用程序员使用并可由他们扩展。
在这种情况下,具有复杂功能的相对较大的内核适合嵌入式环境。这给程序员提供了一个类似于桌面操作系统(如Linux或Microsoft Windows)的环境,因此对开发非常有效;不利的一面是,它需要更多的硬件资源,通常更昂贵,并且由于这些内核的复杂性,可能不太可预测且不太可靠。
嵌入式单片内核的常见例子是嵌入式Linux和Windows CE。
尽管硬件成本增加,但这种嵌入式系统越来越受欢迎,尤其是在更强大的嵌入式设备上,如无线路由器和全球定位系统。以下是一些原因:
除了核心操作系统之外,许多嵌入式系统还有额外的上层软件组件。这些组件由网络协议栈组成,如局域网、网络传输协议/网际协议、文件传输协议、HTTP协议、和HTTPS协议,还包括存储功能,如内存管理系统和闪存管理系统。如果嵌入式设备具有音频和视频功能,那么系统中将会提供适当的驱动程序和编解码器。在单片内核的情况下,包含了许多这样的软件层。在RTOS类别中,附加软件组件的可用性取决于商业产品。
在汽车行业,AUTOSAR是嵌入式软件的标准架构。
^Embedded Systems Dell OEM Solutions | Dell. Content.dell.com (2011-01-04). Retrieved on 2013-02-06..
^Embedded.com – Under the Hood: Robot Guitar embeds autotuning By David Carey, TechOnline EE Times (04/22/08, 11:10:00 AM EDT)Embedded Systems Design – Embedded.com.
^C.Alippi: Intelligence for Embedded Systems. Springer, 2014, 283pp, ISBN 978-3-319-05278-6..
^S. Mittal, "A survey of techniques for improving energy efficiency in embedded computing systems", IJCAET, 6(4), 440–459, 2014..
^Tancreti, Matthew; Hossain, Mohammad Sajjad; Bagchi, Saurabh; Raghunathan, Vijay (2011). "Aveksha: A Hardware-software Approach for Non-intrusive Tracing and Profiling of Wireless Embedded Systems". Proceedings of the 9th ACM Conference on Embedded Networked Sensor Systems. SenSys '11. New York, NY, USA: ACM: 288–301. doi:10.1145/2070942.2070972. ISBN 9781450307185..
^"Tektronix Shakes Up Prototyping, Embedded Instrumentation Boosts Boards to Emulator Status". Electronic Engineering Journal. 2012-10-30. Retrieved 2012-10-30..
^Tancreti, Matthew; Sundaram, Vinaitheerthan; Bagchi, Saurabh; Eugster, Patrick (2015). "TARDIS: Software-only System-level Record and Replay in Wireless Sensor Networks". Proceedings of the 14th International Conference on Information Processing in Sensor Networks. IPSN '15. New York, NY, USA: ACM: 286–297. doi:10.1145/2737095.2737096. ISBN 9781450334754..
^Heiser, Gernot (December 2007). "Your System is secure? Prove it!" (PDF). ;login:. 2 (6): 35–8..
^Moratelli, C; Johann, S; Neves, M; Hessel, F (2016). "Embedded virtualization for the design of secure IoT applications". 2016 International Symposium on Rapid System Prototyping (RSP). Retrieved 2 February 2018..
^Michael Barr. "Embedded Systems Glossary". Neutrino Technical Library. Retrieved 2007-04-21..
暂无