嵌入式系统
2023-04-05 10:10:07 阿炯

嵌入式系统(embedded system),是一种嵌入机械或电气系统内部、具有专一功能和实时计算性能的计算机系统。嵌入式系统常被用于高效控制许多常见设备,被嵌入的系统通常是包含数字硬件和机械部件的完整设备,例如汽车的防锁死刹车系统。相反,通用计算机如个人电脑则设计灵活,可以智能处理各式各样的运算情况,以满足广大终端用户不同的需要。计算机系统的两大分支:嵌入式系统和通用计算机系统。

现代嵌入式系统通常是基于微控制器(如含集成内存和/或外设接口的中央处理单元)的,但在较复杂的系统中普通微处理器(使用外部存储芯片和外设接口电路)也很常见。通用型处理器、专门进行某类计算的处理器、为手持应用订制设计的处理器等,都可能应用到嵌入式系统。常见的专用处理器有数字信号处理器。嵌入式系统的关键特性是处理特定的任务,因此工程师能对其进行优化,以降低产品的体积和成本,提升可靠性和性能。

嵌入式系统的物理形态包括便携设备如计步器、电子手表和MP3播放器,大型固定设备如交通灯、工厂控制器,大型复杂系统如混合动力汽车、磁共振成像设备、航空电子设备等。它们的复杂度低至单片机,高至大型底盘或外壳内安装有多个部件、外设和网络。 是先进的计算机技术、半导体技术、电子技术与各个行业的具体应用相结合的产物,这决定了它是技术密集、资金密集、知识高度分散、不断创新的集成系统。同时嵌入式系统又是针对特定的应用需求而设计的专用计算机系统,也决定了其具有自己的特点,不同嵌入式系统具有一定的差异。一般来说,嵌入式系统有以下特点:
软/硬件资源有限,过去只在个人计算机(PC)中安装的软件,现在也出现在复杂的嵌入式系统中。
集成度高、可靠性高、功耗低。
有较长的生命周期,通常与所嵌入的宿主设备具有相同的使用寿命。
软件程序存储(固化)在存储芯片上,开发者通常无法改变。
是计算机技术、半导体技术、电子技术和各个行业的应用相结合的产物。
一般来说,并非总是独立的设备,而是作为某个更大型计算机系统的辅助系统。
通常都与真实物理环境相连,等待着输入或激发信号,从而完成计算并输出更新的状态。

嵌入式系统可分为4层,硬件层、驱动层、操作系统层和应用层

1、硬件层
是整个嵌入式系统的根本,如果现在单片机及接口这块很熟悉,并且能用C和汇编语言来编程,从嵌入式系统的硬件层走起来相对容易,硬件层也是驱动层的基础,一个优秀的驱动工程师是要能够看懂硬件的电路图和自行完成CPLD的逻辑设计的,同时还要对操作系统内核及其调度性相当的熟悉的。但硬件平台是基础,增值还要靠软件。硬件层比较适合于,电子、通信、自动化、机电一体、信息工程类专业的人来搞,需要掌握的专业基础知识有,单片机原理及接口技术、微机原理及接口技术、C语言。

2、驱动层
这部分比较难,驱动工程师不仅要能看懂电路图还要能对操作系统内核十分的精通,以便其所写的驱动程序在系统调用时,不会独占操作系统时间片,而导致其它任务不能动行,不懂操作系统内核架构和实时调度性,没有良好的驱动编写风格,按大多数书上所说添加的驱动的方式,很多人都能做到,想做个好的驱动人员没有三、四年功底,操作系统内核不研究上几编,不是太容易成功的,但其工资在嵌入式系统四层中可是最高的。嵌入式的驱动层比较适合于电子、通信、自动化、机电一体、信息工程类专业尤其是计算机偏体系结构类专业的人来搞,除硬件层所具备的基础学科外,还要对数据结构与算法、操作系统原理、编译原理都要十分精通了解。

3、操作系统层
对于操作系统层目前可能只能说是简单的移植,而很少有人来自已写操作系统,或者写出缺胳膊少腿的操作系统来,这部分工作大都由驱动工程师来完成。操作系统是负责系统任务的调试、磁盘和文件的管理,而嵌入式系统的实时性十分重要。据说XP操作系统是微软投入300人用两年时间才搞定的,总时工时是600人年,中科院软件所自己的女娲Hopen操作系统估计也得花遇几百人年才能搞定。因此这部分工作相对来讲没有太大意义。

