1.1 嵌入式系统定义、发展简史、分类及特点
1.1.1 嵌入式系统的定义
嵌入式系统(Embedded System)是嵌入式计算机系统的简称,有多种多样的定义,但本质是相同的。这里给出美国CMP Books出版的Jack Ganssle和Michael Barr的著作Embedded System Dictionary中的嵌入式系统定义:嵌入式系统是一种计算机硬件和软件的组合,也许还有机械装置,用于实现一个特定功能。在某些特定情况下,嵌入式系统是一个大系统或产品的一部分。世界上第一个嵌入式系统是1971年Busicom公司用Intel单芯片4004微处理器完成的商用计算器系列。该词典还给出了嵌入式系统的一些示例,如微波炉、手持电话、计算器、数字手表、录像机、巡航导弹、全球定位系统(Global Position System,GPS)接收机、数码相机、传真机、跑步机、遥控器和谷物分析仪等,难以尽数。通过与通用计算机的对比可以更形象地理解嵌入式系统的定义。该词典给出的通用计算机定义是:计算机硬件和软件的组合,用作通用计算平台。个人计算机(Personal Computer,PC)是最流行的现代计算机。
再列举其他文献给出的定义,以便了解对嵌入式系统定义的不同表述方式,也可以看作从不同角度定义嵌入式系统。
《信息技术嵌入式系统术语》(GB/T 22033—2017)给出的嵌入式系统定义:嵌入式系统是指置入应用对象内部起信息处理和控制作用的专用计算机系统。它是以应用为中心,以计算技术为基础,软硬件可裁剪,对功能、可靠性、成本、体积、功耗有严格约束的专用计算机系统,其硬件至少包含一个微控制器或微处理器。
IEEE(国际电机工程师协会)给出的嵌入式系统定义:嵌入式系统是指用于控制、监视或辅助操作机器和设备的装置。
维基百科(英文版)给出的嵌入式系统定义:嵌入式系统是指一种用计算机控制的具有特定功能的较小的机械或电气系统,且经常有实时性的限制,在被嵌入到整个系统中时一般会包含硬件和机械部件。如今,嵌入式系统控制了人们日常生活中的许多设备,98%的微处理器被用在了嵌入式系统中。
国内对嵌入式系统定义曾进行过广泛讨论,有许多不同说法。其中,嵌入式系统定义的涵盖面问题是主要争论的焦点之一。例如,有的学者认为不能把手持电话称为嵌入式系统,只能把其中起控制作用的部分称为嵌入式系统,而手持电话可以称为嵌入式系统的应用产品。其实,这些并不妨碍人们对嵌入式系统的理解,所以不必对定义感到困惑。有些国内学者特别指出,在理解嵌入式系统定义时,不要把嵌入式系统与嵌入式系统产品相混淆。实际上,从口语或书面语言角度,不区分“嵌入式系统”与“嵌入式系统产品”,只要不妨碍对嵌入式系统的理解即可。
总体来说,可以从计算机本身角度概括表述嵌入式系统,那就是:嵌入式系统即嵌入式计算机系统,它是不以计算机面目出现的“计算机”,这个计算机系统隐含在各类具体的产品之中,而在这些产品中,计算机程序起到了重要作用。
1.1.2 嵌入式系统的由来及发展简史
1. 嵌入式系统的由来
通俗地讲,计算机是因科学家需要一个高速的计算工具而产生的。直到20世纪70年代,电子计算机在数字计算、逻辑推理及信息处理等方面表现出非凡的能力。在通信、测控与数据传输等领域,人们对计算机技术给予了更大的期待。这些领域的应用与单纯的高速计算要求不同,主要表现在:直接面向控制对象;嵌入到具体的应用体中,而非以计算机的面貌出现;能在现场连续可靠地运行;体积小,应用灵活;突出控制功能,特别是对外部信息的捕捉与丰富的输入输出功能等。由此可以看出,满足这些要求的计算机与满足高速数值计算的计算机是不同的。因此,一种称为微控制器(单片机)的技术得以产生并发展。为了区分这两种计算机类型,通常把满足海量高速数值计算的计算机称为通用计算机系统,而把嵌入到实际应用系统中,实现嵌入式应用的计算机称为嵌入式计算机系统,简称嵌入式系统。也就是说,因为通信、测控与数据传输等领域对计算机技术的需求催生了嵌入式系统的产生。
2. 嵌入式系统的发展简史
1946年诞生了世界上第一台电子数字计算机(The Electronic Numerical Integrator and Calculator,ENIAC),它由美国宾夕法尼亚大学莫尔电工学院制造,重达30t,总体积约90m3,占地170m2,耗电140kW,运算速度为每秒5000次加法,标志着计算机时代的开始。其中,最重要的部件是中央处理器(Central Processing Unit,CPU),它是一台计算机的运算和控制核心。CPU的主要功能是解释指令和处理数据,其内部含有的运算逻辑部件包括算术逻辑运算单元(Arithmetic Logic Unit,ALU)、寄存器部件和控制部件等。
1971年,Intel公司推出了单芯片4004微处理器(Microprocessor Unit,MPU),它是世界上第一个商用微处理器,Busicom公司用它来制作的电子计算器,是嵌入式计算机的雏形。1976年,Intel公司又推出了MCS-48单片机(Single Chip Microcomputer,SCM),其内部含有1KB只读存储器(Read Only Memory,ROM)、64B随机存取存储器(Random Access Memory,RAM)的简单芯片成为世界上第一个单片机,开创了将ROM、RAM、定时器、并行口、串行口及其他各种功能模块等CPU外部资源,与CPU一起集成到一个硅片上生产的时代。1980年,Intel公司对MCS-48单片机进行了完善,推出了8位MCS-51单片机,并获得巨大成功,开启了嵌入式系统的单片机应用模式。至今,MCS-51单片机仍有较多应用。这类系统大部分应用在一些简单、专业性强的工业控制系统中,早期主要使用汇编语言编程,后来大部分使用C语言编程,一般没有操作系统的支持。
20世纪80年代,逐步出现了16位、32位微控制器(Microcontroller Unit,MCU)。1984年,Intel公司推出了16位8096系列并将其称为嵌入式微控制器,这可能是“嵌入式”一词第一次在微处理机领域出现。这个时期,Motorola、Intel、TI、NXP、Atmel、Microchip、Hitachi、Philips、ST等公司推出了不少微控制器产品,且功能也在不断变强,并逐步支持了实时操作系统。
20世纪90年代,数字信号处理器(Digital Signal Processing,DSP)、片上系统(System on Chip,SoC)得到了快速发展。嵌入式处理器扩展方式从并行总线型发展出各种串行总线,并被工业界所接受,形成了一些工业标准,如集成电路互联总线(Inter Integrated Circuit,I2C)、串行外设接口(Serial Peripheral Interface,SPI)总线。甚至将网络协议的低两层或低三层都集中到嵌入式处理器上,如某些嵌入式处理器集成了控制区域网络(Control Area Network,CAN)总线接口、以太网接口。随着超大规模集成电路技术的发展,将数字信号处理器DSP、精简指令集计算机RISC处理器、存储器、I/O、半定制电路集中到单芯片的产品SoC中。值得一提的是,ARM微处理器的出现,较快地促进了嵌入式系统的发展。
21世纪开始以来,嵌入式系统芯片制造技术快速发展,融合了以太网与无线射频技术,成为物联网(Internet of Things,IoT)关键技术基础。嵌入式系统发展的目标应该是实现信息世界和物理世界的完全融合,构建一个可控、可信、可扩展且安全高效的信息物理系统(Cyber-Physical Systems,CPS),从根本上改变人类构建工程物理系统的方式。此时的嵌入式设备不但要具备个体智能(Computation,计算)、交流智能(Communication,通信),还要具备在交流中的影响和响应能力(Control,控制与被控),实现“智慧化”。显然,今后嵌入式系统研究要与网络和高性能计算的研究更紧密地合作。
在嵌入式系统的发展历程中,不得不介绍ARM公司。由于ARM占据了嵌入式市场的最重要份额,本书以ARM为蓝本阐述嵌入式的应用,下面先对ARM进行简要介绍。
3. ARM简介
ARM(Advanced RISC Machines)既可以是一个公司的名称,也可以是对一类微处理器的通称,还可以是一种技术的名称。
1985年4月26日,第一个ARM原型在英国剑桥的Acorn计算机有限公司诞生,由美国加州SanJose VLSI技术公司制造。20世纪80年代后期,ARM很快开发成的Acorn台式机产品形成了英国的计算机教育基础。1990年成立了Advanced RISC Machines Limited(后来简称为ARM Limited,ARM公司)。20世纪90年代,ARM的32位嵌入式RISC处理器扩展到世界各地,ARM处理器具有耗电少功能强、16位/32位双指令集和众多合作伙伴三大特点。它占据了低功耗、低成本和高性能的嵌入式系统应用领域的重要地位。目前,采用ARM技术知识产权(IP)的微处理器,即通常所说的ARM微处理器,已遍及工业控制、消费类电子产品、通信系统、网络系统、无线系统等各类嵌入式产品市场,基于ARM技术微处理器的应用,占据了32位RISC微处理器75%以上的市场份额,ARM技术正在逐步渗入人们生活的各个方面。但ARM作为设计公司,本身并不生产芯片,而是采用转让许可证制度,由合作伙伴生产芯片。
1993年,ARM公司发布了全新的ARM7处理器核心。其中的代表作为ARM7-TDMI,它搭载了Thumb指令集,是ARM公司通用32位微处理器家族的成员之一。其代码密度提升了35%,内存占用也与16位处理器相当。
2004年开始,ARM公司在经典处理器ARM11以后不再用数字命名处理器,而统一改用“Cortex”命名,并分为A、M和R三类,旨在为各种不同的市场提供服务。
ARM Cortex-A系列处理器是基于ARMv8A/v7A架构基础的处理器,面向具有高计算要求、运行丰富操作系统及提供交互媒体和图形体验的应用领域,如智能手机、移动计算平台、超便携的上网本或智能本等。
ARM Cortex-M系列基于ARMv7M/v6M架构基础的处理器,面向对成本和功耗敏感的MCU和终端应用,如智能测量、人机接口设备、汽车和工业控制系统、大型家用电器、消费性产品和医疗器械。
ARM Cortex-R系列基于ARMv7R架构基础的处理器,面向实时系统,为具有严格的实时响应限制的嵌入式系统提供高性能计算解决方案,其目标应用包括智能手机、硬盘驱动器、数字电视、医疗行业、工业控制、汽车电子等。Cortex-R处理器是专为高性能、可靠性和容错能力而设计的,其行为具有高确定性,同时保持很高的能效和成本效益。
2009年推出了体积最小、功耗最低和能效最高的处理器Cortex-M0,这款32位处理器问世后,打破了一系列的授权记录,成了各制造商竞相争夺的“香饽饽”,仅仅9个月时间,就有15家厂商与ARM签约。此外,该芯片还将各家厂商拉出了老旧的8位处理器泥潭。2011年,ARM推出了旗下首款64位架构ARMv8。2015年,ARM推出了基于ARMv8架构的一种面向企业级市场的新平台标准。2016年,ARM推出了Cortex-R8实时处理器,可广泛应用于智能手机、平板电脑、物联网领域。2018年ARM推出一项名称为integrated SIM的技术,将移动设备用户识别卡(Subscriber Identification Module,SIM)与射频模组整合到芯片,以便为物联网IoT应用提供更便捷产品。
从以上介绍可以看出,不同嵌入式处理器的应用领域侧重不同,开发方法与知识要素也有所不同,基于此,下面介绍嵌入式系统分类。
1.1.3 嵌入式系统的分类
嵌入式系统的分类标准有很多,如按照处理器位数来分、按照复杂程度来分、按照其他标准来分,它们的特点也各不相同。从嵌入式系统的学习角度来看,因为应用于不同领域的嵌入式系统,其知识要素与学习方法有所不同,所以可以按应用范围简单地把嵌入式系统分为电子系统智能化(微控制器类)和计算机应用延伸(应用处理器)两大类。一般来说,微控制器与应用处理器的主要区别在于可靠性、数据处理量、工作频率等方面,相对于应用处理器来说,微控制器的可靠性要求更高、数据处理量较小、工作频率较低。
1. 电子系统智能化类(微控制器类)
电子系统智能化类的嵌入式系统主要用于工业控制、现代农业、家用电器、汽车电子、测控系统、数据采集等,这类应用所使用的嵌入式处理器一般被称为微控制器(Microcontroller Unit,MCU)。这类嵌入式系统产品,从形态上看,更类似于早期的电子系统,但内部计算程序起核心控制作用。这对应于ARM公司的面向各类嵌入式应用的微控制器内核Cortex-M系列及面向实时应用的高性能内核Cortex-R系列。其中,Cortex-R主要针对高实时性应用,如硬盘控制器、网络设备、汽车应用(安全气囊、制动系统、发动机管理)。从学习与开发角度,电子系统智能化类的嵌入式应用,需要终端产品开发者面向应用对象设计硬件、软件,注重软件、硬件协同开发。因此,开发者必须掌握底层硬件接口、底层驱动及软硬件密切结合的开发调试技能。电子系统智能化类的嵌入式系统,即微控制器,是嵌入式系统的软硬件基础,是学习嵌入式系统的入门环节,而且是重要的一环。从操作系统角度来看,电子系统智能化类的嵌入式系统,可以不使用操作系统,也可根据复杂程度及芯片资源的容纳程度使用操作系统。电子系统智能化类的嵌入式系统使用的操作系统通常是实时操作系统(Real Time Operating System,RTOS),如mbedOS、MQXLite、FreeRTOS、μCOS-Ⅲ、μCLinux、VxWorks和eCos等。
2. 计算机应用延伸类(应用处理器类)
计算机应用延伸类的嵌入式系统,主要用于平板电脑、智能手机、电视机顶盒、企业网络设备等,这类应用所使用的嵌入式处理器一般被称为应用处理器(Application Processor),也称为多媒体应用处理器(Multimedia Application Processor,MAP)。这类嵌入式系统产品,在形态上更接近通用计算机系统,在开发方式上也类似于通用计算机的软件开发方式。从学习与开发角度来看,计算机应用延伸类的嵌入式应用,终端产品开发者大多购买厂家制作好的硬件实体在嵌入式操作系统下进行软件开发,或者需要掌握少量的对外接口方式。因此,从知识结构角度来看,学习这类嵌入式系统,对硬件的要求相对较少。计算机应用延伸类的嵌入式系统,即应用处理器,也是嵌入式系统学习中重要的一环。但是,从学习规律角度来看,若是要全面掌握嵌入式系统,应该先学习微控制器,然后在此基础上,进一步学习应用处理器编程,而不要倒过来学习。从操作系统角度来看,计算机应用延伸类的嵌入式系统一般使用非实时嵌入式操作系统,通常称为嵌入式操作系统(Embedded Operation System,EOS),如Android、Linux、iOS、Windows CE等。当然,非实时嵌入式操作系统与实时操作系统也不是明确划分的,只是粗略地进行分类,侧重领域有所不同而已。现在的实时操作系统(RTOS)功能在不断提升,而一般的嵌入式操作系统也在提高其实时性。
当然,工业生产车间中经常看到的工业控制计算机、个人计算机(PC)控制机床的生产过程等,可以说是嵌入式系统的一种形态,因为它们完成特定的功能,且整个系统不被称为计算机,而是有各自的名称,如磨具机床、加工平台等。但是,从知识要素角度来讲,这类嵌入式系统不具备普适意义,本书不做讨论。
1.1.4 嵌入式系统的特点
关于嵌入式系统的特点,不同学者有不同的说法。这里从与通用计算机对比的角度来谈谈嵌入式系统的特点。
与通用计算机系统相比,嵌入式系统的存储资源相对匮乏、速度较低,而对实时性、可靠性、知识综合性要求较高。嵌入式系统的开发方法、开发难度、开发手段等,既不同于通用计算机程序,也不同于常规的电子产品。嵌入式系统是在通用计算机发展的基础上,面向测控系统逐步发展起来的,因此,从与通用计算机对比的角度来认识嵌入式系统的特点,对学习嵌入式系统具有实际意义。
1. 嵌入式系统属于计算机系统,但不单独以通用计算机的面目出现
嵌入式系统的全称为嵌入式计算机系统(Embedded Computer System),它不仅具有通用计算机的主要特点,还具有自身特点。嵌入式系统必须要有软件才能运行,但其隐含在种类众多的具体产品中。同时,通用计算机种类屈指可数,而嵌入式系统由于芯片种类繁多、应用对象大小各异,且作为控制核心,已经融入各个行业的产品之中。
2. 嵌入式系统开发需要专用工具和特殊方法
嵌入式系统不像通用计算机那样有了计算机系统就可以进行应用软件的开发。一般情况下,微控制器或应用处理器芯片本身不具备开发功能,必须要有一套与相应芯片配套的开发工具和开发环境。这些工具和环境一般基于通用计算机上的软硬件设备,以及逻辑分析仪、示波器等。开发过程中往往有工具机(一般为PC或笔记本电脑)和目标机(实际产品所使用的芯片)之分,工具机用于程序的开发,目标机作为程序的执行机,开发时需要交替结合进行。编辑、编译、链接生成机器码在工具机完成,通过写入调试器将机器码下载到目标机中,进行运行与调试。
3. 使用MCU设计嵌入式系统,数据与程序空间采用不同存储介质
在通用计算机系统中,程序存储在硬盘上。实际运行时,通过操作系统将要运行的程序从硬盘调入内存(RAM),运行中的程序、常数、变量均在RAM中。而在以MCU为核心的嵌入式系统中,一般情况下,其程序被固化到非易失性存储器中。变量及堆栈使用RAM存储器。
4. 开发嵌入式系统涉及软件、硬件及应用领域的知识
嵌入式系统与硬件紧密相关,它的开发需要硬件、软件协同设计和测试。同时,由于嵌入式系统专用性很强,通常用在特定应用领域,如嵌入在手机、冰箱、空调、各种机械设备、智能仪器仪表中起核心控制作用。因此,进行嵌入式系统的开发,还需要对领域知识有一定的理解。当然,一个团队协作开发一个嵌入式产品,其中各个成员可以扮演不同角色,但对系统的整体理解与把握并相互协作,有助于一个稳定可靠的嵌入式产品的诞生。