《嵌入式系统实例》由会员分享,可在线阅读,更多相关《嵌入式系统实例(14页珍藏版)》请在金锄头文库上搜索。
1、嵌入式系统实例嵌入式系统实例嵌入式系统实例历史第一个被大家认可的现代嵌入式系统是麻省理工学院仪器研究室的查尔斯?斯塔克?德雷珀开发的阿波罗导航计算机。在两次月球飞行中他们在太空驾驶舱和月球登陆舱都是用了这种惯性导航系统。在计划刚开始的时候,阿波罗导航计算机被认为是阿波罗计划风险最大的部分。为了减小尺寸和重量而使用的当时最新的单片集成电路加大了阿波罗计划的风险。第一款大批量生产的嵌入式系统是 1961 年发布的民兵 I 导弹上的D-17 自动导航控制计算机。它是由独立的晶体管逻辑电路建造的,它带有一个作为主内存的硬盘。当民兵 II 导弹在 1966 年开始生产的时候,D-17 由第一次使用大量集
2、成电路的更新计算机所替代。仅仅这个项目就将与非门集成电路模块的价格从每个 1000 美元降到低了每个 3 美元,使集成电路的商用成为可能。民兵导弹的嵌入式计算机有一个重要的设计特性:它能够在项目后期对制导算法重新编程以获得更高的导弹精度,并且能够使用计算机测试导弹,从而减少测试用电缆和接头的重量。这些二十世纪六十年代的早期应用,使嵌入式系统得到长足发展,它的价格开始下降,同时处理能力和功能也获得了巨大的提高。英特尔 4004 是第一款微处理器,它在计算器和其他小型系统中找到了用武之地。但是,它仍然需要外部存储设备和外部支持芯片。1978年,国家工程制造商协会发布了可编程单片机的“标准” ,包括
3、几乎所有以计算机为基础的控制器,如单片机,数控设备,以及基于事件的控制器。随着单片机和微处理器的价格下降,一些消费性产品用使用单片机的数字电路取代如分压计和可变电容这样的昂贵模拟组件成为可能。到了二十世纪八十年代中期,许多以前是外部系统的组件被集成到了处理器芯片中,这种结构的微处理器得到了更广泛的应用。到了八十年代末期,微处理器已经出现在几乎所有的电子设备中。集成化的微处理器使得嵌入式系统的应用扩展到传统计算机无法涉足的领域。对多用途和相对低成本的单片机进行编程,往往可成为各种不同功能的组件。虽然要做到这一点,嵌入式系统比传统的解决方案要复杂,最复杂的是在单片机本身。但是嵌入式系统很少有额外的
4、组件,大部分设计工作是软件部分。而非物质性的软件不管是创建原型还是测试新修改相对于硬件来说,都要容易很多的,并且设计和建造一个新的电路不会修改嵌入式处理器。特性 1.嵌入式系统在广义上说就是计算机系统,它包括除了以通用为目的计算机之外的所有计算机。从便携式音乐播放器到航天飞机的实时控制子系统都能见到嵌入式系统的应用。与通用计算机系统可以满足多种任务不同,嵌入式系统只能完成某些特定目的的任务。但有些也有实时性能的制约因素必须得到满足的原因,如安全性和可用性。除此之外其他功能可能要求较低或没有要求,使系统的硬件得以简化,以降低成本。对于大批量生产的系统来说,降低成本通常是设计的首要考虑。嵌入式系统
5、通常需要简化去除不需要的功能以降低成本,设计师通常选择刚刚满足所需功能的硬件使目标最小化低成本的实现。2.嵌入式系统并非总是独立的设备。许多嵌入式系统是以一个部件存在于一个较大的设备,它为设备提供更多的功能,使设备能完成更广泛的任务。例如,吉布森吉他机器人采用了嵌入式系统来调弦,但总的来说吉布森吉他机器人设计的目的绝不是调弦而是演奏音乐。同样的,车载电脑作为汽车的一个子系统,为它提供了导航,控制,车况反馈等功能。3.部分为嵌入式系统编写的程序被称为固件,他们存储在只读存储器或闪存芯片。他们运行在资源有限的计算机硬件:小内存,没有键盘,甚至没有屏幕。用户界面嵌入式系统用户界面包括了从没有用户界面
6、,专注于单一任务到现在的类似于现代桌面操作系统的复杂图形用户界面的各类界面。简单的嵌入式系统简单的嵌入式设备往往由按钮,发光二极管(LEDs)和仅仅能显示小字符或数字的显示器,以及简单的菜单系统组成。较为复杂的嵌入式系统较为复杂的嵌入式系统拥有的完整的图形屏幕、触摸感应或屏幕边缘按钮在最大限度地使用空间的同时,提供了足够的灵活性:指点控制是很自然的非常理想的操控方式,这样的方式可以改变屏幕的意义。手持系统通常都有一个屏幕和作为定位装置的控制按键。大部分嵌入式系统通过“维护”或者“测试”接口来提供一个菜单,或者由一个 RS-232(串行数据通信的接口标准)接口提供的命令行界面。这样就可以在很少的
7、显示花费的基础上提供大量的控制手段。然而,这也会让大部分消费者无法安装必要的电缆。CPU 平台在嵌入式系统设计中有许多不同的 CPU 架构,如ARM、MIPS、Coldfire/68k、PowerPC、X86、PIC、Intel 8051、Atmel AVR、Renesas H8、SH、V850、FR-V、M32R、DMCU 等。这与桌面计算机市场有所不同,至 2003 年为止在那个领域只有少数几家竞争的架构,其中主要是英特尔/AMDx86 和用于 Apple Macintosh 的 Apple/Motorola/IBM PowerPC。在桌面计算机领域,随着对于 Java 接受程度的增长,软
8、件对于特定运行环境的依赖越来越少。PC/104 标准是小型、小批量嵌入式和 ruggedized 系统设计的基础。这些系统通常使用 DOS、Linux、NetBSD 或者如 QNX、Inferno 这样的实时嵌入式操作系统。大批量生产的嵌入式系统的通常配置是系统单芯片(en:System On Chip) ,它是一个专用集成电路,CPU 是外购的知识产权并且添加到集成电路设计中。一个类似的常用机制是使用可编程门阵列,所有的逻辑包括 CPU 部分都可以编程实现。许多时髦的 FPGA 都是为这个目的设计的。工具同典型的计算机程序员一样,嵌入式系统设计人员也使用编译器、连结器和调试器开发嵌入式系统软
9、件。然而,他们也使用一些大多数程序员不熟悉的工具。软件工具的来源有如下几种:专注于嵌入式系统市场的软件公司从 GNU 软件开发工具移植(参见交叉平台编译)有些情况下,如果嵌入式处理器与普通个人计算机处理器很近似的话也可以使用个人计算机开发工具嵌入式系统设计人员也使用一些不为普通计算机程序员所熟悉的软件工具:一个常用工具是“电路内部仿真器” (ICE,in-circuit emulator)或者是最新设计中的嵌入式调试器。这个调试工具是开发嵌入式程序的基本技巧。它代替微处理器或者嵌入微处理器内部,提供了在系统中快速调用和调试试验代码的便捷工具。一个焊点通常就是一个插入系统的特殊电路,通常使用一台
10、连结到这些焊点的个人计算机作为调试界面。连结器通常是各种各样(exotic) 。对于大多数商业编程来说,连接器几乎总是最后才想起的(afterthough)部分,缺省设置也从来不变。与此相反,嵌入式连结器有完整、复杂的命令行语言是很普通的。经常有不同类型的内存,分别保存特殊的代码和数据。单独的数据结构能够放在特殊的地址,这样软件能够很方便地访问映射到内存的控制寄存器。嵌入式连结器经常有用于减小代码大小和运行时间的外部(exotic)优化工具。例如,他们可能移动子程序的位置以使用较小的调用和跳转指令。它们经常带有管理 data overlays 和 band switch 技术的特性,这些技术是
11、在嵌入式软件经常使用的扩展廉价 CPU 的方法。另外一个常用的工具是一个在程序中添加代码和或者 CRC 的工具程序(经常是自己写的) ,使用这个工具嵌入式系统能够在执行程序之前先进行程序数据检查。为数字信号处理开发软件的嵌入式程序员经常使用 MatchCad 或者Mathematica 这样的数学工具进行数学仿真。一些较少使用的工具有将数据文件转换成代码的工具,使用这种工具就可以在程序中包含任意类型的数据。少数一些项目为了特殊的可靠性或者数字信号处理要求使用同步编程语言。一些编程语言为嵌入式系统编程提供了一些特殊支持。对于 C 语言,ISO/IEC TR 18037:2005 定义了 指定的地
12、址空间指定的存储类基本输入输出的硬件寻址调试调试通常使用内部电路仿真器或者其他一些能够在单片机微码(microcode)内部产生中断的调试器。微码中断让调试器能够在只有 CPU 工作的硬件中进行操作,基于 CPU 的调试器能够从 CPU 的角度来测试和调试计算机的电路。PDP-11 开创了这种特性的先河。开发人员能够仍然使用断点、单步执行以及高级语言进行调试,在许多的调试工具上都有这种能力。另外开发人员在调试实时事件顺序的时候需要记录、使用简单的记录工具。首先遇到这种问题的个人电脑和大型机程序员经常在设计优先级和可行方法的时候感到困惑。指导、代码审查和非个人风格(egoless)的编程是值得推
13、荐的。随着嵌入式系统变得越来越复杂,更高层次的工具和操作系统逐渐移植到可行的设备上。例如,蜂窝电话、个人数字助理和其他的消费用计算机需要一些从个人或者这些电子设备制造商之外的公司购买或者提供的一些重要软件。在这些系统中,需要如 Linux、OSGi或者 Java 这样的开放编程环境,这样第三方软件提供上才能够在大规模的市场上销售软件。大多数这样的开发环境都有一个运行在个人电脑上的参考设计,这种软件的绝大部分都可以在传统的个人电脑上开发。然而,从开放环境移植到专用的电子设备和电子设备的驱动程序开发通常仍然是传统的嵌入式系统软件工程师的工作。在有些情况下, the engineer works f
14、or the integrated circuit manufacturer, but there is still such a person somewhere.操作系统 使用 Windows XP 的因特网收费电话嵌入式系统经常没有操作系统、专用的嵌入式操作系统(经常是实时操作系统)或者指定程序员移植到这些新系统。启动嵌入式系统带有启动代码,通常它禁止中断、设置电子设备参数、测试计算机(RAM、CPU 和软件) ,然后开始应用程序运行。许多嵌入式系统从短暂的掉电状态恢复,经常重起而不进行最近的自检。在十分之一秒内重起是常见的现象。许多设计人员发现 LED 在指示错误状态上非常有用,它们可
15、以帮助进行故障处理。一个常用的机制是在复位的时候点亮电子设备所有的 LED 以表明供电和 LED 正常工作;然后在进行加电自检时由软件改变 LED 的状态;在此之后,软件用这些 LED 指示操作过程中的正常或者故障状态。这可以让技术人员、工程师和用户了解系统的状态。一个有趣的例外是电度表(electric power meters)和其他一些大街上的东西,闪烁的指示灯是为了吸引注意力或者表示损坏状态。内部自检许多嵌入式系统都有一定程度或者一定数量的内部加电自检,自检有几种类型:1.计算机检查:检查 CPU、RAM 和程序存储器。通常一加电就开始这些检查,在一些安全性非常重要的系统中,通常周期性
16、地在安全时间间隔内进行自检,或者经过一段时间就进行自检。2.外围设备检查:仿真输入和读入数据或者测量输出数据。有大量的通信、模拟和控制系统都有这些非常廉价的检查。3.电源检查:通常测试每个供电电路,也可能检查电池或者主电源输入。通常供电部分的负载都很重,并且少有余量,所以这项检查很有意义。4.通信检查:验证从相连单元接收到的简单消息,例如在互联网上使用 ICMP 消息“ping” 。5.电缆检查:将线连结到待检查的电缆上指示针进行检查。如电话这样的同步通信系统经常使用“同步”测试。电缆检查成本很低,当单元部分有插头的时候这项检查尤其重要。6.装备检查:一个系统在安装时经常需要进行调整,这项检查就向安装人员做出状态指示。7.消耗检查:检查系统所消耗的东西、在预量太低时发出警告。最常见的例子是汽车的油量表,最复杂的例子可能是维持化学反应物详细状态的自动医学分析系统。8.运行检查:检查用户关心的系统运行状态。显然,在系统运行时必须进行这项检查,这方面的检查包括飞机上的导航仪器、汽车的速度表和磁盘的指示灯等。9.安全检查:在安全时限内进行检查确保系统仍然可靠。安全时限通常小于能够产生损害的