4、应用层
相对来讲较为容易的,如果会在windows下如何进行编程接口函数调用,到操作系统下只是编译和开发环境有相应的变化而已。嵌入式系统中涉及算法的由专业算法的人来处理的,不必归结到嵌入式系统范畴内。但如果涉及嵌入式系统下面嵌入式数据库、基于嵌入式系统的网络编程和基于某次应用层面的协议应用开发(比如基于SIP、H.323、Astrisk)方面又较为复杂,并且有难度了。

如果要简单的进行分层,可将嵌入式系统分为由硬件系统和软件系统两大部分。其中硬件系统包括处理器、外设和必要的外围电路;软件系统包括嵌入式操作系统和软件运行环境。

硬件系统

1、处理器
处理器是嵌入式系统硬件系统的核心,早期嵌入式系统的处理器由微处理器(甚至是仅包含几个芯片的微处理器)来担任,而如今嵌入式系统的处理器一般采用 IC(集成电路)芯片形式,可以是 ASIC(专用集成电路)或者 SoC(系统级芯片)中的一个核。

嵌入式系统的处理器主要有以下几种:嵌入式微处理器(EMPU)、嵌入式微控制器(MCU,又称单片机)、嵌入式数字信号处理器(EDSP)、嵌入式片上系统:
1) 嵌入式微处理器(Embedded Microprocessor Unit,EMPU)以通用计算机中的标准 CPU 为微处理器,并将其装配在专门设计的电路板上,仅保留与嵌入式应用有关的母板功能,构成嵌入式系统。

与通用计算机相比,嵌入式微处理器的系统体积和功耗大幅度减小,而工作温度的范围、抗电磁干扰能力、系统的可靠性等方面均有提高。在嵌入式微处理器中,微处理器是整个系统的核心,通常由 3 部分组成:控制单元、算术逻辑单元和寄存器,下图为嵌入式微处理器的示意图。


嵌入式微处理器示意图

2) 嵌入式微控制器(Microcontroller Unit,MCU)又称单片机,以某一种微处理器为核心,芯片内部集成有一定容量的存储器(ROM/EPROM、RAM)、I/O 接口(串行接口、并行接口)、定时器/计数器、看门狗、脉宽调制输出、A/D 转换器、D/A 转换器、总线、总线逻辑等。

与嵌入式微处理器相比,嵌入式微控制器的最大特点是单片化、体积小、功耗低、可靠性较高。嵌入式微控制器是目前嵌入式系统工业的主流。

3) 嵌入式数字信号处理器(Embedded Digital Signal Processor,EDSP)对系统结构和指令进行了特殊设计,使其适合执行 DSP 算法,编译效率高,指令执行速度也较快。

在数字滤波、FFT、谱分析等方面,DSP 算法已广泛应用于嵌入式领域,DSP 应用正从在单片机中以普通指令实现 DSP 功能,过渡到采用 EDSP 实现相应功能。

4) 嵌入式片上系统是集系统性能于一块芯片上的系统级芯片,通常含有一个或多个微处理器 IP 核(CPU),根据需求也可增加一个或多个 DSP IP 核、相应的外围特殊功能模块,以及一定容量的存储器(RAM、ROM)等,并针对应用所需的性能将其设计集成在芯片上,成为系统操作芯片。

嵌入式片上系统的主要特点是嵌入式系统能够运行于各种不同类型的微处理器上,兼容性好,操作系统的内核小、效果好。

2、外设
外设包括存储器、I/O 接口等辅助设备。尽管 MCU 已经包含了大量外设,但对于需要更多 I/O 接口和更大存储能力的大型系统来说,还需要连接额外的 I/O 接口和存储器,用于扩展其他功能和提高性能。

软件系统

1) 嵌入式操作系统(Embedded Operating System,简称:EOS)是指用于嵌入式系统的操作系统,通常包括与硬件相关的底层驱动软件、系统内核、设备驱动接口、通信协议、图形界面、标准化浏览器等。

