From 6141ea3f1d64d1e810b04bacca172e22e9a22b7c Mon Sep 17 00:00:00 2001 From: Natsume1710 <162396185+Natsume1710@users.noreply.github.com> Date: Mon, 16 Jun 2025 15:14:45 +0800 Subject: [PATCH] Update README.md --- 02-嵌入式系统基础知识/README.md | 142 ++++++++++++++++++++++++++++++++ 1 file changed, 142 insertions(+) diff --git a/02-嵌入式系统基础知识/README.md b/02-嵌入式系统基础知识/README.md index 8b13789..570f3f1 100644 --- a/02-嵌入式系统基础知识/README.md +++ b/02-嵌入式系统基础知识/README.md @@ -1 +1,143 @@ +# 🟢 第二层:嵌入式系统基础知识 +--- + +## 🔹 嵌入式系统概览 + +### 📌 嵌入式系统定义与特点 + +- **定义**:嵌入式系统是“专用计算系统”,嵌入在某个设备中用于执行特定任务。 +- **特点**: + - 资源受限(低功耗、内存小) + - 实时性要求高 + - 高可靠性与稳定性 + - 通常运行裸机或 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 启动差异 + +---