嵌入式系统

嵌入式系统

区别于可以执行多重任务的通用型计算机,嵌入式系统是为某些特定任务而设计的。有些系统则必须满足实时性要求,以确保安全性和可用性;另一些系统则对性能要求很低甚至不要求性能,以简化硬件、降低成本。

嵌入式系统并不总是独立的设备。许多嵌入式系统由嵌入较大设备的小计算部件组成,提供较通用的功能。例如吉他机器人采用嵌入式系统来调弦,但总的来说它的设计目的绝不是调弦而是演奏音乐;车载电脑作为汽车的一个子系统存在,提供导航、控制、车况反馈等功能。

为嵌入式系统编写的程序称为固件,存储在只读存储器或闪存芯片内,运行在有限的硬件资源上:小容量内存,小键盘或屏幕甚至没有。

用户界面

编辑

嵌入式系统用户界面包括了从没有用户界面而只专注于单一任务、到类似于现代桌面操作系统的复杂图形用户界面的各类界面。

简单的嵌入式设备使用按钮、LED、图形或数字LCD和简单的菜单系统。

较高階的嵌入式系统使用图形显示屏,配合触摸感应或屏边按钮使用,可使占用空间最小并提供灵活性:按钮的含义随屏幕显示的内容而改变,而且指向想要的选项进行操作就能实现选择。手持系统通常采用显示屏加操纵杆按钮作为触控装置。

有些系统通过序列埠(如RS-232、USB、I2C等)或网络连接远程提供用户界面。这种方式的优势在于:扩展了系统的性能、削减了显示屏的成本、简化了BSP,可以在PC上构建丰富的用户界面。例如运行在嵌入式设备平台(如IP摄像机或路由器)上的嵌入式网络服务器,它无需安装定制软件,而是在连到设备的PC端的网络浏览器中显示用户界面。

嵌入式系统的处理器

编辑

嵌入式处理器大概可分为两类。一类是普通微处理器:使用独立的集成电路存储器和外设。另一类是单片机:具有片上外设,降低了功耗、尺寸和成本。嵌入式系统的软件是为某种应用定制的,而不是像个人计算机那样的由终端用户安装的商品,因此可以使用各种不同的基本CPU架构:既有范紐曼型架構也有不同程度的哈佛结构;既有RISC也有非精简指令集处理器;字长从4位到64位甚至更高,当然最典型的仍然是8/16位。多数架构由几家不同的公司生产,使用了大量不同的变量和类型。

嵌入式系统也会使用通用型微处理器,但比单片机需要更多外围电路。

嵌入式主板

编辑

PC/104和PC/104+是小型、小批量嵌入式强固系统的标准之一,大多基于x86架构;通常比标准PC要小,而比多数简单的8/16位嵌入式系统要大;使用MSDOS、Linux、NetBSD,或实时嵌入式操作系统如MicroC/OS-II、QNX、VxWorks。有时这些主板也会使用非x86处理器。

在某些应用中,小巧、高效并非主要关注点,因而可以使用与x86型PC主板兼容的部件。VIA EPIA系列板卡则可以弥补这个空缺,它兼容PC但是高度集成、体积较小,或提供其他对嵌入式工程师很有吸引力的特性。这种方法的好处是低成本商品也可以使用通用的软件开发工具。用这种方法构建的系统仍然是嵌入式系统,因为它嵌入在较大的设备中、用于满足单一用途。例如ATM和电子游戏机,它们都包含了针对各自应用的代码。

多数嵌入式主板都不是围绕PC设计的,也不使用ISA或PCI总线。如果采用SoC处理器,用标准总线连接分立元件就不是上策,此外软硬件开发环境都可能会很不一样。

一种常用的设计模式是采用小型系统模块——也许只有商务卡片大小,容纳高密度的BGA芯片如ARM处理器和外设、用于存储的外部闪存、作为内存的DRAM。模块厂商通常会提供引导软件和操作系统选项,一般包括Linux和一些实时操作系统。这些模块由熟悉专业测试方法的组织大批量生产,配合较小批量的、带特殊应用外设的定制主板使用。

ASIC和FPGA解决方案

编辑

SoC是一种常见的为超大批量嵌入式系统设计的可配置阵列。它在单个芯片内包含了多处理器、乘法器、缓存和接口,形成一个完整的系统;通过专用集成电路或现场可编程门阵列来实现。

外围设备

编辑

嵌入式系统通过外设与外部通信:

序列埠:RS-232、RS-422、RS-485等

同步序列埠:I2C、SPI、ESSI等

USB

多媒体卡:SD卡、CF卡等

网络:以太网、LonWorks等

现场总线:CAN总线、LIN总线、PROFIBUS等

定时器:PLL、捕获比较模块和时间处理单元

分立I/O:GPIO

模拟-數位/數位-模拟转换(ADC/DAC)

调试接口:JTAG、ISP、ICSP、BDM端口、BITP、DP9端口等

工具

编辑

同典型的计算机程序员一样,嵌入式系统设计人员也使用编译器、连结器和调试器开发嵌入式系统软件。然而,他们也使用一些大多数程序员不熟悉的工具。

软件工具的来源有如下几种:

专注于嵌入式系统市场的软件公司

从GNU软件开发工具移植(参见交叉平台编译)

有些情况下,如果嵌入式处理器与普通个人计算机处理器很近似的话也可以使用个人计算机开发工具

嵌入式系统设计人员也使用一些不为普通计算机程序员所熟悉的软件工具:

一个常用工具是“电路内部仿真器”(ICE,in-circuit emulator)或者是最新设计中的嵌入式调试器。这个调试工具是开发嵌入式程序的基本技巧。它代替微处理器或者嵌入微处理器内部,提供了在系统中快速调用和调试试验代码的便捷工具。一个焊点通常就是一个插入系统的特殊电路,通常使用一台连结到这些焊点的个人计算机作为调试界面。

连结器通常是各种各样。对于大多数商业编程来说,连接器几乎是事后才考虑的部分,缺省设置也从来不变。与此相反,嵌入式连结器有完整、复杂的命令行语言是很普通的。经常有不同类型的内存,分别保存特殊的代码和数据。单独的数据结构能够放在特殊的地址,这样软件能够很方便地访问映射到内存的控制寄存器。嵌入式连结器经常有用于减小代码大小和运行时间的外部优化工具。例如,他们可能移动子程序的位置以使用较小的调用和跳转指令。它们经常带有管理数据叠加(英语:data overlays)和band switch(英语:band switch)技术的特性,这些技术是在嵌入式软件经常使用的扩展廉价CPU的方法。

另外一个常用的工具是一个在程序中添加代码和或者CRC的工具程序(经常是自己写的),使用这个工具嵌入式系统能够在执行程序之前先进行程序数据检查。

为数字信号处理开发软件的嵌入式程序员经常使用MathCad或者Mathematica这样的数学工具进行数学仿真。

一些较少使用的工具有将数据文件转换成代码的工具,使用这种工具就可以在程序中包含任意类型的数据。

少数一些项目为了特殊的可靠性或者数字信号处理要求使用同步式编程语言。

一些编程语言为嵌入式系统编程提供了一些特殊支持。

对于C语言,ISO/IEC TR 18037:2005定义了

指定的地址空间

指定的存储类

基本输入输出的硬件寻址

调试

编辑

调试通常使用内部电路仿真器或者其他一些能够在微控制器微码(microcode)内部产生中断的调试器。微码中断让调试器能够在只有CPU工作的硬件中进行操作,基于CPU的调试器能够从CPU的角度来测试和调试计算机的电路。PDP-11开创了这种特性的先河。

开发人员能够仍然使用断点、单步执行以及高级语言进行调试,在许多的调试工具上都有这种能力。另外开发人员在调试实时事件顺序的时候需要记录、使用简单的记录工具。

首先遇到这种问题的个人电脑和大型机程序员经常在设计优先级和可行方法的时候感到困惑。指导、代码审查和非个人风格(egoless(英语:egoless))的编程是值得推荐的。

随着嵌入式系统变得越来越复杂,更高层次的工具和操作系统逐渐移植到可行的设备上。例如,蜂窝电话、个人数字助理和其他的消费用计算机需要一些从个人或者这些电子设备制造商之外的公司购买或者提供的一些重要软件。在这些系统中,需要如Linux、OSGi或者Java这样的开放编程环境,这样第三方软件提供上才能够在大规模的市场上销售软件。

大多数这样的开发环境都有一个运行在个人电脑上的参考设计,这种软件的绝大部分都可以在传统的个人电脑上开发。然而,从开放环境移植到专用的电子设备和电子设备的驱动程序开发通常仍然是传统的嵌入式系统软件工程师的工作。在有些情况下,the engineer works for the integrated circuit manufacturer, but there is still such a person somewhere.

