文章目录
什么是嵌入式
什么是嵌入式系统?嵌入式开发到底是做什么的?我们通过两个具体的案例来阐述嵌入式系统的概念和内涵。
案例一:智能手环
智能穿戴设备(智能手环或手表)是现代人日常使用的电子产品之一。
它可以记录人们日常生活的运动、睡眠、心率等实时数据。
并将这些数据与智能手机、平板电脑等设备进行同步,对采集到的日常数据进行大数据分析,发挥指导健康生活的作用。
下面两张图是Fitbit Flex智能手环外观及其拆解图。


智能手环一般都具有以下功能:
- 实时显示时间,设定闹钟等传统手表的功能。
- 测量心率、血压、睡眠时长等健康数据。
- 统计步数、运动时长、运动消耗等运动数据。
- 定位。
- 振动功能。
- 蓝牙无线数据连接、数据传输。
- 低功耗与超长待机
由此可见,智能手环一般有以下组成部分:
- 微控制器(尤其要使用低功耗的)
- 定位模块
- 蓝牙模块
- OLED显示屏
- 心率传感器
- 锂电池及其充电模块
- 加速度传感器
- ...
其系统框架图可以用下图描述:

有些智能手环可能还兼顾Wi-Fi连接功能,拥有Wi-Fi模块,这样它和智能手机之间就可以直接基于互联网进行通信了。
案例二:智能家居
在基本居住功能的基础上,融入互联一体、移动端远程控制、智能检测与监控等技术,实现家居系统的自动化、智能化,这就是智能家居系统。
假如要实现一个自动智能管理家用电器的系统,具备以下功能:
- 家居安全监控:智能门禁、火灾烟雾报警
- 家居设备监控:灯光设备监控,电气设备监控
- 家居环境监控:对甲醛、PM2.5、温度、湿度等信息实时采集和监控
- ...
利用移动互联技术,采用基于云平台的控制方式,以微控制器为核心,辅以相应的传感器进行环境数据监控,再结合软件进行数据分析,从而自动智能的进行家居家电的控制。
智能家居系统的系统框图如下所示:

