嵌入式
这是啥?
嵌入式系统(英语:Embedded system),是一种嵌入机械或电气系统内部、具有专一功能和实时计算性能的计算机系统。嵌入式系统常被用于高效控制许多常见设备,被嵌入的系统通常是包含数字硬件和机械部件的完整设备。
这是维基百科对嵌入式系统的定义。换句话说,嵌入式系统是高度定制化且任务单一的计算机系统。
举个栗子,现在我们正在使用的电脑和手机,此处统称为 “通用计算机”。它没有固定的单一任务,你可以用它做 WPS、打游戏、刷视频、敲代码,随时安装或卸载各种软件。但嵌入式系统被设计出来,就是为了“嵌入”到某个特定产品内部,只干指定的几项任务。
因此,嵌入式系统的硬件和软件都是高度定制且固定好的。绝大多数情况下,嵌入式系统需要完成的任务对计算要求并不高,所以对于硬件性能,通常只要求够用即可。 功耗低、体积小、成本便宜就是嵌入式系统常见的特点。
为了让各位能够更直观地感受,我们做个简单的对比:
(以下表格为 AI 生成)
| 特性 | 通用计算机 | 嵌入式系统 |
|---|---|---|
| 用途 | 各种任务,生产力或娱乐 | 专用(只干一两件事) |
| 操作系统 | Windows, macOS, Linux | Linux, 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,所以不会编写其教学内容,希望海涵。