操作系统

编辑

使用Windows XP的因特网收费电话

嵌入式系统经常没有操作系统、专用的嵌入式操作系统(经常是实时操作系统)或者指定程序员移植到这些新系统。

启动

编辑

嵌入式系统带有启动代码,通常它禁止中断、设置电子设备参数、测试计算机(RAM、CPU和软件),然后开始应用程序运行。许多嵌入式系统从短暂的掉电状态恢复,经常重起而不进行最近的自检。在十分之一秒内重啟是常见的现象。

许多设计人员发现LED在指示错误状态上非常有用,它们可以帮助进行故障处理。一个常用的机制是在复位的时候点亮电子设备所有的LED以表明供电和LED正常工作;然后在进行加电自检时由软件改变LED的状态;在此之后,软件用这些LED指示操作过程中的正常或者故障状态。这可以让技术人员、工程师和用户了解系统的状态。一个有趣的例外是电度表(electric power meters)和其他一些大街上的东西,闪烁的指示灯是为了吸引注意力或者表示损坏状态。

内部自检

编辑

许多嵌入式系统都有一定程度或者一定数量的内部加电自检,自检有几种类型:

计算机检查:检查CPU、RAM和程序存储器。通常一加电就开始这些检查,在一些安全性非常重要的系统中,通常周期性地在安全时间间隔内进行自检,或者经过一段时间就进行自检。

外围设备检查:仿真输入和读入数据或者测量输出数据。有大量的通信、模拟和控制系统都有这些非常廉价的检查。

电源检查:通常测试每个供电电路,也可能检查电池或者主电源输入。通常供电部分的负载都很重,并且少有余量,所以这项检查很有意义。

通信检查:验证从相连单元接收到的简单消息,例如在互联网上使用ICMP消息“ping”。

电缆检查:将线连结到待检查的电缆上指示针进行检查。如电话这样的同步通信系统经常使用“同步”测试。电缆检查成本很低,当单元部分有插头的时候这项检查尤其重要。

装备检查:一个系统在安装时经常需要进行调整,这项检查就向安装人员做出状态指示。

消耗检查:检查系统所消耗的东西、在预量太低时发出警告。最常见的例子是汽车的油量表,最复杂的例子可能是维持化学反应物详细状态的自动医学分析系统。

运行检查:检查用户关心的系统运行状态。显然,在系统运行时必须进行这项检查,这方面的检查包括飞机上的导航仪器、汽车的速度表和磁盘的指示灯等。

安全检查:在'安全时限'内进行检查确保系统仍然可靠。安全时限通常小于能够产生损害的最小时间。

可靠性体系

编辑

根据人们需求的不同,可靠性也有不同的定义,有意思的是,可靠性的类型却相对较少,相似可靠性类型的系统,使用相似类型的内在检查和恢复方法:

系统非常不安全或者无法修理。这包括太空系统、水下电缆、导航灯塔、钻孔系统,非常奇怪的是还包括汽车和大规模生产产品。总的来说,嵌入式系统检测各个子系统、在线切换到冗余部分或者工作在“limp模式”提供部分的功能。大规模生产的消费产品如汽车、个人电脑或者打印机也属于这个类别,这是因为与购买的费用相比维修费用高昂、维修人员又路途遥远。

系统不能安全地停止运行。这包括飞机导航、反应控制系统、重要的化学工厂安全控制、铁路信号、单发动机飞机的发动机,如上所述,但是“limp模式”较难容忍,通常需要操作员选择备份系统。

系统停机时将会造成大量的金钱损失。这些包括电话交换机、工厂控制、桥梁和电梯控制、资金转移、市场开发、自动销售和服务等,这些系统通常有一些运转/不运转测试,它们通常带有在线冗余或者使用替换系统和人工过程的limp模式。

系统不安全的时候不能操作。同上面的情况类似,系统的运行将会造成大量的金钱损失。医疗设备、带有发动机这样的热备份的飞行器、化学工厂控制、自动股票交易、游戏系统等。测试可能是五花八门,但是出错时能够做的就是停止整个系统。

相关推荐

365bet正网平台 天猫超市买东西多久送到?

天猫超市买东西多久送到?

bus365 【惠普打印机】正品惠普(hp)打印机价格

【惠普打印机】正品惠普(hp)打印机价格

365注册后怎么注销 杼的解释

杼的解释