Skip to content

嵌入式

这是啥?

嵌入式系统(英语:Embedded system),是一种嵌入机械或电气系统内部、具有专一功能和实时计算性能的计算机系统。嵌入式系统常被用于高效控制许多常见设备,被嵌入的系统通常是包含数字硬件和机械部件的完整设备。

这是维基百科对嵌入式系统的定义。换句话说,嵌入式系统是高度定制化且任务单一的计算机系统。

举个栗子,现在我们正在使用的电脑和手机,此处统称为 “通用计算机”。它没有固定的单一任务,你可以用它做 WPS、打游戏、刷视频、敲代码,随时安装或卸载各种软件。但嵌入式系统被设计出来,就是为了“嵌入”到某个特定产品内部,只干指定的几项任务。

因此,嵌入式系统的硬件和软件都是高度定制且固定好的。绝大多数情况下,嵌入式系统需要完成的任务对计算要求并不高,所以对于硬件性能,通常只要求够用即可。 功耗低、体积小、成本便宜就是嵌入式系统常见的特点。

为了让各位能够更直观地感受,我们做个简单的对比:

(以下表格为 AI 生成)

特性通用计算机嵌入式系统
用途各种任务,生产力或娱乐专用(只干一两件事)
操作系统Windows, macOS, LinuxLinux, FreeRTOS, 或者根本没有系统(裸机)
用户界面必须有屏幕、键盘、鼠标很多没有屏幕,或者只有几个 LED 灯和小按钮
硬件资源CPU、GPU 性能相对很高,内存和硬盘很大(如 32GB+1TB)内存极小(可能最小只有几 KB),部分处理器性能无法运行完整的操作系统,但功耗也极低(很多运行时连 0.5W 都不到)

在我们的日常生活中,存在许多需要计算、但又不至于使用一台完整的计算机系统的场景,比如电子手表、蓝牙耳机、智能门锁,等等,这就是嵌入式系统工作的地方。

关于开发

比起前后端开发,嵌入式系统的开发主要集中在软硬件交互这类更底层的场景,所以我们需要对 C 或 C++ 这类较常用于计算机系统底层开发的语言比较熟悉。

TIP

迅哥儿说过, 嵌入式是一不小心就会烧很多钱的爱好。从几块的接线,几十块的外设板,到几百块的开发板,都是需要我们自行购买的。同时,由于 C 语言生态的问题,很多开发资料都是以压缩包等碎片化的形式呈现。

如果你认为以上的情况你都能接受,且拥有一定的 C 和 C++ 基础,我们为各位提供以下 3 种路线:

STM32

STM32 是意法半导体公司推出的一系列 32 位微控制器(MCU/单片机)的统称,其核心是 ARM Cortex-M 内核。它把 CPU、内存、闪存和各种外设接口,全部集成在了一颗微小的芯片上。对于嵌入式领域,STM32 性能适中、价格便宜,且周边生态极其丰富,所以是很热门的选择之一。

Linux

当系统需要处理复杂的图形界面、进行大量的数据网络传输,甚至运行一些 AI 算法时,STM32 的性能就不够用了。这时就需要使用更高性能的微处理器,并在上面运行 Linux 或基于它的 Android 系统。但这对硬件要求响应也会更高,处理器主频通常在 1GHz 以上,一般也会分出独立的内存和闪存芯片。


作为新手,我们建议各位从 STM32 系列开始入门,获得一定成效后再决定是继续深入学习 STM32,或者转到其它的方向。

在此之外,还有 51 单片机、ESP32、FPGA 等常见的嵌入式系统没有提到。因为笔者精力有限,只能做到 STM32 和 Linux 相关内容,前两个在今天比较老旧了,而后者笔者也没有计划接触 FPGA,所以不会编写其教学内容,希望海涵。