Files
EmbeddedSoftwareLearn1/02-嵌入式系统基础知识/README.md
T

144 lines
3.9 KiB
Markdown
Raw Normal View History

2025-06-16 15:14:45 +08:00
# 🟢 第二层:嵌入式系统基础知识
2025-06-16 13:54:47 +08:00
2025-06-16 15:14:45 +08:00
---
## 🔹 嵌入式系统概览
### 📌 嵌入式系统定义与特点
- **定义**:嵌入式系统是“专用计算系统”,嵌入在某个设备中用于执行特定任务。
- **特点**:
- 资源受限(低功耗、内存小)
- 实时性要求高
- 高可靠性与稳定性
- 通常运行裸机或 RTOS
---
### 📌 系统构成(MCU、存储器、传感器、外设)
| 模块 | 功能说明 |
|------------|--------------------------------------|
| MCU | 核心控制器,如 ARM Cortex-M |
| Flash/SRAM | 存储程序代码与运行数据 |
| 外设 | GPIO、UART、SPI、I2C、ADC、PWM 等 |
| 传感器 | 温湿度、光照、姿态等 |
| 通信模块 | WiFi、BLE、LoRa、CAN、NB-IoT 等 |
| 电源管理 | 电池、LDO、DC-DC,支持低功耗模式 |
```
+--------------------------+
| MCU |
| +----------------------+ |
| | Flash / RAM | |
| | GPIO / UART / ADC | |
| +----------------------+ |
+-----------|--------------+
|
+------+------+
| 外设 / 传感器 |
+-------------+
```
---
### 📌 主流 MCU 简介
| MCU 芯片 | 特点说明 |
|------------|----------------------------------------------|
| STM32 | Cortex-M 系列,丰富外设,社区活跃 |
| ESP32 | 双核 WiFi+BLE SoC,适合 IoT 项目 |
| NRF52 | BLE 专用,低功耗,常用于可穿戴设备 |
| NXP LPC | 工业级应用广泛,抗干扰能力强 |
| RISC-V MCU | 开源架构,初期发展中,适合学习/极简产品 |
---
## 🔹 架构与启动流程
### 📌 Cortex-M 内核结构
- 32 位精简指令集(Thumb 指令集)
- 内建 NVIC(中断控制器)
- 支持两种堆栈:MSP(主栈)和 PSP(进程栈)
- 寄存器组:R0-R15、LR、PC、xPSR
---
### 📌 启动文件 Startup.s
- 用汇编语言书写的启动文件,完成向量表定义、初始化堆栈、调用 `main()`。
```asm
Reset_Handler:
LDR R0, =_estack ; 设置栈顶地址
MOV SP, R0
BL SystemInit ; 时钟初始化
BL main ; 跳转到主函数
```
---
### 📌 启动流程简要
1. MCU 上电 → 执行 `Reset_Handler`
2. 设置 SP(栈顶)
3. 初始化 `.data` 和 `.bss` 段
4. 调用 `SystemInit()`(通常配置系统时钟)
5. 跳转执行用户 `main()` 函数
---
## 🔹 编译器与链接器
### 📌 常用嵌入式工具链
| 工具链 | 说明 |
|------------|------------------------------|
| Keil MDK | 商用 IDE,支持 ARM 编译器 |
| IAR EWARM | 商用 IDE,优化强,支持调试 |
| GCC (arm-none-eabi) | 开源编译器,跨平台,支持 CLI |
---
### 📌 链接脚本 (.ld) 示例
```ld
MEMORY
{
FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 512K
RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 64K
}
SECTIONS
{
.text : { *(.text) } > FLASH
.data : { *(.data) } > RAM AT > FLASH
.bss : { *(.bss) } > RAM
}
```
- `.text`:代码段
- `.data`:已初始化的全局变量
- `.bss`:未初始化变量
---
### 📌 存储器布局图(STM32 示例)
| 区域 | 地址范围 | 描述 |
|-------------|------------------|----------------------------|
| ROM(Flash)| `0x08000000` 起 | 存储代码和常量 |
| RAM | `0x20000000` 起 | 存储运行期变量 |
| 外设映射区 | `0x40000000` 起 | GPIO、UART、TIMER 寄存器 |
| 系统控制区 | `0xE0000000` 起 | NVIC、SysTick、MPU 等 |
---
> ✅ 后续建议补充:
> - 芯片数据手册阅读方法
> - vector table 的定制与重定向
> - ROM 启动 vs RAM 启动差异
---