2、嵌入式平台基础:嵌入式系统定义与特点、实时操作系统(RTOS)概念、MCU与MPU的区别
好,咱们正式开始聊嵌入式平台。这一节是地基,地基打不牢,后面选型、评估全是空中楼阁。我见过不少工程师,上来就盯着芯片主频看,结果项目做到一半发现实时性根本满足不了——说白了,就是没搞懂嵌入式系统到底是个什么东西。
2.1 嵌入式系统定义与特点
嵌入式系统,我的理解很简单:它是“嵌入”到某个设备里,专门干一件事的计算机系统。你想想看,你手机里的摄像头、家里的智能电饭煲、车上的ABS控制器,里面都藏着一个小电脑。但它不像你桌上的PC,能装Windows打游戏。它只干一件事,而且必须干好。
嵌入式系统有几个核心特点,我挑重要的说:
- 资源受限:内存小、存储小、CPU主频低。我早期做项目,一个芯片RAM才64KB,代码得抠着写,一个全局变量都得算半天。
- 实时性要求高:很多任务必须在规定时间内完成。比如安全气囊的触发,晚了10毫秒,人就没了。这不是开玩笑。
- 可靠性要求极高:系统不能随便死机,不能蓝屏。车在路上跑着,中控屏卡了还能忍,刹车系统卡了怎么办?
- 功耗敏感:尤其是电池供电的设备,比如T-Box、传感器节点。功耗高了,续航就短,用户体验就差了。
- 专用性强:硬件和软件通常是深度耦合的。换一个型号的传感器,可能整个驱动层都得重写。
我个人习惯:在项目初期,先列一个“资源预算表”。把CPU占用率、内存占用、中断响应时间都预估出来。别等到代码写完了才发现跑不动,那时候改架构就太痛苦了。
2.2 实时操作系统(RTOS)概念
说到嵌入式,就绕不开RTOS。很多人觉得RTOS就是“快”,其实不准确。RTOS的核心是“确定性”——它保证每个任务在给定的时间内一定能得到响应。
举个例子:你写一个裸机程序,用一个大循环轮询各种事件。如果某个事件处理时间长了,后面的任务就得等着。这在自动驾驶里是致命的。RTOS通过任务调度、中断管理、信号量这些机制,把时间切成了可控的片。
RTOS的几个关键概念,我建议你记牢:
- 任务(Task):每个功能模块就是一个任务。比如“采集激光雷达数据”是一个任务,“处理图像”是另一个任务。
- 调度器(Scheduler):决定哪个任务先跑。常见的有优先级抢占式调度——高优先级的任务来了,低优先级的立刻让路。
- 中断(Interrupt):硬件触发的紧急事件。比如CAN总线来了一个报文,中断服务程序立刻响应。
- 同步与通信:任务之间怎么传数据?用队列、信号量、互斥锁。我踩过一个坑:两个任务同时访问一个全局变量,结果数据被覆盖了,定位了三天才发现是没加锁。
避坑指南:我曾经在一个项目中,把中断服务程序写得特别长,在里面做了大量数据处理。结果导致低优先级的中断一直得不到响应,整个系统卡死。记住:中断里只做最紧急的事,比如拷贝数据、置标志位,复杂的处理交给任务去做。
常见的RTOS有哪些?FreeRTOS、RT-Thread、VxWorks、QNX。自动驾驶领域,QNX用得比较多,因为它通过了功能安全认证。但FreeRTOS胜在免费、轻量,很多MCU项目都在用。
2.3 MCU与MPU的区别
这个问题,我面试时几乎必问。很多人答不上来,或者答得模棱两可。其实区分它们很简单:
| 对比项 | MCU(微控制器) | MPU(微处理器) |
|---|---|---|
| 核心架构 | CPU + RAM + Flash 集成在单芯片 | 只有CPU,需要外接DDR、Flash |
| 典型代表 | STM32、Infineon TC3xx、NXP S32K | ARM Cortex-A系列、Intel x86 |
| 操作系统 | 裸机或轻量级RTOS | Linux、QNX、Android |
| 实时性 | 强(硬件中断响应快) | 弱(受操作系统调度影响) |
| 功耗 | 低(毫瓦级) | 高(瓦级) |
| 应用场景 | 传感器采集、电机控制、车身控制 | 自动驾驶域控、中控娱乐、视觉处理 |
说白了,MCU是“单片机”,适合做控制;MPU是“通用处理器”,适合做计算。在自动驾驶里,你经常能看到这样的组合:MCU负责安全相关的控制(比如刹车、转向),MPU负责感知和决策(比如摄像头图像处理、路径规划)。
为什么会这样?因为MCU的实时性好,中断响应延迟可以做到微秒级。而MPU跑Linux,一个进程调度可能就要几毫秒。但MPU算力强,能跑复杂的算法。所以两者各司其职,互相配合。
注意:选型时别只看主频。我见过有人用1GHz的MPU去做一个简单的PWM控制,结果功耗高、成本高,还因为Linux启动太慢被客户投诉。反过来,也有人用MCU去跑神经网络推理,结果内存不够,算力也不够。记住:合适的才是最好的。
嗯,这一节的内容就这些。嵌入式系统、RTOS、MCU与MPU的区别,都是后面选型的基础。你把这些搞清楚了,后面讲“如何评估一个平台是否适合自动驾驶”时,你就能听懂我在说什么了。