嵌入式操作系统负责嵌入式系统的全部软、硬件资源的分配、任务调度,控制、协调并发活动。它必须体现其所在系统的特征,能够通过装卸某些模块来达到系统所要求的功能。目前在嵌入式领域广泛使用的操作系统有嵌入式实时操作系统 μC/OS-II、嵌入式 Linux、Windows Embedded、VxWorks 等,以及应用在智能手机和平板电脑上的 Android、iOS 等。

2) 软件运行环境,狭义上讲是指软件运行所需要的硬件支持;广义上也可以说是一个软件运行所要求的各种条件,包括软件环境和硬件环境。

比如,各种操作系统所需要的硬件支持是不一样的,对 CPU、内存等的要求也是不一样的。而许多应用软件不仅要求硬件条件的支持,还需要软件环境的支持,通俗讲就是 Windows 系统支持的软件,Linux 系统不一定支持,苹果系统的软件只能在苹果设备上运行,如果这些软件想跨平台运行,必须修改软件本身,或者模拟它所需要的软件环境。

同典型的计算机程序员一样,嵌入式系统设计人员也使用编译器、链接器和调试器开发嵌入式系统软件。然而也使用一些大多数程序员不熟悉的工具。软件工具的来源有如下几种:
1)专注于嵌入式系统市场的软件公司
2)从GNU软件开发工具移植(参见交叉平台编译)
3)有些情况下,如果嵌入式处理器与普通个人计算机处理器很近似的话也可以使用个人计算机开发工具

一些编程语言为嵌入式系统编程提供了一些特殊支持。对于C语言,ISO/IEC TR 18037:2005定义了指定的地址空间、指定的存储类、基本输入输出的硬件寻址。

嵌入式系统经常没有操作系统、专用的嵌入式操作系统(经常是实时操作系统)或者指定程序员移植到这些新系统。系统带有启动代码,通常它禁止中断、设置电子设备参数、测试计算机(RAM、CPU和软件),然后开始应用程序运行。许多嵌入式系统从短暂的掉电状态恢复,经常重起而不进行最近的自检。 下面介绍了几款觉的嵌入式操作系统:
(1)WindowCE.NET/5.0
作为Microsoft的产品,WindowCE.NE/5.0提供了功能完备的平台开发工具Platform  Builder和应用开发工具Embedded Visual C++/Visual Studio 2003。CE由于拥有广大使用者所熟悉的windows界面,系统提供了众多驱动程序,并且有完备的文档支持。对于应用开发而言,熟悉Windows系统开发的程序员很容易转到CE 应用程序的开发。

(2)VxWorks
是由Windriver(风河)公司的产品。2022年该公司被Aptiv收购

(3)υC/OSII
是由Jean Labrosse设计编写的开放源代码的嵌入式实时操作系统,阅读并深入理解υC/OS的源代码对于理解实时系统是大有裨益的。

(4)υCLinux
是适用于没有MMU 的嵌入式处理的LinuxOS 版本,同样在GNU GPL发布。

主流的嵌入式平台有三种:ARM平台、DSP平台和FPGA平台。

1、ARM
ARM微处理器是由ARM公司提供IP(Intellectual Property,知识产权)授权,交付多个芯片设计厂商整合生产的。在2007年,意法半导体(ST)公司成为第一个引入ARM Cortex-M授权的半导体厂商,开启了高性能、低成本、低功耗的ARM嵌入式芯片新时代,其生产的STM32系列微处理器是最流行的Cortex-M微处理器。ARM嵌入式系统广泛应用于自动检测与控制、智能仪器仪表、机电一体化设备、汽车电子及日常消费电子产品中。

2、DSP平台
嵌入式DSP处理器(Embedded Digital Signal Processor,EDSP),是专门用于信号处理方面的处理器,其在系统结构和指令算法方面进行了特殊设计,芯片内部采用程序和数据分开存储及传输的哈佛结构,具有专门硬件乘法器,采用流水线操作,提供特殊的DSP指令,可用来快速地实现各种数字信号处理算法,具有很高的编译效率和指令的执行速度,在数字滤波、FFT、谱分析等各种仪器上获得了大规模的应用。

