与嵌入式相对应的就是非嵌入式,非嵌入式设备(通用计算机):是为各种不同任务设计的“全能选手”,其存在价值就是运行用户安装的各类应用软件。例如:个人电脑、服务器。
嵌入式设备:是作为更大系统一部分的“专职人员”,其硬件和软件专门为完成特定功能而设计。例如:路由器、智能手表、汽车ABS系统。
为了更好地理解,将二者结合起来进行说明:
1. 专用性 vs. 通用性
这是最根本的区别。
嵌入式设备 生来就有一个“使命”。你不会在汽车的发动机控制器上运行Word或玩游戏,它的唯一使命就是根据传感器数据精确控制喷油和点火。这种“专用性”决定了它在硬件和软件上的所有设计选择。
非嵌入式设备 是一个“空盒子”,它的价值在于用户往里面装什么软件。你可以用同一台笔记本电脑写文档、编程、看电影、玩游戏。
2. 资源限制
嵌入式系统的设计哲学是在满足功能需求的前提下,使用尽可能少的资源(CPU性能、内存、存储)。
为什么? 为了降低成本(每台设备节省1美元,百万量级就是巨额利润)、减小体积和降低功耗。
这导致了嵌入式开发中常见的优化技巧,比如用位运算代替算术运算、精心管理内存以避免动态分配等。
3. 实时性
这是嵌入式系统一个极其重要的概念。
硬实时:超过规定时限的响应就是系统失败,可能导致灾难性后果。例如:安全气囊必须在碰撞后的几毫秒内打开,否则就失去了意义。
软实时:偶尔超过时限是可以接受的,只会导致性能下降或用户体验变差。例如:智能电视解码视频时偶尔卡顿一下。
通用计算机系统(如你的PC)通常是非实时的,因为你无法预测一个点击后系统需要多久才会响应——它可能正在后台进行病毒扫描或系统更新。
4. 交叉编译
由于嵌入式设备本身资源有限,无法在其上运行庞大的编译器、开发环境等工具。因此,开发者在性能强大的PC(主机)上编写代码,使用一种称为“交叉编译器”的特殊工具,将代码编译成能在目标嵌入式设备(目标机,通常是ARM、RISC-V等架构)上运行的二进制文件,然后再通过线缆或网络下载到嵌入式设备中运行。
边界模糊的例子
随着技术发展,两者的界限有时会变得模糊:
智能手机/平板:它们本质上是功能强大的嵌入式设备(专用通信和移动计算),但用户体验上越来越像通用计算机。
树莓派(Raspberry Pi):它被设计成一个廉价的、卡片大小的通用计算机。但人们经常把它作为嵌入式系统开发板,用来控制电机、传感器,制作机器人等。在这种情况下,树莓派及其上运行的程序共同构成了一个更大嵌入式系统的核心。