儿童玩耍的智能视频游戏和商店里的巧克力自动售卖机都需要用到嵌入式系统,年轻人看电影的智能卡也需要嵌入式系统;家庭主妇所使用的许多兼容Internet的智能化家庭用品(如微波炉、视听系统等)都需要嵌入式系统;驾驶员需要嵌入式系统实现汽车的自动巡航控制。各个单位和机构需要嵌入式系统用于网络系统和产品。嵌入式系统的应用不胜枚举。 有3本著作不仅对我产生了巨大的影响,并且还加强了我对嵌入式系统的深入理解,引发了我对基于微处理器和微控制器的嵌入式系统的浓厚兴趣。首先是由J.B.Peatman编写,McGraw-Hill出版公司在1998年出版的Design with Microcontrollers and Microcomputers。其次是由Kenneth Hintz和Daniel Tabak编写,McGraw-Hill出版公司在1992年出版的Microcontrollers Architecture, Implementation and Programming: HD44795, MC68HC11, MCS-51, 80960CA。第三本是由Daniel Tabak编写,McGraw-Hill出版公司在1995年出版的Advanced Microprocessors。 过去,嵌入式系统是采用微处理器(如8085)设计的。其应用比较简单,例如温度监控系统、使用ADC和DAC的数据采集系统、使用适当接口的音乐系统以及使用步进电动机接口的简单机器人系统。现在,这些系统有时候甚至不被视为嵌入式系统。 从20世纪80年代初开始,小型嵌入式系统使用通用仪器公司(General Instruments Corporation)生产的微控制器,使用该公司70年代末的微控制器PIC 16xxx、Motorola微控制器68HC05/08以及8031系列的Intel微控制器。应用广泛的小型嵌入式系统还包括遥控电视、手表、洗衣机、烤箱、计算器、数字日记和视频游戏。80年代末,Intel 8051/52、Motorola 68HC11/12、Intel 80196和80960系列微控制器的出现,使嵌入式系统硬件的使用更加多元化。 在最近几年,出现了将低级和高级处理硬件单元和专用处理器嵌入到一个芯片中的技术,从而出现了多处理器系统的嵌入式系统、单芯片VLSI(称为片上系统),这些系统具有智能化功能,且高度复杂。一个简单的示例就是智能卡,以及最近出现的典型复杂系统示例—— 嵌入式系统智能照相机,该系统由Princeton大学嵌入式系统小组开发,并由Wayne Wolf和他的团队于2002年9月在IEEE Computer Society出版的IEEE Micro上发布。 根据时间和理解的不同,嵌入式系统的定义也不同。嵌入式系统被定义为:将嵌入了软件的计算机硬件作为其重要组成部分的系统。嵌入式系统是专用于各类实际应用或者产品且基于计算机的一种系统。它解决了系统中各种任务响应时间受限的问题。嵌入式系统可以是独立的系统,也可以是较大系统的一部分。它的软件通常嵌入在ROM(只读存储器)中。因此,它不像计算机一样需要辅助存储器。 本书兼顾了工科研究生、初级读者和对嵌入式系统感兴趣的读者的需要,他们今天是处于萌芽期的嵌入式系统工程师,明天就有可能成为这些系统的主设计师。此外,本书也适用于对嵌入式软件和实时编程项目感兴趣的年轻软件工程师。本书旨在解释设计高性能、响应时间受限制的复杂嵌入式系统所需要的概念,可作为高等院校师生的教材,或者工程师的参考书。 希望本书的读者首先学习嵌入式系统体系结构、在系统开发过程中要使用的基本硬件和软件元素、编程模型和软件工程实践,然后学习将代码嵌入到系统中的软件技术。还希望读者能够设计出充分利用系统资源(处理器、存储器、端口、设备和电能)的系统。本书的写作宗旨也正在于此。 本书主要介绍设计嵌入式系统的新技术和工具。我们将帮助读者很容易地理解这方面的内容。其次,学生必须在他们选择的领域里开发出有用的项目。例如:网络、通信、汽车电子、数据采集和存储、服务、处理及保护信息、智能机器人、实时控制和跟踪系统、生物医学系统,以及声音、图像和视频的实时处理、过滤、压缩和加密系统。 全书各章内容如下: 第1章 本章将详细介绍嵌入式系统的基础内容。嵌入式系统硬件包括处理器、存储器设备、I/O设备和基本硬件单元—— 电源、时钟和复位电路、访问外设的I/O端口和其他片上和片外单元。物理设备有UART、调制解调器、收发器、时钟计数器、小键盘、键盘、LED显示单元、LCD显示单元、DAC和ADC以及脉冲拨号电路等。本章将介绍这些硬件单元、嵌入式软件、最新的嵌入式系统和RTOS,还将提供一些应用示例。 第2章 本章将通过处理器和存储器的组织结构介绍嵌入式系统体系结构。读者将学习嵌入式系统中提供处理功能的处理器结构单元,还将学习到存储器设备。第2章中还将介绍一种给定嵌入式系统处理器和存储器的选择方法,并解释将存储器块和段分配给数据结构所依赖的基础知识、存储器映射概念和DMA概念,以及存储器、设备、IO设备和处理器如何进行接口。 第3章 本章将描述各种设备(并口和串口设备、时钟设备、同步、等时同步和异步通信设备)以及连接这些设备的重要总线,还将描述设备端口的复杂接口特性。本章还将描述I2C、CAN、USB、高级串行高速总线、ISA、PCI、PCIX、高级并行高速总线。 第4章 本章将集中讨论设备驱动程序。它们是嵌入式系统中重要的服务例程。此外还将阐述设备驱动程序和网络函数。设备驱动程序是结合示例描述的。对中断服务和处理器机制的理解是嵌入式系统设计者应该具有的基本知识。第4章将集中讨论这些问题,详细描述中断延迟和最终期限的概念。这个概念对于嵌入式系统的实时编程很有用。 第5章 本章将描述用嵌入式C/C++/Java语言进行嵌入式系统编程的编程概念和源代码管理工具,并全面说明嵌入式系统中指针和数据结构的使用。还将介绍的重要概念有:循环中多函数调用的使用;函数指针、函数队列的使用;中断服务例程(还有设备驱动程序)的排队;数据结构;队列、堆栈和链表。第5章还将介绍使用C++和Java语言的面向对象编程概念。在嵌入式系统中,存储器优化是很重要的。那么如何进行优化呢?本章将解答所有这些问题。 第6章 本章将阐述单处理器和多处理器系统软件开发过程中的程序建模概念,还将说明数据流和控制数据流图的使用;实时编程过程中的程序模型和FSM及Petri网的使用。本章还将回答一些重要的问题:如何对微处理器建模,以及如何调度和同步处理器指令的执行。 第7章 本章将介绍嵌入式系统开发过程中的软件工程实践和方法,描述线性序列模型、RAD(快速应用开发)模型和其他重要模型,包括基于组件的(面向对象的)软件开发过程模型。本章还将介绍软件需求分析、设计、实现、测试、调试和验证策略,并讲述一种重要的设计语言——UML语言。 第8章 本章将介绍实时编程最重要的内容:进程间通信。首先将介绍进程、任务和线程的概念,其次将描述信号量的使用。本章还将详细介绍信号、互斥、消息队列、邮箱、管道、虚拟(逻辑)插槽和远程调用的概念。 第9章 本章将阐述RTOS的概念,首先介绍OS结构和内核功能,然后介绍进程、存储器、设备、文件和IP子系统管理功能,最后介绍RTOS对多任务的调度管理。在此基础上,进一步解释周期、循环、抢占式、时间片以及其他调度模型如何实时调度多任务,同时还将描述RTOS IEEE标准。本章重点介绍对多进程间同步的15点策略。 第10章 本章将结合示例,详细介绍两种最重要的RTOS工具—— mC/OS-II和VxWorks。 第11章 本章将描述关于RTOS编程的4个案例研究,分别是巧克力自动售卖机系统、TCP/IP网络系统、汽车中的自适应巡航控制系统和智能卡。 第12章 本章将描述硬件和软件设计以及集成方法和工具。第12章将解释嵌入式系统开发过程行为计划,还将描述目标系统、仿真器、ICE的使用;用于将最终代码下载到ROM中的设备编程器的使用;代码生成工具(汇编器、编译器、加载器和链接器)、模拟器、原型开发工具和IDE的使用。此外,还将介绍硬件测试工具。 附录 为了指导课程设计人员和教师,附录给出了这些课程中建议使用的单元。 本书还给出了上百种参考书、网站和期刊杂志。这些将帮助读者对嵌入式系统相关主题进行进一步的研究。 本书7个最突出的特点是: (1) 结构合理、内容系统、主题安排逻辑性强。 (2) 对嵌入式系统编程概念、OS、RTOS函数和进程间同步进行了详细介绍。 (3) 特别提到了在单芯片或者多芯片系统的软件开发过程中程序的建模,以及软件工程实践的使用。 (4) 详细介绍了端口、设备、用于设备互连的总线和设备驱动程序。 (5) 在消费类电子、通信和汽车电子以及安全事务片上系统中RTOS编程的创新案例研究。 (6) 同时介绍了两种RTOS—— mC/OS-II和VxWorks,主要集中在RTOS函数应用方面。 (7) 表达明晰,突出强调示例,并具有良好设计的图片和表格、关键字及其定义,每章最后还包括了问题回顾和实践。 本书尽可能地给出正确的信息和示例代码以及工具。然而,错误在所难免。敬请广大读者批评指正。 欢迎教师、学者、软件工程师和系统工程师提出宝贵意见,以进一步提高本书的质量。请将建议和问题发往我的电子信箱,邮件地址为professor@rajkamal.org,也可以访问网站 RAJ KAMAL