第2章:嵌入式系统概述:MCU与MPU的区别,RTOS与裸机系统的选择,典型嵌入式架构分析
2.1 MCU与MPU:两个世界,两种思维
很多新手问我,MCU和MPU到底差在哪?
我一般会打个比方:MCU就像一辆自行车,MPU像一辆汽车。自行车简单、省油、够用就行。汽车复杂、耗油、但能跑高速。你想想看,去楼下买个菜,骑自行车就够了。要上高速跑长途,那必须得开车。
从技术角度说,MCU(微控制器)把CPU、内存、外设都集成在一个芯片里。我做过一个智能插座项目,用的就是STM32F103,一颗芯片搞定所有事。MPU(微处理器)则不同,它只是个处理器核心,你得自己配DDR、Flash、各种控制器。
核心区别一览:
| 维度 | MCU | MPU |
|---|---|---|
| 集成度 | 高,片上集成RAM/Flash | 低,需外接内存和存储 |
| 功耗 | 毫瓦级,可电池供电 | 瓦级,通常需要散热 |
| 实时性 | 硬实时,中断响应快 | 软实时,受OS调度影响 |
| 成本 | 几元到几十元 | 几十到几百元 |
| 典型应用 | 传感器、电机控制、家电 | 路由器、工控机、智能终端 |
我遇到过最典型的选型翻车案例:有人用树莓派(MPU)去做一个温湿度采集器。结果发现功耗太大,电池撑不过半天。其实用个ESP32(MCU),成本十分之一,功耗百分之一,完全够用。
我的选型建议:
- 任务单一、实时要求高 → 选MCU
- 需要跑Linux、多任务、图形界面 → 选MPU
- 拿不准时,先看功耗预算和成本预算
2.2 RTOS vs 裸机:什么时候该上系统?
裸机系统,说白了就是一个大循环。我最早做51单片机时,就是while(1)里轮询所有任务。简单、直接、没有学习成本。
但问题来了。当你需要同时处理按键、显示、通信、传感器时,裸机就变得很痛苦。我记得有个项目,客户要求按键响应时间不超过10ms,同时还要处理串口数据。裸机里我用了定时器中断+状态机,代码写得跟意大利面条似的。
RTOS(实时操作系统)就是来解决这个问题的。它帮你管理任务调度、资源同步、时间管理。
什么时候该上RTOS?
- 任务数超过3个,且需要并发执行
- 有严格的时间约束(比如10ms内必须响应)
- 需要任务间通信(队列、信号量、邮箱)
- 代码复杂度高,需要模块化
我个人习惯是:如果项目代码量超过5000行,或者任务数超过5个,直接上RTOS。别犹豫,后期维护成本会低很多。
避坑指南:我曾经在一个低功耗项目里用了FreeRTOS,结果发现空闲钩子里的休眠逻辑写错了,导致功耗比裸机高了3倍。RTOS不是万能药,它本身也有开销。任务切换、中断延迟、内存占用,这些都要算进去。
常见的RTOS选择:
- FreeRTOS:开源、轻量、资料多。我90%的项目都用它。
- RT-Thread:国产精品,组件丰富,适合IoT。
- uC/OS:商业级,稳定,但需要授权。
- Zephyr:Linux基金会维护,支持蓝牙、WiFi协议栈。
2.3 典型嵌入式架构分析
嵌入式系统架构,说白了就是「硬件怎么搭、软件怎么跑」。我把它分成三类:
2.3.1 单芯片架构(SoC)
这是最常见的。一颗MCU搞定所有。比如智能手环,用Nordic nRF52840,集成了蓝牙、ADC、GPIO、Flash。软件上跑个FreeRTOS,任务包括:心率采集、显示刷新、蓝牙通信、按键检测。
// 典型任务划分示例
void task_heart_rate(void *param) {
while(1) {
read_ppg_sensor();
calculate_bpm();
vTaskDelay(pdMS_TO_TICKS(100)); // 10Hz采样
}
}
void task_display(void *param) {
while(1) {
update_oled();
vTaskDelay(pdMS_TO_TICKS(50)); // 20Hz刷新
}
}
void task_ble(void *param) {
while(1) {
ble_stack_process();
vTaskDelay(pdMS_TO_TICKS(10));
}
}
2.3.2 双芯片架构(MCU+MPU)
我做过一个工业网关项目,就是这种架构。MCU负责实时控制(采集传感器、控制继电器),MPU负责上层应用(数据上传、Web界面、日志存储)。
为什么这么分?因为MCU实时性好,但算力弱。MPU算力强,但实时性差。各取所长。
通信方式:MCU和MPU之间一般用SPI或UART。我习惯用自定义协议,帧头+长度+命令+数据+校验。简单可靠。
2.3.3 分布式架构(多节点)
大型系统,比如智能工厂,会有几十个节点。每个节点是一个MCU,通过CAN总线或RS485连接。中央控制器(通常是MPU或工控机)负责汇总数据、下发指令。
这种架构的难点在于:同步、冲突、容错。我踩过一个坑:CAN总线上的两个节点同时发送高优先级报文,导致总线仲裁失败。后来加了随机退避时间才解决。
架构选型总结:
| 场景 | 推荐架构 | 理由 |
|---|---|---|
| 智能家居单品 | 单芯片MCU | 成本低、开发快 |
| 工业网关 | MCU+MPU | 实时+算力兼顾 |
| 工厂自动化 | 分布式多节点 | 可靠性高、可扩展 |
嗯,这一章的内容就这些。记住一句话:没有最好的架构,只有最合适的。下次你拿到一个项目需求,先别急着画原理图,花半天时间想清楚:用MCU还是MPU?上不上RTOS?架构怎么搭?这半天时间,能帮你省下后面几个月的返工时间。