286 lines
9.5 KiB
Markdown
286 lines
9.5 KiB
Markdown
|
|
---
|
|||
|
|
tags: [嵌入式系统, 复习, 开发环境, 前沿技术]
|
|||
|
|
create time: 2026-06-10 11:11
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 嵌入式系统开发与前沿趋势
|
|||
|
|
|
|||
|
|
## 概述
|
|||
|
|
本文档涵盖嵌入式系统的开发环境与流程、BootLoader、GPIO配置、存储技术、RISC-V架构、国产替代分析,以及AI+嵌入式、TinyML、5G+IoT等前沿技术趋势。既覆盖传统开发基础,也关注行业发展方向。
|
|||
|
|
|
|||
|
|
## 正文
|
|||
|
|
|
|||
|
|
### 1. 交叉开发环境
|
|||
|
|
|
|||
|
|
嵌入式开发与普通PC开发的最大区别在于:**开发在宿主机上进行,运行在目标板上**。这种开发方式称为交叉开发。
|
|||
|
|
|
|||
|
|
```mermaid
|
|||
|
|
graph LR
|
|||
|
|
subgraph devEnv["Cross-Development Environment"]
|
|||
|
|
direction TB
|
|||
|
|
subgraph hw["Hardware"]
|
|||
|
|
HB["Host PC"]
|
|||
|
|
JTAG["JTAG Debugger"]
|
|||
|
|
TB["Target Board"]
|
|||
|
|
end
|
|||
|
|
subgraph sw["Software"]
|
|||
|
|
TC["Cross-Compiler Toolchain"]
|
|||
|
|
IDE["IDE (Keil/IAR)"]
|
|||
|
|
DBG["Debugger"]
|
|||
|
|
RTOS["OS / RTOS"]
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
HB --> |"Compile Code"| TC
|
|||
|
|
TC --> |"Generate Binary"| TB
|
|||
|
|
JTAG --> |"Debug & Flash"| TB
|
|||
|
|
IDE --> TC
|
|||
|
|
IDE --> DBG
|
|||
|
|
|
|||
|
|
style HB fill:#90caf9
|
|||
|
|
style JTAG fill:#ffcc80
|
|||
|
|
style TB fill:#a5d6a7
|
|||
|
|
style TC fill:#ce93d8
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 硬件部分
|
|||
|
|
|
|||
|
|
| 组件 | 作用 |
|
|||
|
|
|------|------|
|
|||
|
|
| **目标板(Target Board)** | 运行最终程序的嵌入式硬件 |
|
|||
|
|
| **JTAG调试器** | 连接宿主机和目标板,用于烧写和在线调试 |
|
|||
|
|
| **宿主机(Host PC)** | 运行开发工具的PC(Windows/Linux) |
|
|||
|
|
|
|||
|
|
#### 软件部分
|
|||
|
|
|
|||
|
|
| 组件 | 作用 |
|
|||
|
|
|------|------|
|
|||
|
|
| **交叉编译工具链** | 在宿主机上编译出目标板可执行的代码(如arm-none-linux-gnueabi-gcc) |
|
|||
|
|
| **IDE** | 集成开发环境(Keil MDK, IAR, Eclipse) |
|
|||
|
|
| **调试器** | GDB + OpenOCD等远程调试工具 |
|
|||
|
|
| **OS/RTOS** | 目标板上运行的操作系统 |
|
|||
|
|
|
|||
|
|
> [!question] 什么是"交叉编译"?
|
|||
|
|
> 交叉编译是指在一个平台上(如x86 PC)编译出另一个平台(如ARM)可执行的代码。因为宿主机和目标板的CPU架构不同,普通编译器生成的代码无法直接在目标板上运行。
|
|||
|
|
|
|||
|
|
### 2. 开发流程
|
|||
|
|
|
|||
|
|
嵌入式系统的典型开发流程:
|
|||
|
|
|
|||
|
|
```mermaid
|
|||
|
|
flowchart TD
|
|||
|
|
A["Write Source Code"] --> B["Cross-Compile"]
|
|||
|
|
B --> C["Generate Binary File"]
|
|||
|
|
C --> D["Flash to Target Board"]
|
|||
|
|
D --> E["Debug & Test"]
|
|||
|
|
E --> F{"Pass?"}
|
|||
|
|
F --> |"No"| A
|
|||
|
|
F --> |"Yes"| G["Deployment"]
|
|||
|
|
|
|||
|
|
style A fill:#4fc3f7
|
|||
|
|
style B fill:#81d4fa
|
|||
|
|
style C fill:#b3e5fc
|
|||
|
|
style D fill:#ffcc80
|
|||
|
|
style E fill:#ffab91
|
|||
|
|
style G fill:#a5d6a7
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
关键步骤说明:
|
|||
|
|
1. **编写代码**:C/C++/汇编,在宿主机上编写
|
|||
|
|
2. **交叉编译**:使用交叉编译器生成目标平台的二进制文件
|
|||
|
|
3. **烧写(Flash)**:通过JTAG/串口/USB将程序写入目标板Flash
|
|||
|
|
4. **调试**:使用GDB远程调试,设置断点、单步执行
|
|||
|
|
5. **验证**:功能测试、性能测试、稳定性测试
|
|||
|
|
|
|||
|
|
### 3. BootLoader
|
|||
|
|
|
|||
|
|
**BootLoader**是嵌入式系统上电后**第一个执行**的程序,负责初始化硬件并加载操作系统。
|
|||
|
|
|
|||
|
|
启动流程:
|
|||
|
|
1. **上电复位** → CPU从固定地址(通常是0x00000000)开始执行
|
|||
|
|
2. **硬件初始化** → 设置时钟、初始化DRAM、配置外设
|
|||
|
|
3. **加载内核** → 从Flash读取OS内核到RAM
|
|||
|
|
4. **跳转执行** → 将控制权交给操作系统内核
|
|||
|
|
|
|||
|
|
常见的BootLoader:
|
|||
|
|
- **U-Boot**:开源,支持多种架构,最广泛使用
|
|||
|
|
- **GRUB**:主要用于x86 Linux系统
|
|||
|
|
- **Blob**:早期ARM Linux使用的BootLoader
|
|||
|
|
|
|||
|
|
> [!warning] BootLoader不是操作系统
|
|||
|
|
> BootLoader的功能非常有限,它的唯一使命是把操作系统"拉起来"。一旦OS开始运行,BootLoader就完成了历史使命。
|
|||
|
|
|
|||
|
|
### 4. GPIO可配置属性
|
|||
|
|
|
|||
|
|
GPIO(General Purpose Input/Output)是嵌入式系统中最基本的外设接口。每个GPIO引脚通常可以配置以下属性:
|
|||
|
|
|
|||
|
|
| 属性 | 说明 |
|
|||
|
|
|------|------|
|
|||
|
|
| **速度(Speed)** | 2MHz / 25MHz / 50MHz / 100MHz |
|
|||
|
|
| **方向(Direction)** | 输入 / 输出 |
|
|||
|
|
| **外设选择(AF)** | 通用GPIO / 特殊功能(如UART、SPI) |
|
|||
|
|
|
|||
|
|
以STM32为例,一个GPIO引脚可以配置为:
|
|||
|
|
- 输入模式:上拉、下拉、浮空
|
|||
|
|
- 输出模式:推挽输出、开漏输出
|
|||
|
|
- 复用功能:UART_TX, SPI_MOSI, I2C_SCL等
|
|||
|
|
|
|||
|
|
### 5. SRAM vs DRAM
|
|||
|
|
|
|||
|
|
存储技术是嵌入式系统的关键:
|
|||
|
|
|
|||
|
|
| 比较维度 | SRAM | DRAM |
|
|||
|
|
|----------|------|------|
|
|||
|
|
| 结构 | 6个晶体管/cell | 1个晶体管 + 1个电容/cell |
|
|||
|
|
| 速度 | **快**(1-10ns) | 较慢(50-70ns) |
|
|||
|
|
| 成本 | **贵** | 便宜 |
|
|||
|
|
| 密度 | 低(面积大) | **高**(面积小) |
|
|||
|
|
| 功耗 | 低 | 需要刷新,功耗较高 |
|
|||
|
|
| 用途 | Cache、嵌入式MCU内部RAM | 主存、大容量存储 |
|
|||
|
|
|
|||
|
|
> [!question] 为什么嵌入式MCU通常使用SRAM而不是DRAM?
|
|||
|
|
> MCU对成本和功耗敏感,且所需RAM容量通常较小(几KB到几百KB)。SRAM不需要刷新电路,集成在芯片内部更简单,且读写速度更快,非常适合MCU的应用场景。
|
|||
|
|
|
|||
|
|
### 6. RISC-V架构
|
|||
|
|
|
|||
|
|
RISC-V是一个**开源的指令集架构(ISA)**,近年来在嵌入式领域受到广泛关注。
|
|||
|
|
|
|||
|
|
核心特点:
|
|||
|
|
- **开源免费**:任何人都可以自由使用、修改和实现
|
|||
|
|
- **模块化设计**:基础指令集 + 可选扩展
|
|||
|
|
- RV32I:32位基础整数指令集
|
|||
|
|
- RV64I:64位基础整数指令集
|
|||
|
|
- M扩展:乘除法
|
|||
|
|
- A扩展:原子操作
|
|||
|
|
- F/D扩展:单/双精度浮点
|
|||
|
|
- C扩展:压缩指令(16位)
|
|||
|
|
|
|||
|
|
### 7. RISC-V vs ARM 国产替代
|
|||
|
|
|
|||
|
|
在国产化替代的大背景下,RISC-V被视为打破ARM垄断的重要路径:
|
|||
|
|
|
|||
|
|
| 比较维度 | RISC-V | ARM |
|
|||
|
|
|----------|--------|-----|
|
|||
|
|
| 授权费用 | **免费** | 需要授权费 |
|
|||
|
|
| 生态成熟度 | **不成熟** | 非常成熟 |
|
|||
|
|
| 软件兼容性 | 需要适配 | 广泛支持 |
|
|||
|
|
| 人才储备 | **不足** | 丰富 |
|
|||
|
|
| 自主可控 | **完全自主** | 受制于ARM公司 |
|
|||
|
|
| 政策支持 | 国家重点扶持 | 已广泛使用 |
|
|||
|
|
| 芯片厂商 | 芯来科技、平头哥 | 高通、三星、ST |
|
|||
|
|
|
|||
|
|
> [!tip] 国产替代的现实挑战
|
|||
|
|
> RISC-V虽然在架构层面实现了自主可控,但生态建设需要时间。编译器、操作系统、驱动、开发工具等软件生态的完善是最大的挑战。短期内ARM仍然是主流选择。
|
|||
|
|
|
|||
|
|
### 8. AI + 嵌入式
|
|||
|
|
|
|||
|
|
AI与嵌入式系统的融合是当前最热门的方向之一。典型的AI嵌入式系统架构:
|
|||
|
|
|
|||
|
|
```mermaid
|
|||
|
|
graph TD
|
|||
|
|
subgraph sensorLayer["Sensor Layer"]
|
|||
|
|
DHT11["DHT11 Temp/Humidity"]
|
|||
|
|
BH1750["BH1750 Light"]
|
|||
|
|
MQ2["MQ-2 Smoke"]
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
subgraph mcuLayer["MCU Layer"]
|
|||
|
|
STM32["STM32 MCU"]
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
subgraph commLayer["Communication Layer"]
|
|||
|
|
ESP8266["ESP8266 WiFi"]
|
|||
|
|
MQTT["MQTT Protocol"]
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
subgraph cloudLayer["Cloud & AI"]
|
|||
|
|
SERVER["Cloud Server"]
|
|||
|
|
AI["AI Classification"]
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
subgraph appLayer["Application Layer"]
|
|||
|
|
APP["Mobile APP"]
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
DHT11 --> STM32
|
|||
|
|
BH1750 --> STM32
|
|||
|
|
MQ2 --> STM32
|
|||
|
|
STM32 --> ESP8266
|
|||
|
|
ESP8266 --> MQTT
|
|||
|
|
MQTT --> SERVER
|
|||
|
|
SERVER --> AI
|
|||
|
|
AI --> APP
|
|||
|
|
SERVER --> APP
|
|||
|
|
|
|||
|
|
style DHT11 fill:#ffcc80
|
|||
|
|
style BH1750 fill:#ffcc80
|
|||
|
|
style MQ2 fill:#ffcc80
|
|||
|
|
style STM32 fill:#a5d6a7
|
|||
|
|
style ESP8266 fill:#90caf9
|
|||
|
|
style MQTT fill:#90caf9
|
|||
|
|
style SERVER fill:#ce93d8
|
|||
|
|
style AI fill:#f48fb1
|
|||
|
|
style APP fill:#4fc3f7
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 传感器数据采集
|
|||
|
|
|
|||
|
|
常用嵌入式传感器:
|
|||
|
|
- **DHT11**:温湿度传感器,单总线协议
|
|||
|
|
- **BH1750**:光照强度传感器,I2C协议
|
|||
|
|
- **MQ-2**:烟雾/可燃气体传感器,模拟输出
|
|||
|
|
|
|||
|
|
#### 数据处理链路
|
|||
|
|
|
|||
|
|
1. **数据滤波**:去除噪声(均值滤波、中值滤波)
|
|||
|
|
2. **阈值检测**:判断是否超过安全范围
|
|||
|
|
3. **AI分类**:使用轻量级模型进行异常识别
|
|||
|
|
4. **MQTT云上传**:通过MQTT协议将数据上传到云平台
|
|||
|
|
5. **手机APP**:实时查看数据和接收告警
|
|||
|
|
|
|||
|
|
#### 关键硬件组件
|
|||
|
|
|
|||
|
|
| 组件 | 角色 | 说明 |
|
|||
|
|
|------|------|------|
|
|||
|
|
| STM32 | 主控MCU | 数据采集和预处理 |
|
|||
|
|
| ESP8266 | WiFi模块 | 无线联网 |
|
|||
|
|
| MQTT | 通信协议 | 轻量级IoT消息协议 |
|
|||
|
|
|
|||
|
|
### 9. 5G + IoT
|
|||
|
|
|
|||
|
|
5G技术为嵌入式IoT系统带来新的可能:
|
|||
|
|
|
|||
|
|
| 5G特性 | 对IoT的影响 |
|
|||
|
|
|--------|-------------|
|
|||
|
|
| **eMBB**(增强移动宽带) | 支持高清视频监控、AR/VR嵌入式设备 |
|
|||
|
|
| **uRLLC**(超可靠低延迟) | 工业控制、自动驾驶等硬实时场景 |
|
|||
|
|
| **mMTC**(海量机器通信) | 支持每平方公里百万级设备连接 |
|
|||
|
|
|
|||
|
|
### 10. TinyML
|
|||
|
|
|
|||
|
|
**TinyML**(Tiny Machine Learning)是指在**微控制器级别**(通常<1mW功耗)运行机器学习推理。
|
|||
|
|
|
|||
|
|
核心挑战:
|
|||
|
|
- **内存限制**:MCU通常只有几KB到几百KB RAM
|
|||
|
|
- **算力限制**:没有GPU,只能用CPU或专用加速器
|
|||
|
|
- **功耗限制**:电池供电设备要求极低功耗
|
|||
|
|
|
|||
|
|
关键技术:
|
|||
|
|
- **模型量化**:将32位浮点模型压缩为8位整数模型
|
|||
|
|
- **模型剪枝**:移除不重要的神经元连接
|
|||
|
|
- **知识蒸馏**:用大模型训练小模型
|
|||
|
|
- **专用框架**:TensorFlow Lite Micro, STM32Cube.AI
|
|||
|
|
|
|||
|
|
> [!question] 为什么TinyML选择在MCU上推理而不是把数据传到云端处理?
|
|||
|
|
> 有三个关键原因:1)**隐私保护**,数据不出本地;2)**低延迟**,本地推理响应更快;3)**省带宽**,不需要持续的网络连接,降低功耗和通信成本。
|
|||
|
|
|
|||
|
|
> [!tip] TinyML的应用场景
|
|||
|
|
> - 关键词检测(如"Hey Siri")
|
|||
|
|
> - 异常声音检测(如玻璃破碎、设备故障)
|
|||
|
|
> - 运动手势识别
|
|||
|
|
> - 工业设备预测性维护
|
|||
|
|
> - 农业病虫害识别
|
|||
|
|
|
|||
|
|
## 关联笔记
|
|||
|
|
- [[嵌入式系统/试题册/index|试题册索引]]
|