一、嵌入式系统概述
各位同学,咱们今天聊聊嵌入式系统。说实话,这词儿听起来挺高大上,但你每天用的东西里,十个有八个都是它。手机、路由器、智能手表、汽车里的ECU,甚至你家微波炉的触控面板——全是嵌入式系统。
我入行那会儿,带我的老工程师跟我说过一句话,我一直记着:“嵌入式系统就是那些你看不见的计算机。” 你想想看,你的电脑是台通用计算机,能玩游戏、能写文档、能剪视频。但嵌入式系统不一样,它生来就为了干一件事,而且得干得漂亮、干得省电、干得稳定。
什么是嵌入式系统
嵌入式系统,说白了就是以应用为中心,以计算机技术为基础,软硬件可裁剪,对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统。
这个定义有点长,我拆开给你讲:
- 以应用为中心:它不是万能的,专为某个场景设计。比如空调的控制板,你不可能拿它去跑个网页服务器。
- 软硬件可裁剪:不需要的功能统统砍掉。我做过一个传感器节点,为了省成本,连LED指示灯都省了,调试全靠串口打印。
- 严格约束:成本、功耗、体积、实时性,这些是硬指标。消费电子尤其狠,一颗芯片多一毛钱,量产百万级就是十万块的成本差异。
核心理解: 嵌入式系统 = 专用硬件 + 固化软件。硬件围绕特定任务设计,软件通常固化在ROM或Flash里,上电就跑,断电就停。
嵌入式系统的特点
我总结了几个关键特点,都是实际项目中天天打交道的:
| 特点 | 说明 | 我的经验 |
|---|---|---|
| 实时性 | 系统必须在规定时间内响应外部事件 | 做电机控制时,PWM周期偏差超过1微秒,电机就开始抖 |
| 资源受限 | CPU主频低、内存小、存储有限 | 早期做项目,RAM只有4KB,全局变量都得精打细算 |
| 低功耗 | 电池供电场景下,功耗是生命线 | 我曾经为了省0.1mA电流,把MCU的GPIO上拉电阻从10K换成100K |
| 高可靠性 | 无人值守,常年运行,不能死机 | 工业设备要求MTBF(平均无故障时间)超过10万小时 |
| 专用性强 | 软硬件深度耦合,换一个芯片可能整个系统重做 | 移植BSP(板级支持包)是我最头疼的事之一 |
避坑指南: 我曾经接手过一个项目,前任工程师在STM32上跑了个完整的Linux内核,结果系统启动要30秒,功耗还高得离谱。嵌入式系统不是越强越好,够用就行。选型时先算算你到底需要多少算力、多少内存,别盲目上大系统。
嵌入式系统的分类
按复杂度和实时性,我习惯把嵌入式系统分成四类。嗯,这里要注意,分类方式有很多种,但咱们做工程,按这个分法最实用:
- 单微处理器系统:一颗MCU搞定所有。比如遥控器、智能灯泡。资源极少,通常跑裸机或RTOS。
- 多处理器系统:多个MCU或MPU协同工作。比如高端路由器,一个负责网络协议,一个负责数据转发。
- 实时嵌入式系统:对时间要求极其严格。比如安全气囊控制器,碰撞信号到气囊弹出必须在毫秒级完成。
- 非实时嵌入式系统:对响应时间要求不高。比如智能冰箱的触控屏,你按一下按钮,屏幕晚半秒亮也没关系。
我个人习惯把“能不能跑Linux”作为分水岭。能跑Linux的,算高端嵌入式系统;跑不了或者没必要跑的,算低端嵌入式系统。这个分法虽然粗暴,但面试时很好用。
嵌入式系统的应用领域
嵌入式系统几乎无处不在。我随便列几个领域,你看看你接触过哪些:
- 消费电子:手机、平板、智能手表、游戏机、数码相机。这个领域更新换代最快,我当年做MP4播放器,产品周期只有6个月。
- 工业控制:PLC、变频器、工业机器人、数控机床。特点是要求稳定、抗干扰、能工作10年以上。
- 汽车电子:发动机ECU、ABS、车载娱乐系统、ADAS。汽车级芯片要求-40°C到125°C的工作温度,消费级芯片根本扛不住。
- 医疗设备:心电图机、血糖仪、CT机、输液泵。人命关天,软件必须通过严格的医疗认证。
- 航空航天:飞行控制系统、卫星通信、导航设备。这个领域我接触不多,但知道要求极高,代码容错率几乎为零。
- 物联网:智能家居传感器、环境监测节点、智能电表。特点是数量大、功耗低、需要无线通信。
个人建议: 如果你刚入门嵌入式,我建议从消费电子或物联网领域入手。门槛相对低,开发板便宜,社区资源多。先跑个LED闪烁,再点亮一块屏幕,慢慢你就找到感觉了。
嵌入式系统的知识体系
下面这张图是我自己整理的嵌入式系统知识体系框架。你看一眼,就知道咱们这门课要讲什么了:
你看,从最底层的硬件启动,到硬件抽象层、软件层,再到应用层,每一层都有它的职责。咱们这门课,就是从最底层的复位向量开始,一步步往上走,直到操作系统跑起来、应用程序开始干活。
我刚开始学嵌入式的时候,最困惑的就是“上电之后到底发生了什么”。芯片怎么知道自己该从哪里开始执行?代码是怎么从Flash搬到内存里的?中断来了CPU怎么知道该跳到哪里去?这些问题,咱们后面都会一个一个解开。