3、FPGA平台
随着平台级FPGA产品的出现和EDA设计工具软件的不断发展,利用现有的FPGA和EDA工具,人们也可以很方便地在FPGA中嵌入RISC(Reduced Instruction Set Computer,精简指令集)处理器内核、DSP算法、存储器、专用ASIC模块、其它数字IP Core以及用户定制逻辑等,构建成一个可编程的片上系统(SOPC),把原来需要在PCB上采用处理器、DSP、若干ASIC芯片才能实现的功能全都集成到了单片FPGA上。

FPGA内部嵌入了丰富的乘法器(DSP)资源、高速收发器(GTP/GTX)资源、以太网MAC资源、嵌入式处理器(Power PC)资源、时钟及锁相环资源、存储器(BRAM)资源等,甚至在Xilinx公司最新推出的Zynq-7000系列芯片之中嵌入了ARM资源,将传统的FPGA演变成了ARM+FPGA的扩展开发平台。这些嵌入的硬件资源极大地增强了传统FPGA的功能,提升了FPGA的工作效率和灵活性,使得一块FPGA平台就可适用于多种产品,进行各种扩展。开发者只需要掌握Verilog HDL等硬件描述语言和嵌入式系统开发的相关知识,就可对整个系统进行编程和控制。


嵌入式系统的应用

自 20 世纪 70 年代微处理器诞生后,将计算机技术、半导体技术和微电子技术等融合在一起的专用计算机系统,即嵌入式系统,被广泛应用于家用电器、航空航天、工业、医疗、汽车、通信、信息技术等领域,各种各样的嵌入式系统在应用数量上已远远超过通用计算机,从日常生活、生产到社会的各个角落,可以说嵌入式系统无处不在。与人们生活紧密相关的几个应用领域如下:

1、消费类电子产品
嵌入式系统在消费类电子产品应用领域的发展最为迅速,而且在这个领域中的嵌入式微处理器的需求量也是最大的。由嵌入式系统构成的消费类电子产品已经成为生活中必不可少的一部分,如智能冰箱、流媒体电视等信息家电产品,以及智能手机、PDA、数码相机、MP3、MP4 等。

2、智能仪器仪表类产品
这类产品可能离日常生活有点距离,但是对于开发人员来说,却是实验室里的必备工具,如网络分析仪、数字示波器、热成像仪等。通常这些嵌入式设备中都有一个应用微处理器和一个运算微处理器,可以完成数据采集、分析、存储、打印、显示等功能。

3、信息通信类产品
这些产品多数应用于通信机柜设备,如路由器、交换机、家庭媒体网关等,在民用市场使用较多的莫过于路由器和交换机。基于网络应用的嵌入式系统也非常多,目前市场发展较快的是远程监控系统等在监控领域中的应用系统。

4、过程控制类应用
过程控制类应用主要是指在工业控制领域中的应用,包括对生产过程中各种动作流程的控制,如流水线检测、金属加工控制、汽车电子等。汽车工业在中国已取得了飞速发展,汽车电子在这个大发展的背景下迅速成长。现在,一辆汽车中往往包含上百个嵌入式系统,它们通过总线相连,实现对汽车各部分的智能控制。车载多媒体系统、车载 GPS 系统等,也都是典型的嵌入式系统应用。

5、航空航天类应用
不仅在低端的民用产品中,在航空航天这样的高端应用中同样也需要大量的嵌入式系统,如火星探测器、火箭发射主控系统、卫星信号测控系统、飞机的控制系统、探月机器人等。在我国的探月工程中,“嫦娥三号”的探月工程车就是最好的证明。

6、生物微电子类应用
在指纹识别、生物传感器数据采集等应用中也广泛采用了嵌入式系统。环境监测已经成为人类必须面对的问题,随着技术的发展,将来在空气、河流中可以用大量的微生物传感器实时监测环境状况,而且还可以把这些数据实时地传送到环境监测中心,以监测整个生活环境,避免发生更深层次的环境污染。这也许就是将来围绕在人们生存环境周围的一个无线环境监测传感器网络。

7、嵌入式人工智能系统应用
深度学习功能已经广泛应用于许多嵌入式视觉系统,所有这些应用程序的共同点是会生成大量数据,并且经常涉及非工业场景,如自动驾驶。相关车辆已经配备了许多传感器和摄像头,可以从当前的交通状况中收集数据。集成视觉软件借助深度学习算法实时分析数据流。