微控制器是其中的核心,其主要作用有两个:
- 采取各类传感器数据并发送给智能家居软件(服务端)进行数据分析处理。
- 接收智能家居软件(服务端)的指令,通过各类执行器控制系统中的各类电器设备。
嵌入式的定义
分析上述两个案例,它们都是嵌入式非常经典的应用场景,它们之间有什么共性?
可以总结以下几条:
- 功能单一且简单,不像传统计算机系统拥有复杂的软硬件设施。
- 功耗低。
- 追求高实时性和高可靠性。
- 应用于特定的场景,整个软硬件系统往往是更大系统的一部分。
- 人机交互方式简单,往往只需要简单的按键或简易的交互系统,不需要键盘鼠标,往往也没有复杂的操作系统。
关于嵌入式的定义,电气电子工程师学会(Institute of Electrical and Electronics Engineers,简称IEEE)在《IEEE标准软件工程术语词汇表》中明确给出了嵌入式系统的定义:
Embedded System: A computer system with a dedicated function within a larger mechanical or electrical system, often with real-time computing constraints.
翻译成中文就是:嵌入式系统是在较大的机械或电气系统中具有专用功能的计算机系统,通常具有实时计算限制。
所以嵌入式系统仍然是一种计算机系统,只不过是专用的,而且这个定义中还提到嵌入式系统需要在更大的机械或电气系统中使用的一种计算机系统,这就是"嵌入"的由来。
随着嵌入式的发展,我们还可以给出一个更全面、更容易理解的定义:
以用户需求和应用场景为核心,拥有高度可定制化的硬件和软件,对功能、可靠性、性能、功耗、体积、价格有严格要求的计算机系统。这些系统通常嵌入在更大的设备或系统中,以实现特定的控制、监测或操作等各种功能,这就是嵌入式系统。
下面详细的解释这句话:
- 用户需求是最核心,最重要的考虑点。毕竟再好的东西也要能够卖出去才行,而不同的行业不同的场景,用户的需求是不同的。
- 硬件和软件都需要根据用户需求进行定制化处理(也可以叫**"软硬件可自由裁剪"**):
- 对于硬件来说,选择合适的微控制器、传感器以及其它各种外部硬件设备等,以满足性能和成本的平衡。比如低性能处理器一般更便宜,某个嵌入式系统只需要低性能处理器,则不需要高性能的处理器。
- 对于软件来说,既可以实现根据需求实现既定功能,也能尽量精简软件系统,以减少资源占用提高效率性能。当然也可以连带降低硬件成本。
- 功能、可靠性、性能、功耗、体积、价格是实现嵌入式系统时,基于用户的需求,需要考虑的几个点:
- 功能:嵌入式系统必须实现特定功能,确保其能够满足预期用途,避免功能冗余。
- 可靠性:嵌入式系统往往一次性烧录制造,然后终身使用。由于其嵌入式的特点,后期维护比较麻烦,因此需要设计高可靠性,确保系统长期稳定运行。
- 性能:嵌入式系统需要在有限的硬件资源下实现高效的计算和响应能力,尤其是在实时应用中,性能至关重要。
- 功耗:许多嵌入式设备(如移动设备、物联网终端)对功耗有严格限制,需要采用低功耗设计策略,如动态电压调整和睡眠模式。
- 体积:嵌入式系统通常集成在更大的设备中,空间有限,因此需要紧凑的硬件设计和高效的布局。
- 价格:嵌入式系统广泛应用于消费电子和工业产品中,成本控制是关键因素,设计时需在性能和成本之间找到最佳平衡。
嵌入式系统的应用领域,可以说无处不在,举几个比较常见且目前非常火爆的领域:
- 消费电子,主要指智能手机、平板电脑、智能穿戴设备等。这些设备中的嵌入式系统为用户提供了丰富的功能,如多媒体播放、网络浏览、蓝牙通讯、数据监控等。
- 汽车电子,汽车中的电子控制单元(ECU)用于控制发动机、变速器、刹车系统、安全气囊等,比如防抱死制动系统(ABS)。嵌入式系统在汽车中的应用提高了汽车的安全性、舒适性、燃油经济性以及智能性。
- 汽车的辅助驾驶系统(ADAS)、智能驾驶和无人驾驶都是嵌入式系统的典型应用,它们依赖高性能嵌入式处理器、传感器融合和实时计算来实现车辆的智能感知与控制。通过摄像头、雷达、激光雷达等传感器采集环境信息,并由嵌入式AI算法进行决策,从而实现自动加减速、转向、避障等功能,提高驾驶安全性和自动化水平。
- 工业控制与自动化,用于自动化生产线、数控机床、工业机器人等。嵌入式系统能够精确控制设备的运行,提高生产效率和产品质量。
- 智能家居物联网,包括智能门锁、智能灯光系统、智能空调等。嵌入式系统能够实现设备之间的互联互通和智能控制,为用户提供便捷、舒适的家居环境。
- 医疗设备、通信设备、航空航天乃至于无人机、导弹等军事化设施中嵌入式系统也很常见。
一个常见的嵌入式系统,通常包括:
- 嵌入式微控制器 (比如我们要讲的STM32就是一种典型的嵌入式微控制器)
- 外围硬件设备(比如各种传感器)
- 嵌入式操作系统(有些简陋的嵌入式系统不需要操作系统,比如我们在STM32阶段讲的嵌入式系统都是无操作系统的裸机嵌入式系统)
- 嵌入式应用程序(一般是直接烧录到微控制器当中执行的简易应用程序)
为了让大家更好的理解嵌入式这个概念,我们还需要回答一个问题:
既然嵌入式也是一种计算机系统,那么嵌入式系统和通用计算机系统(比如PC)的区别是什么呢?
要回答这个问题我们需要先辨析三个名词:CPU、MPU、MCU
CPU、MCU、MPU
CPU是现代人都非常熟悉的名词了,中央处理器(Central Processing Unit,简称CPU)是计算机系统中负责解释和执行指令的核心组件,由算术逻辑单元(ALU)、控制单元(CU)、寄存器等组件组成,用于执行指令、处理数据和协调系统其他部分的操作。
通俗的说,CPU就是计算机系统的大脑,无论是通用计算机系统(如PC),还是嵌入式系统,都是需要CPU的。
MPU(Microprocessor的简写),翻译成中文就是微处理器。微处理器是一种集成电路(IC),它一般会包含一个或多个CPU核心,还可能集成其它的功能模块,比如:
- 高速缓存模块,以提高数据访问速度和整体性能。(比如Intel三级缓存技术)
- 集成图形图像处理单元,也就是iGPU(Integrated GPU)。(也就是我们常说的集成显卡)
- 一些基础的I/O控制模块。(比如集成USB控制器,以支持USB接口)
- ...
但不管如何集成,MPU的主要功能仍然是执行计算和处理任务,不太专业的说,可以把MPU看成是增强版CPU,一个更强大的大脑。
实际上在生活中,我们常常使用CPU来指代MPU,比如:
熟悉组装台式机的同学都知道,CPU和显卡是组装机器时最重要的两个组件。但实际上,从专业的角度来说,我们买来的"Intel CPU"、"AMD CPU"都是错误的说法,正确的说法是"Intel MPU"、"AMD MPU"。
CPU是微处理器MPU的核心组成部分。
既然CPU和MPU都只是大脑,那么想要真正组成一个计算机系统,就还需要其它组成部分。比如:
- 内存(也就是RAM随机存取存储器以及ROM只读存储器),用于临时存储当前运行的程序和数据
- 硬盘(也就是外存),用于存储操作系统以及用户应用程序以及数据。
- 各种外部设备,比如键盘鼠标显示器等。
但MCU则完全不同于CPU和MPU,MCU是单词Microcontroller的缩写,翻译成微控制器。
微控制器是一种集成了CPU、内存储器(RAM或者ROM)、闪存(Flash)、多种IO接口、定时器、通信接口等多种功能于单一芯片的设备。它设计用于执行特定的控制任务,能够独立运行,不需要大量的外部组件。
可以说,微控制器自身就是一台微型计算机!于是MCU微控制器就有一个非常贴切的外号:单片机,即单一芯片构建成的计算机。
下面总结一下这三个名词的区别:
- CPU中央处理器,它是MCU和MPU的核心组成单元。
- MPU微处理器,由单个或多个CPU核心组成,并集成了一些其他功能模块。但MPU本质上还是CPU,它所集成的功能模块多是为了提升CPU的性能或增加一些额外功能。MPU不能直接组成计算机系统。
- MCU微控制器,在CPU的基础上,集成了计算机系统所需的功能模块,芯片本身就是一台微型计算机系统,即单片机。
举一些应用场景:
- 我们常说的芯片更多指的是MPU,比如PC的Intel Core系列芯片,AMD Ryzen系列,移动端处理器芯片(比如高通骁龙系列、苹果的A系列和M系列芯片)
- 如果不是特别研究过嵌入式,大多数普通人是接触不到微控制器的。我们课程所讲的STM32就是最经典的微控制器之一。
通用计算机系统和嵌入式的区别
通过一张表格来区分它们:
| 通用计算机系统 | 嵌入式系统 | |
|---|---|---|
| 硬件 | 通常由MPU、主板、内存、硬盘等多个硬件组件组成 | 多数就是一个MCU和一些简单有限的外围硬件,部分高性能嵌入式系统也会使用MPU以及各种外围硬件 |
| 操作系统 | 主流选择是:Windows、MacOS、以及Linux | 可能是裸机运行无操作系统,也可能使用简单的实时操作系统。需要高性能和复杂功能时,还可能使用Linux |
| 应用程序 | 存储在硬盘中,可以自由安装和卸载 | 直接集成/固化在芯片当中,用户一般不可以随意修改 |
相信通过这样的对比,你会更加理解嵌入式系统。
什么是嵌入式开发
虽然我们上面说的比较多,但所谓嵌入式系统无非就是**"针对用户需求,选择合适的硬件,编写适当的软件"**。
所以嵌入式开发归根结底可以分为两个主要部分:
- 由嵌入式硬件工程师完成的,嵌入式系统的硬件设计与开发,以确保选择和集成合适的硬件组件满足特定的用户需求和应用场景。
- 基于硬件工程师搭建的特定硬件平台,负责嵌入式系统软件的开发与优化,确保软件能够高效、稳定地运行在硬件平台上,实现预定的功能和性能目标,这就是嵌入式软件工程师需要完成的工作。
下面我们大体来了解一下硬件工程师做什么,软件工程师做什么。
硬件工程师的职责(了解)
主要包括:
- 硬件需求分析,选择合适的硬件。
- 设计印刷电路板(Printed Circuit Board,也就是常说的PCB)
- 制作样板并调试优化
- 编写开发板文档
- 协助软件工程师完成后续工作
- ...
总之,嵌入式硬件工程师的核心职责集中在设计出能够实现特定功能且性能可靠的电子硬件 ,以及配合软件工程师完成后续的软件开发调试工作。
作为软件开发工程师,我们并不需要掌握所有硬件设计细节,只需要熟悉硬件的基本架构、接口和限制,能够阅读硬件相关文档,编写出高效、可靠的软件就可以了。
下面我们来看一下软件工程师的职责。
软件工程师的职责
主要包括:
- 软件需求分析。确定软件的功能,性能要求以及接口规范。
- 软件架构设计,即软件开发大方向上的一些设计。比如制定软件架构,划分模块和功能,决定是否使用实时操作系统亦或者裸机开发等。
- 软件开发,包括驱动程序以及应用程序的开发,初步完成自测。
- 配合硬件工程师,进行软件的调试与测试。
- 进行软件层面的优化工作。
- ...
可以看到作为一名嵌入式软件工程师,其主要的核心工作还是代码的编写工作。只不过在这个过程中,由于需要直接在特定的硬件平台上进行编程且需要和硬件工程师进行开发配合,所以也需要了解一些相应的硬件知识。
这有点像软件开发中的前后端,前后端工程师各司其职,不需要对相互的工作做深入的学习,但大体的了解还是有必要的。
在我们的课程中,我们使用STM32这款微控制器来搭建硬件平台,然后进行编程开发实现功能。其中有关硬件的部分,我们会在授课的时候再慢慢给大家讲解,大家可以更好的关注软件层面的实现。
这种基于单片机,直接进行裸机或者基于简单的实时操作系统进行的开发,我们称之为单片机开发。
上位机和下位机
上位机和下位机是嵌入式开发中特别常见的术语,大家还是有必要了解一下,对后面找工作也很有帮助。
下位机(Lower Computer)
下位机是指在整体系统架构中处于较低层级的计算设备,主要负责具体的控制任务、数据采集和执行指令。它通常与物理设备直接交互,如传感器、执行器等,具备实时性强和稳定性高的特点。
我们上面所说的单片机MCU,其实就是一种典型的下位机。
在单片机开发中,最常使用的编程语言就是C语言,我们后续的课程就是基于C语言编程实现功能。
有时我们会在招聘时看到下位机开发的岗位,它一般指的是基于单片机或其他嵌入式处理器进行硬件控制和数据采集的软件开发工作。
上位机(Upper Computer)
上位机是指在整体系统架构中处于较高层级的计算机设备,主要负责数据的处理、监控、管理和用户交互。上位机通常具备较强的计算能力和丰富的用户接口,能够与下位机进行通信,协调和控制整个系统的运行。
与之相对应的就有上位机软件,它是上位机实现功能的软件系统。
最常见的上位机就是PC,使用Windows或者Linux操作系统,通过专用的上位机软件与下位机完成通信交互功能。
在招聘时,我们可以看到很多公司招收"上位机开发",这其实指的就是开发上位机软件的岗位,一般就是在Windows或Linux系统上开发出一款专用的,控制下位机的软件。
如果你想做上位机开发,需要学习什么呢?
一款好用的上位机软件,首先需要良好的可视化图形界面,而在PC端最常用的制作图形界面的技术就是Qt,一款基于C++的开源图形库。
所以嵌入式开发往往离不开C和C++,下位机开发使用C,上位机开发使用C++。作为一名嵌入式开发者,同时熟悉C/C++是非常有必要的!
当然上位机还有可能是你的智能手机,比如小米的小米运动健康APP,它可以连接你的小米手环,从而获取处理数据,也能对手环进行一些控制操作。
在这个系统架构中,智能手机就是上位机,APP就是上位机软件,而手环则属于下位机,你理解了吗?
当然涉及到智能手机APP的开发,一般都不会叫做下位机开发了,它们会有更常见的称呼,比如负责绘制APP图形界面的前端开发 ,以及相应数据存储处理逻辑的后端开发。