第1章 嵌入式系统简介
在信息化社会中,计算机和网络已经全面渗透到我们生活的每一个角落。对于每个人,我们需要的已经不再仅仅是那种放在桌上处理文档,进行工作管理和生产控制的计算机——“机器”;各种各样的新型嵌入式系统设备在应用数量上已经远远超过通用计算机,任何一个人都可能拥有从小到大的各种使用嵌入式技术的电子产品,小到MP3、PDA等微型数字化产品,大到网络家电、智能家电、车载电子设备等装置,而在工业和服务领域中,使用嵌入式技术的数控机床、智能工具、工业机器人、各种类型的服务机器人等也将逐渐改变传统的工业和服务方式。目前嵌入式系统技术已经成为最热门的应用技术之一,嵌入式系统已经渗透到我们日常生活的方方面面。本章作为本书的开篇,主要介绍嵌入式系统的基本概念和嵌入式系统的开发学习方法。
1.1 嵌入式系统
1.1.1 系统
系统是一种根据固定的计划、程序或者规则进行工作、组织或者执行一项或多项任务的方式。系统也是一种工作安排方法,其所有单元能够按照一定的计划或者程序装配在一起,共同完成工作任务。
1.1.2 嵌入式系统
许多书籍都给出过嵌入式系统的定义,但是对于何为嵌入式系统,什么样的技术又可以称为嵌入式技术,仍在讨论之中。以下给出一些文献中对于嵌入式系统的定义:
《Computers as Components——Principles of Embedded Computing System Design》一书中指出:什么是嵌入式计算系统?如果不严格地定义,它是任何一个包含可编程计算机的设备,但是它本身却不是一个通用计算机。
《Embedded Microcontrollers》一书作者认为:嵌入式系统是一种电子系统,它包含微处理器或者微控制器,但是我们不认为它们是计算机——计算机隐藏或者嵌入在系统中。
英国电机工程师协会定义:嵌入式系统是控制、监视或辅助某个设备、机器甚至工厂运行的设备。它具备4个特征:①用来执行特定的功能;②以微型计算机与外围设备构成核心;③具有严格的时序与稳定度;④全自动操作循环工作。
还可以用以下文字总结嵌入式系统的概念:嵌入式系统一般指非PC系统,有计算机功能但又不称为计算机的设备,它以应用为中心,软硬件可裁减,适应应用系统对功能、可靠性、成本、体积、功耗等综合性严格要求的专用计算机系统。简单地说,嵌入式系统集系统的应用软件和硬件于一体,类似于PC中BIOS的工作方式,具有软件代码小、高度自动化、响应速度快等特点,特别适合于要求实时和多任务的体系。嵌入式系统主要由嵌入式处理器、相关支撑硬件、嵌入式操作系统及应用软件系统等组成,它是可独立工作的“机器”或“器件”。
嵌入式系统的基本架构如图1.1所示。
图1.1 嵌入式系统的基本架构
1.1.3 嵌入式系统的分类
按照嵌入式系统的规模,可以将嵌入式系统分为以下三种类型:
(1)小型嵌入式系统
小型嵌入式系统采用一个8位或16位的微控制器设计;硬件和软件复杂度小,需要进行板级设计。为这些系统开发嵌入式软件时,主要的编程工具是所使用的微控制器或者微处理器专用的编辑器、汇编器和交叉汇编器等,通常利用C语言开发这些系统的软件。
(2)中型嵌入式系统
中型嵌入式系统采用一个16位或32位的微控制器、数字信号处理器(DSP)或精简指令集(RISC)计算机等设计,硬件和软件复杂度都比较大。对于复杂的软件设计,可以使用如下的编程工具:RTOS、源代码设计工具、模拟器、调试器和集成开发环境(IDE)等,软件工具往往还提供了硬件复杂性的解决和分析方法。
(3)复杂嵌入式系统
复杂嵌入式系统的软件和硬件都非常复杂,需要可升级的处理器或者可配置的处理器和可编程逻辑阵列(如 FPGA、CPLD等器件)。它们用于边缘应用,在这些应用中,需要硬件和软件协同设计,并且都集成到最终的系统中,然而它们又受到硬件单元所提供的处理速度、存储器等资源的限制。为了解决时间问题,提高系统运行速度,可以在硬件中实现一部分软件功能,例如,加密和解密算法、TCP/IP协议栈和网络驱动程序等功能。当然,系统中某些硬件资源的功能模块同样也可以用软件来实现。这些系统的开发工具一般十分昂贵,有时还需要为这些系统开发编译器或者重定目标的编译器等。
由于嵌入式系统由硬件和软件两大部分组成,所以其分类也可以从硬件和软件进行划分。从硬件方面来讲,嵌入式系统的核心是嵌入式微处理器,根据其现状,嵌入式处理器可以分成嵌入式微处理器(Micro Processor Unit,MPU)、嵌入式微控制器(Microcontroller Unit, MCU)、嵌入式DSP处理器(Embedded Digital Signal Processor, EDSP)和嵌入式片上系统(System On Chip,SOC)等。
从软件方面来讲,主要依据使用的操作系统类型。目前嵌入式系统的软件主要有两大类:实时系统和分时系统,其中实时系统又分为硬实时系统和软实时系统两类。
1.2 嵌入式系统硬件
嵌入式系统的核心是嵌入式微处理器。嵌入式微处理器一般具备4个特点:
① 对实时和多任务有很强的支持能力,能完成多任务并且有较短的中断响应时间,从而使内部的代码和实时操作系统的执行时间减少到最低限度;
② 具有功能很强的存储区保护功能,这是由于嵌入式系统的软件结构已模块化,而为了避免在软件模块之间出现错误的交叉作用,需要设计强大的存储区保护功能,同时也有利于软件诊断;
③ 可扩展的处理器结构,以便能够迅速地扩展满足应用的高性能的嵌入式微处理器;
④ 嵌入式微处理器的功耗要求必须很低,尤其是用于便携式的无线及移动的计算和通信设备,对于靠电池供电的嵌入式系统更是如此,功耗往往为mW甚至μW级。
1.2.1 嵌入式微处理器
微处理器是一个集中取址和处理一组通用指令的单元。任何一个CPU必须包括一个控制单元和一个ALU单元。而嵌入式微处理器采用的是“增强型”通用微处理器。由于嵌入式系统通常应用于环境比较恶劣的环境中,因而嵌入式微处理器在工作温度、电磁兼容性以及可靠性方面的要求较通用的标准微处理器高。根据实际嵌入式应用要求,将嵌入式微处理器装配在专门设计的主板上,只保留和嵌入式应用有关的主板功能,这样可以大幅度地减小系统的体积和功耗。
和工业控制计算机相比,嵌入式微处理器组成的系统具有体积小、重量轻、成本低、可靠性高等一系列优点,但在其电路板上必须包括ROM、RAM、总线接口、必要的外设等器件。由嵌入式微处理器及其存储器、总线、外设等器件安装在一块电路主板上而构成的系统,就是通常所说的单板机系统。嵌入式微处理器目前主要有Am186/88、386EX、SC-400、Power PC、68000、MIPS、ARM系列等。
1.2.2 嵌入式微控制器
嵌入式微控制器又称为单片机,它将整个计算机系统集成到一块芯片中。嵌入式微控制器一般以某种微处理器内核为核心,根据某些典型的应用,在芯片内部集成了ROM/EPROM、RAM、总线、总线逻辑、定时/计数器、看门狗、I/O、串行口、脉宽调制输出、A/D、D/A、Flash RAM、EEPROM等各种必要功能部件和外设。为适应不同的应用需求,对功能的设置和外设的配置进行必要的修改和裁减定制,使得一个系列的单片机具有多种衍生产品,每种衍生产品的处理器内核都相同,主要的不同在于存储器、外设的配置和功能的设置等方面。这样可以使单片机最大限度地和应用需求相匹配,从而减少整个系统的功耗和成本。
和嵌入式微处理器相比,微控制器的单片化使应用系统的体积大大减小,从而使功耗和成本大幅度下降,可靠性得到提高。由于嵌入式微控制器目前在产品的品种和数量上是所有嵌入式处理器中最多的,而且上述诸多优点决定了微控制器是嵌入式系统应用的主流,目前MCU占到嵌入式系统市场绝大多数的份额。微控制器的片上外设资源比较丰富,适合于控制,因此又称为微控制器。通常,嵌入式微处理器可分为通用和半通用两类,比较有代表性的通用系列包括S08/S12、8051、P51XA、MCS-251、MCS-96/196/296、C166/167、68000等,而比较有代表性的半通用系列,通常支持USB接口;支持SPI、I2C、CAN总线;支持LCD模块等众多专用的MCU和兼容系列。
1.2.3 嵌入式DSP处理器
在数字信号处理应用中,各种数字信号处理算法往往相当复杂,一般结构的处理器无法实时地完成这些运算功能。由于DSP处理器对系统结构和指令进行了特殊的设计,使其特别适合进行实时数字信号处理。在数字滤波、FFT(快速傅里叶变换)、谱分析等方面,DSP算法正大量进入嵌入式领域,DSP应用正逐步从通用单片机中以普通指令实现DSP功能,过渡到采用嵌入式DSP处理器。嵌入式DSP处理器有两类:①DSP处理器经过单片化、EMC(电磁兼容性)改造、增加片上外设成为嵌入式DSP处理器,TI的TMS320C2000/C5000等属于此范畴;②在通用单片机或SOC中增加DSP协处理器,例如Intel的MCS-296和Infineon的TriCore系列。另外,在有关智能方面的应用中,也需要嵌入式DSP处理器,例如各种带有智能逻辑的消费类产品,生物信息识别终端,带有加解密算法的键盘、非对称数字用户线路(Asymmetrical Digital Subscriber Line,ADSL)接入、实时语音压解系统、虚拟现实显示等各类应用。这类智能化算法一般都是运算量较大,特别是向量运算、指针线性寻址等较多,而这些正是DSP处理器的优势所在。嵌入式DSP处理器比较有代表性的产品是TI的TMS320系列和Freescale的DSP56000系列等。TMS320系列处理器包括用于控制的C2000系列、移动通信的C5000系列,以及性能更高的C6000和C8000系列等。DSP56000目前已经发展成为DSP56000、DSP56100、DSP56200和DSP56300等多种不同系列的DSP处理器。
1.2.4 嵌入式片上系统
随着EDA(电子设计自动化)的推广和大规模集成电路(Large Scale Integrated Circuit, LSI)设计的普及化,以及半导体工艺的迅速发展,可以在一块硅片上集成实现更为复杂的系统,这就产生了SOC技术。各种通用处理器内核可以作为SOC设计公司的标准库,而嵌入式系统外设也成为了VLSI设计中的标准器件,可以通过标准的VHDL、Verilog等硬件语言描述保存在器件库中,供用户设计选择使用。用户根据需求定义应用系统,通过开发工具仿真、调试、验证设计出的应用系统后,就可以将设计文档等资料提交给半导体工厂制作样品。这样除某些无法集成的功能器件以外,整个嵌入式系统功能模块的实现均可集成到一块或几块芯片中,应用系统电路板设计将变得越来越简洁,这对于减小整个应用系统的体积和功耗、提高可靠性等方面都非常有利。
1.3 嵌入式系统软件
软件是系统设计最重要的一部分,是嵌入式系统的核心。嵌入式系统需要开发给定系统的应用软件,处理器执行指令代码和处理数据,有效、准确地完成指定工作任务。在设计的最后阶段,这些指令代码和相关数据被放置到存储器中,用于执行完成相应的工作。目前,大多数嵌入式系统的应用软件开发都会使用高级语言,例如C、C++和Java等,其中C语言选用得最多。关于嵌入式系统的软件程序设计,后文会有单独章节论述。
1.4 嵌入式操作系统
嵌入式操作系统是一种支持嵌入式系统应用的操作系统软件,它是嵌入式系统(包括硬、软件系统)设计的重要组成部分,通常包括与硬件相关的底层驱动软件、系统内核、设备驱动接口、通信协议、图形界面、标准化浏览器等。嵌入式操作系统具有通用操作系统的基本特点,如能够有效管理越来越复杂的系统资源;能够硬件虚拟化,使得开发人员从复杂的驱动程序移植和维护中解脱出来;能够提供库函数、驱动程序、工具集以及应用程序等。与通用操作系统相比较,嵌入式操作系统在系统实时高效性、硬件的相关依赖性、软件固态化以及应用的专用性等方面具有更为突出的特点。
1.4.1 嵌入式操作系统的种类
一般情况下,嵌入式操作系统可以分为两类:一类是面向控制、通信等领域的实时操作系统,如WindRiver公司的VxWorks、ISI的pSOS、QNX系统软件公司的QNX、ATI的Nucleus等;另一类是面向消费电子产品的非实时操作系统,这类产品包括个人数字助理(PDA)、移动电话、机顶盒、电子书、WebPhone等。
1.4.2 嵌入式操作系统的发展
嵌入式操作系统伴随着嵌入式系统的发展大致经历了4个阶段。
第一阶段是无操作系统的嵌入算法阶段,是以单芯片为核心的可编程控制器形式的系统,同时具有与监测、伺服、指示设备相配合的功能。这种系统大部分应用于一些专业性极强的工业控制系统中,一般没有操作系统的支持,通过汇编语言编程对系统进行直接控制,运行结束后清除内存。这一阶段系统的主要特点是:系统结构和功能都相对单一,处理效率较低,存储容量较小,几乎没有用户接口。由于这种嵌入式系统使用简便、价格很低,以前在国内工业领域应用较为普遍,但是已经远远不能适应高效的、需要大容量存储介质的现代化工业控制和新兴的信息家电等领域的需求。
第二阶段是以嵌入式CPU为基础、以简单操作系统为核心的嵌入式系统。这一阶段系统的主要特点是:CPU种类繁多,通用性比较差;系统开销小,效率高;一般配备系统仿真器,操作系统具有一定的兼容性和扩展性;应用软件较专业,用户界面不够友好;系统主要用来控制系统负载以及监控应用程序运行。
第三阶段是通用的嵌入式实时操作系统阶段,是以嵌入式操作系统为核心的嵌入式系统。这一阶段系统的主要特点是:嵌入式操作系统能运行于各种不同类型的微处理器上,兼容性好;操作系统内核精简、效率高,并且具有高度的模块化和扩展性;具备文件和目录管理、设备支持、多任务、网络支持、图形窗口以及用户界面等功能;具有大量的应用程序接口(API),开发应用程序简单;嵌入式应用软件丰富。
第四阶段是以基于Internet为标志的嵌入式系统,这是一个正在迅速发展的阶段。目前大多数嵌入式系统还孤立于Internet之外,但随着Internet的发展以及Internet技术与信息家电、工业控制技术等结合日益密切,嵌入式设备与Internet的结合将代表着嵌入式技术的真正未来。
1.4.3 使用实时操作系统的必要性
嵌入式实时操作系统在目前的嵌入式应用中用得越来越广泛,尤其在功能复杂、系统庞大的应用中显得越来越重要。
首先,嵌入式实时操作系统(RTOS)提高了系统的可靠性。在控制系统中,出于安全方面的考虑,不仅要求系统不能崩溃,还要有自愈能力;不仅要求在硬件设计方面提高系统的可靠性和抗干扰性,而且也应在软件设计方面提高系统的抗干扰性,尽可能地减少安全漏洞和不可靠的隐患。长期以来的前后台系统软件设计在遇到强干扰时,运行的程序往往会产生异常、出错、跑飞,甚至死循环,最终导致系统的崩溃。而实时操作系统管理的系统,这种干扰可能会引起若干进程中的一个被破坏,但可以通过运行的系统监控进程对其进行修复。通常情况下,这个系统监视进程用来监视各进程运行状况,遇到异常情况时通过采取一些有利于系统稳定可靠的措施,如把有问题的任务清除掉等方法,能够有效解决系统的干扰问题,一般系统不会出现崩溃。
其次,RTOS提高了开发效率,缩短了开发周期。在嵌入式实时操作系统环境下,开发一个复杂的应用程序,通常可以按照软件工程中的解耦原则将整个程序分解为多个任务模块。每个任务模块的调试、修改几乎不影响其他模块。商业软件一般都提供了良好的多任务调试环境。
再次,嵌入式实时操作系统充分发挥了32位CPU的多任务潜力。32位CPU比8位、16位CPU快,另外它是为运行多用户、多任务操作系统而设计的,特别适合运行多任务实时系统。32位CPU采用利于提高系统可靠性和稳定性的设计,使其可靠性容易得到保障。例如,CPU运行状态分为系统态和用户态。将系统堆栈和用户堆栈分开,以及实时地给出了CPU的运行状态等,允许用户在系统设计中从硬件和软件两方面对实时内核的运行实施保护。如果还是采用以前的前后台方式,则无法发挥32位CPU的优势。从某种意义上说,没有操作系统的计算机(裸机)是没有太多应用价值的。在嵌入式应用中,只有把CPU嵌入到系统中,同时又把操作系统嵌入进去,才是真正的嵌入式应用。
1.4.4 实时操作系统的优缺点
在嵌入式实时操作系统环境下,开发实时应用程序使程序的设计和扩展变得容易,不需要大的改动就可以增加新的功能。通过将应用程序分割成若干独立的任务模块,使应用程序的设计过程大为简化,而且对实时性要求苛刻的事件易于得到快速、可靠的处理。通过有效的系统服务,嵌入式实时操作系统使得系统资源得到更好的利用。但是,使用嵌入式实时操作系统需要额外的ROM/RAM开销,会增加CPU的额外负荷,以及内核的开销等。
1.5 嵌入式系统开发方法
嵌入式系统的一般开发可以参照图1.2所示的流程,但不同系统的开发应用并不一定完全一样,该图只表示出了嵌入式系统开发过程中可能包括的部分,对于复杂的系统,开发流程可能会更复杂一些。
图1.2 嵌入式系统开发流程
第一步就是对系统的需求进行分析:确定设计任务和设计目标,一般分为功能性需求和非功能性需求两个方面,功能需求主要包括输入/输出信号和系统的操作方式等;非功能需求主要包括系统的性能、成本、功耗、体积、重量等。
需求分析后很重要的一个步骤是设计选型,包括系统中用到所有元件的选型,而其中嵌入式处理器的选型尤为重要。据不完全统计,目前全世界嵌入式处理器的品种总量已经超过1 000种,流行的体系结构有30多个系列。面对如此众多的处理器,设计者需要根据项目需要,综合考虑,选择出一款合适的处理器。在选择的过程中不仅应考虑处理器的运算速度、程序存储器容量、数据存储器容量、能够提供I/O口数量和功耗等问题,也应该考虑到开发工具的相关问题,比如开发工具是否容易获取,开发者对于开发工具的熟悉程度等。
选型结束后,可以进行硬件设计、制作及调试工作,当然这几步不一定一次成功,可能会有一些反复,直到硬件测试完成后,可以进入下一步软件设计工作。
结合设计的软件,进行系统测试,系统测试完毕后,并不意味着嵌入式系统的开发过程全部结束。系统交付用户使用后,可能还会发现一些问题,所以之后根据用户的使用反馈,还需要对系统进一步完善。