嵌入式工程师要具备的能力

嵌入式的起点之高、学习之困难、台阶之陡峭,是一般手机或PC应用软件层软件工程师所不能体会的。当然嵌入式也有二次开发和低代码开发的,相对容易。


1、成为初级嵌入式软件工程师的条件

想要成为一个合格的初级嵌入式工程师,需要具备以下基本技能和基础知识。
编程语言方面:熟练掌握C/C++编程语言,C语言是必备项。嵌入式系统往往需要高效、稳定、实时的运行,因此需要嵌入式工程师具备高超的编程技能和熟练的代码调试能力。
硬件基础:熟悉数字、模拟电路基础知识。嵌入式系统中的电路部分往往需要嵌入式工程师设计和调试,因此需要掌握数字电路和模拟电路的基础知识。当然,如果专门的硬件工程师配合,这一部分熟悉原理即可,不一定要很懂。
单片机知识:嵌入式工程师需要了解单片机的各种功能模块,如定时器、计数器、串口等,并能够熟练使用这些模块。
通信协议和接口技术:如SPI、I2C、UART、CAN等。这些通信协议在嵌入式系统中广泛使用,因此嵌入式工程师需要熟练掌握这些协议,并能编写驱动和API接口。
熟悉各种传感器原理和应用:嵌入式系统中需要与各种传感器和执行器进行交互,因此需要了解它们的原理和应用。
RTOS操作系统:嵌入式系统中经常需要使用FreeRTOS、Linux、UCossII等操作系统,因此嵌入式工程师需要熟悉这些操作系统的使用方法和原理。

另外,嵌入式系统中经常遇到新的板子和CPU,没做过的组件、外设或传感器,也常会有没用过的系统软件,有时还要面对不同行业客户。总之,嵌入式工程师经常面对陌生的东西,工期时常也很紧张,客观上需要具备快速学习和解决问题的能力。

2、成为高级嵌入式工程师的条件

高级嵌入式工程师的要求更高,根据我的过往经验,它要在初级嵌入式工程师本领的基础上,还要具备以下几种技术能力。
10年左右的C、C++功力:真正的C/C++能耐是在多年开发才能形成的,行业经验一般认为,合格的C/C++语言能力,没个十年八载,恐怕不能成熟。
操作系统移植与配置的能力:这个如果用别人移植好的不算,那是初级嵌入式工程师的能力。高级嵌入式工程师,可以在裸机、无前例的情况下,把嵌入式freeRTOS之类的小操作系统、嵌入式Linux系统移植到目标硬件板上。
要具备系统级的设计能力:能针对市场需求,考虑成本、技术难度、扩展性等因素,选定嵌入式系统方案。
驱动与API开发:熟悉板载Bootloader、BSP系统的开发,给应用工程师提供API接口。
系统级的BUG跟踪处理能力。有时,嵌入式系统高达数十万行、甚到数百万行代码,出了一些bug是很难分析定位的。嵌入式高工则具备这方面的能力,经验十分老到。
电路分析与设计的能力。能够分析电路设计,从厂家的参考设计中提炼、合理取舍,形成自身需要的硬件板子。当然,如果是嵌入式软件工程师,这项能力不是必备。但最起码要懂一些硬件电路接口基本原理。

除了技术能力之外,嵌入式高工不仅通常需要带领技术团队一起工作,要具备更强的团队协作能力和沟通能力。嵌入式高工也要对行业的业务有很多经验,有再高的技术,行业经验不到位也不行。

3、嵌入式软件开发该怎样入门

虽然从本质上来说嵌入式的难度、入门台阶要大于一般的纯软开发,但路子走对了,也是可以少走弯路,很快入门的。建议遵循以下几个方面。

打好编程基础,必须选择C/C++作为主要编程语言。可以暂时不懂C++,但C是必须先要搞懂的。这个是没办法的事,嵌入式就是C/C++语言的天下。了解编程语言的基础语法、数据类型、循环和函数等基本知识,熟悉面向对象编程思想。

由小到大的学习方式,小型的嵌入式系统成本人低,简单易学,可拿它先开刀。学习它的组成、体系结构、外设和内存管理、接口等基本概念。等将来有了经验,再学习大型复杂的嵌入式系统。

