Delete 02-嵌入式系统基础知识/第二层:嵌入式系统基础知识.md
This commit is contained in:
@@ -1,143 +0,0 @@
|
||||
# 🟢 第二层:嵌入式系统基础知识
|
||||
|
||||
---
|
||||
|
||||
## 🔹 嵌入式系统概览
|
||||
|
||||
### 📌 嵌入式系统定义与特点
|
||||
|
||||
- **定义**:嵌入式系统是“专用计算系统”,嵌入在某个设备中用于执行特定任务。
|
||||
- **特点**:
|
||||
- 资源受限(低功耗、内存小)
|
||||
- 实时性要求高
|
||||
- 高可靠性与稳定性
|
||||
- 通常运行裸机或 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 启动差异
|
||||
|
||||
---
|
||||
Reference in New Issue
Block a user