一、嵌入式系统概述

各位同学,咱们今天聊聊嵌入式系统。说实话,这词儿听起来挺高大上,但你每天用的东西里,十个有八个都是它。手机、路由器、智能手表、汽车里的ECU,甚至你家微波炉的触控面板——全是嵌入式系统。

我入行那会儿,带我的老工程师跟我说过一句话,我一直记着:“嵌入式系统就是那些你看不见的计算机。” 你想想看,你的电脑是台通用计算机,能玩游戏、能写文档、能剪视频。但嵌入式系统不一样,它生来就为了干一件事,而且得干得漂亮、干得省电、干得稳定。

什么是嵌入式系统

嵌入式系统,说白了就是以应用为中心,以计算机技术为基础,软硬件可裁剪,对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统。

这个定义有点长,我拆开给你讲:

  • 以应用为中心:它不是万能的,专为某个场景设计。比如空调的控制板,你不可能拿它去跑个网页服务器。
  • 软硬件可裁剪:不需要的功能统统砍掉。我做过一个传感器节点,为了省成本,连LED指示灯都省了,调试全靠串口打印。
  • 严格约束:成本、功耗、体积、实时性,这些是硬指标。消费电子尤其狠,一颗芯片多一毛钱,量产百万级就是十万块的成本差异。

核心理解: 嵌入式系统 = 专用硬件 + 固化软件。硬件围绕特定任务设计,软件通常固化在ROM或Flash里,上电就跑,断电就停。

嵌入式系统的特点

我总结了几个关键特点,都是实际项目中天天打交道的:

特点 说明 我的经验
实时性 系统必须在规定时间内响应外部事件 做电机控制时,PWM周期偏差超过1微秒,电机就开始抖
资源受限 CPU主频低、内存小、存储有限 早期做项目,RAM只有4KB,全局变量都得精打细算
低功耗 电池供电场景下,功耗是生命线 我曾经为了省0.1mA电流,把MCU的GPIO上拉电阻从10K换成100K
高可靠性 无人值守,常年运行,不能死机 工业设备要求MTBF(平均无故障时间)超过10万小时
专用性强 软硬件深度耦合,换一个芯片可能整个系统重做 移植BSP(板级支持包)是我最头疼的事之一

避坑指南: 我曾经接手过一个项目,前任工程师在STM32上跑了个完整的Linux内核,结果系统启动要30秒,功耗还高得离谱。嵌入式系统不是越强越好,够用就行。选型时先算算你到底需要多少算力、多少内存,别盲目上大系统。

嵌入式系统的分类

按复杂度和实时性,我习惯把嵌入式系统分成四类。嗯,这里要注意,分类方式有很多种,但咱们做工程,按这个分法最实用:

  1. 单微处理器系统:一颗MCU搞定所有。比如遥控器、智能灯泡。资源极少,通常跑裸机或RTOS。
  2. 多处理器系统:多个MCU或MPU协同工作。比如高端路由器,一个负责网络协议,一个负责数据转发。
  3. 实时嵌入式系统:对时间要求极其严格。比如安全气囊控制器,碰撞信号到气囊弹出必须在毫秒级完成。
  4. 非实时嵌入式系统:对响应时间要求不高。比如智能冰箱的触控屏,你按一下按钮,屏幕晚半秒亮也没关系。

我个人习惯把“能不能跑Linux”作为分水岭。能跑Linux的,算高端嵌入式系统;跑不了或者没必要跑的,算低端嵌入式系统。这个分法虽然粗暴,但面试时很好用。

嵌入式系统的应用领域

嵌入式系统几乎无处不在。我随便列几个领域,你看看你接触过哪些:

  • 消费电子:手机、平板、智能手表、游戏机、数码相机。这个领域更新换代最快,我当年做MP4播放器,产品周期只有6个月。
  • 工业控制:PLC、变频器、工业机器人、数控机床。特点是要求稳定、抗干扰、能工作10年以上。
  • 汽车电子:发动机ECU、ABS、车载娱乐系统、ADAS。汽车级芯片要求-40°C到125°C的工作温度,消费级芯片根本扛不住。
  • 医疗设备:心电图机、血糖仪、CT机、输液泵。人命关天,软件必须通过严格的医疗认证。
  • 航空航天:飞行控制系统、卫星通信、导航设备。这个领域我接触不多,但知道要求极高,代码容错率几乎为零。
  • 物联网:智能家居传感器、环境监测节点、智能电表。特点是数量大、功耗低、需要无线通信。

个人建议: 如果你刚入门嵌入式,我建议从消费电子或物联网领域入手。门槛相对低,开发板便宜,社区资源多。先跑个LED闪烁,再点亮一块屏幕,慢慢你就找到感觉了。

嵌入式系统的知识体系

下面这张图是我自己整理的嵌入式系统知识体系框架。你看一眼,就知道咱们这门课要讲什么了:

嵌入式系统知识体系框架 应用层(用户程序、协议栈) 软件层(RTOS/Linux、驱动、中间件) 硬件抽象层(BSP、HAL、寄存器映射) 硬件层(MCU/MPU、存储器、外设、总线) 启动流程(复位→引导→加载→运行) 本课程从底层向上逐层深入,重点讲解启动流程中的每个环节

你看,从最底层的硬件启动,到硬件抽象层、软件层,再到应用层,每一层都有它的职责。咱们这门课,就是从最底层的复位向量开始,一步步往上走,直到操作系统跑起来、应用程序开始干活。

我刚开始学嵌入式的时候,最困惑的就是“上电之后到底发生了什么”。芯片怎么知道自己该从哪里开始执行?代码是怎么从Flash搬到内存里的?中断来了CPU怎么知道该跳到哪里去?这些问题,咱们后面都会一个一个解开。