多练习嵌入式编程,多实践,实做才能有收获。可根据自己的需求选择一个流行的嵌入式系统开发平台,例如Arduino、STM32、430或51等,然后通过编写简单的程序开始学习嵌入式系统编程。我最建议的是以STM32和Arduino为起点,16位和8位单片机的应用会越来越少,Arduino台阶低,STM32是主流。

掌握开发嵌入式系统所需的软件和硬件工具,例如调试器、编译器和开发板等。万丈高楼平地起,要先用小项目进行练习,不管是实际项目或者自己设计的,调试程序并解决问题,积累经验,是嵌入式进阶的不二法门。嵌入式系统开发是一个不断变化、发展的领域,持续学习新的技术和知识是必要。

总之,如果能采用打好语言基础、先入门小型平台、采用由小到大、小项目实战等做法,还是能很快入门嵌入式软件开发的。


工控领域的工业机器人常用的嵌入式操作系统


工业机器人的使用主要集中在汽车电子、工业控制、智能制造、轨道交通等行业,那工业机器人常用的操作系统大家知道是哪些吗?下面一起了解工业机器人常用的嵌入式操作系统。

VxWorks

VxWorks操作系统是美国WindRiver公司于1983年设计开发的一种嵌入式实时操作系统(RTOS),是Tornado嵌入式开发环境的关键组成部分。VxWorks具有可裁剪微内核结构;高效的任务管理;灵活的任务间通信;微秒级的中断处理;支持POSIX1003.1b实时扩展标准;支持多种物理介质及标准的、完整的TCP/IP网络协议等。上文对该公司的情况有所提及。

Linux

嵌入式Linux,由于其源代码公开,公众可以修改以满足自己的应用场景。其中大部分都遵从GPL,是开放源代码和免费的。可以稍加修改后应用于用户自己的系统。有庞大的开发人员群体,无需专门的人才,只要懂Unix/Linux和C语言即可。支持的硬件数量庞大。嵌入式Linux和普通Linux并无本质区别,PC上用到的硬件嵌入式Linux几乎都支持。而且各种硬件的驱动程序源代码都可以得到,为用户编写自己专有硬件的驱动程序带来很大方便。

Windows CE

WindowsCE与Windows系列有较好的兼容性,无疑是WindowsCE推广的一大优势。WindowsCE为建立针对掌上设备、无线设备的动态应用程序和服务提供了一种功能丰富的操作系统平台,它能在多种处理器体系结构上运行,并且通常适用于那些对内存占用空间具有一定限制的设备。

Intewell OS

Intewell操作系统是科东软件基于“道”系统研发出来的一款微内核实时操作系统(RTOS),具备软件定义控制、高实时、微内核、微秒级响应、高可靠、全国产自主可控、多业务承载、软硬件解耦等一系列的特性。科东Intewell操作系统具有良好的可扩展性、友好的用户开发环境和丰富的开发调试工具,提供POSIX接口,支持目前市面上的主流芯片。Intewell还可以提供Windows和Linux的实时扩展解决方案,可以为用户更好地进行业务部署。单个RTOS可在多核上运行,高实时、高可靠;驱动、组件等运行在核心态外的非特权级空间中,系统隔离性和可靠性高;采用用户级线程,线程切换性能以及线程间的同步、通信性能更高;支持X86、ARM、RISC-V等各种架构的硬件平台。

μC/OS-Ⅱ

μC/OS-Ⅱ是著名的开放源代码的实时内核,是专为嵌入式应用设计的,可用于8位,16位和32位单片机或数字信号处理器(DSP)。主要特点是公开源代码、可移植性好、可固化、可裁剪性、占先式内核、可确定性等。

DSP/BIOS

DSP/BIOS是TI公司特别为其TMS320C6000TM,TMS320C5000TM和TMS320C28xTM系列DSP平台所设计开发的一个尺寸可裁剪的实时多任务操作系统内核,是TI公司的CodeComposerStudioTM开发工具的组成部分之一。DSP/BIOS主要由三部分组成:多线程实时内核;实时分析工具;芯片支持库。利用实时操作系统开发程序,可以方便快速的开发复杂的DSP程序。