# 嵌入式软件学习路径 **Repository Path**: holymiao/Embedded-Software-Learning-Path ## Basic Information - **Project Name**: 嵌入式软件学习路径 - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2026-07-09 - **Last Updated**: 2026-09-08 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 嵌入式软件开发技能学习路径 > 从 C 语言基础到工业级单片机项目架构,一套面向嵌入式初学者的完整学习路线。 * 注意:本教程只提供学习路径指导,并提出重点内容,不能保证看完就会。**每个技术点的入门与深入学习,仍以图书、网络资料、开发板例程资料为主。** --- ## 学习路线全景图 ``` ┌─────────────────────────────────────────────────────────────────┐ │ 嵌入式软件开发技能学习路径 │ ├─────────────────────────────────────────────────────────────────┤ │ │ │ 第一阶段 第二阶段 │ │ ┌──────────────┐ ┌──────────────────────────┐ │ │ │ 1、C语言(重点)│ ──────→ │ 2、单片机外设接口的设计哲学 │ │ │ │ │ │ (重点) │ │ │ │ · 入门基础 │ │ │ │ │ │ · 高级语法 │ │ · 常用外设本质讲解 │ │ │ │ │ │ · Arduino API 设计通性 │ │ │ └──────────────┘ │ · STM32 HAL 设计通性 │ │ │ │ │ · ESP32-IDF 设计通性 │ │ │ │ └────────────┬─────────────┘ │ │ │ │ │ │ ▼ ▼ │ │ 第三阶段 │ │ ┌──────────────────────────┐ │ │ │ 3、单片机项目架构 │ │ │ │ │ │ │ │ · 项目架构高级教程(掌握) │ │ │ │ · 平台无关utils库(会用) │ │ │ │ · C语言面向对象编程(选学) │ │ │ │ · 综合练习:闹钟项目 │ │ │ └────────────┬─────────────┘ │ │ │ │ │ ▼ │ │ 第四阶段 │ │ ┌─────────────────────────────────────────────────────────┐ │ │ │ 4、可选择学习方向 │ │ │ │ │ │ │ │ ┌───────────┐ ┌───────────┐ ┌───────────┐ │ │ │ │ │ 操作系统 │ │ LVGL图形库 │ │ 物联网 │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │·RT-Thread │ │·LVGL应用 │ │·ESP32物联网│ │ │ │ │ │·Zephyr │ │ 套路 │ │ 设计模式 │ │ │ │ │ │·Linux方向 │ │ │ │ │ │ │ │ │ └───────────┘ └───────────┘ └───────────┘ │ │ │ └─────────────────────────────────────────────────────────┘ │ │ │ └─────────────────────────────────────────────────────────────────┘ ``` --- ## 第一阶段:C 语言(重点) — 筑牢地基 > **前置知识**:无(零基础可入门) > **学习目标**:掌握 C 语言语法、理解内存模型、具备独立编码能力 ### 1-1 C 语言入门基础 面向零基础或基础薄弱的初学者,从变量、运算符到指针,逐步建立编程思维。 | 序号 | 内容 | 类型 | 说明 | |:---:|------|:---:|------| | 1 | 基础 | PPT | 变量、数据类型、输入输出 | | 2 | 符号、条件、循环 | PPT | 运算符、if/switch、while/for | | 3 | 循环、数组 | PPT | 循环深入、一维/二维数组 | | 4 | 结构体、函数、全局变量、预定义、头文件 | PPT | 模块化编程基础 | | 5 | 指针 | PPT | 指针概念、指针与数组/函数 | > 每个单元均配有 **题库 + 答案库**,学完即练,巩固知识点。 ### 1-2 C 语言高级语法 在入门基础上深入 C 语言的"硬核"部分——这部分是后续看懂单片机库代码、写出高质量项目的前提。**按序号递进学习**。 | 序号 | 文档 | 核心内容 | |:---:|------|---------| | 1 | **C语言编程基础与前提知识** | 编译器与 IDE、编译四阶段、CPU 架构、裸机 vs OS、程序存放区域(堆/栈)、编码规范 | | 2 | **C语言关键字深度梳理** | 32 个关键字的完整分类与嵌入式场景用法 | | 3 | **C语言头文件与预处理技术详解** | 宏高级用法、条件编译、头文件保护、`#` `##` 运算符 | | 4 | **C语言标准库函数技术详解(一)** | stdio、stdlib、string、math 核心函数 | | 5 | **C语言标准库函数技术详解(二)** | time、stdarg、assert、errno 等辅助头文件 | | 6 | **C语言指针高级应用技术文档** | 多级指针、函数指针、指针数组、回调函数 | | 7 | **C语言结构体定义与使用详解** | 结构体对齐、位域、柔性数组、链表基础 | | 8 | **C23标准的新特性和主流编译器的支持状况** | 最新 C 标准特性 + GCC/Clang/MDK/IAR/MSVC 支持矩阵,了解工具链趋势 | > 配套 **高级语法练习题 + 答案与解析**,覆盖指针、结构体、预处理等综合练习。 ### 🎯 第一阶段达标检查 - [ ] 能独立写出 200 行以上的 C 程序 - [ ] 理解堆、栈、静态区的区别 - [ ] 会使用函数指针和回调函数 - [ ] 能看懂并编写带 Doxygen 注释的代码 --- ## 第二阶段:单片机外设接口的设计哲学(重点) — 建立"硬件直觉" > **前置知识**:C 语言基础(指针、结构体、位运算) > **学习目标**:理解各外设的本质功能,掌握不同平台 API 的设计规律,做到"学一通三" ### 2-1 基础外设(掌握) ``` 1、单片机的常用外设讲解.md ← 先建立"外设是什么、能干什么"的直觉 │ ▼ 2、Arduino外设接口函数的设计通性.md ← 最简单、最统一的 API 设计 │ ▼ 3、STM32HAL外设接口函数的设计通性.md ← 工业级、通用性最强的 HAL 库 │ ▼ 4、ESP32-IDF外设接口函数的设计通性.md ← 现代化、带 RTOS 的高级设计 ``` | 文档 | 定位 | 设计哲学 | |------|------|---------| | **常用外设讲解** | 硬件通识 | 先搞懂 GPIO/定时器/ADC/I2C/SPI/UART/DMA 各自"是什么",不绑定任何平台 | | **Arduino 设计通性** | API 入门 | 全局对象 + `begin/end` 生命周期 + 动词式命名,最简单直观 | | **STM32 HAL 设计通性** | 工业级标准 | 句柄模式 + Init/DeInit + 阻塞/中断/DMA 四种模式,学会一个=学会全部 | | **ESP32-IDF 设计通性** | 高级进阶 | 句柄 + 事件驱动 + FreeRTOS 集成,代表现代嵌入式设计方向 | ### 2-2 高级外设(了解) 学完基础外设后,可进一步了解三种更复杂的通信接口: | 序号 | 文档 | 核心内容 | |:---:|------|---------| | 1 | USB驱动原理 | USB 拓扑结构、枚举过程、描述符、端点、设备类(CDC/HID/MSC)、TinyUSB | | 2 | 以太网与WiFi驱动原理 | TCP/IP 四层模型、MAC/PHY 架构、lwIP 协议栈、MQTT/HTTP 应用层 | | 3 | 蓝牙驱动原理 | 经典蓝牙 vs BLE、GAP/GATT 协议、蓝牙 Mesh、主流芯片方案对比 | ### 🎯 第二阶段达标检查 - [ ] 能说出 GPIO/UART/I2C/SPI/ADC/PWM/Timer 各自的核心功能 - [ ] 能对比 Arduino、STM32 HAL、ESP-IDF 三套 API 的异同 - [ ] 拿到一个没用过的外设库,能自己推测出 `init → config → operate → deinit` 的使用流程 - [ ] 了解 USB/以太网/蓝牙的基本原理和开发路径(可选) --- ## 第三阶段:单片机项目架构 — 从"能跑"到"工程级" > **前置知识**:C 语言(高级语法)+ 至少一种单片机平台的外设编程经验 > **学习目标**:掌握工业级项目的目录结构、驱动分层、模块化设计、版本管理、调试方法 ### 3-1 项目架构高级教程(掌握) | 章节 | 标题 | 核心内容 | |:---:|------|----------| | 00 | 阅读指南 | 教程总览、学习建议、前置要求 | | 01 | 外设驱动基础 | GPIO、UART、SPI、I2C、ADC、PWM、Timer 驱动编写 | | 02 | 驱动框架设计 | 分层架构、统一接口、设备抽象、HAL 思想 | | 03 | 模块化编程 | 模块设计原则、接口封装、依赖管理、可移植性 | | 04 | 项目结构与构建系统 | 目录组织、多平台构建 | | 05 | Git 版本管理 | 单人版本控制、多人协作、分支策略 | | 06 | 程序架构设计 | 状态机、事件驱动、前后台系统、RTOS 任务设计 | | 07 | 数据结构与算法应用 | 环形缓冲区、链表、FIFO、PID 控制、滤波算法 | | 08 | 调试与测试方法 | 日志系统、断言机制、单元测试、硬件调试 | | 09 | 内存管理与优化 | 栈/堆管理、内存池、代码体积与速度优化 | | 10 | 代码规范与最佳实践 | 命名规范、注释风格、错误处理、防御性编程 | | 11 | 实战项目案例 | 完整项目实战:温湿度监控系统 | > 推荐按章节顺序阅读,每章代码亲手敲一遍。 ### 3-2 平台无关的 utils 库(会用) 一套可直接复用的 C 语言工具库,屏蔽平台差异,让你的代码在 STM32、ESP32 等不同芯片上都能跑。共 **11 个模块**,每个模块配有 `.h` 头文件 + `.c` 实现 + 配套教程。 | 序号 | 模块 | 说明 | |:---:|------|------| | 01 | `utils_macros` | 通用宏定义集合(仅头文件) | | 02 | `utils_log` | 分级日志系统,支持多种输出后端 | | 03 | `utils_crc` | CRC 校验(8/16/32 位,查表法) | | 04 | `utils_endian` | 大小端转换工具 | | 05 | `utils_math` | 数学工具(限幅、滤波、插值等) | | 06 | `utils_fsm` | 有限状态机框架 | | 07 | `utils_intrusive_list` | 侵入式链表(Linux 内核同款) | | 08 | `utils_scheduler` | 轻量级任务调度器 | | 09 | `utils_ringbuf` | 通用环形缓冲区 | | 10 | `utils_mempool` | 固定大小内存池管理器 | | 11 | `utils_timer` | 软件定时器模块 | ### 3-3 C 语言面向对象的编程思路(选学) 用 C 语言实现封装、继承、多态——这是读懂大型嵌入式项目(如 Linux 内核、LVGL)源码的关键能力。 | 章节 | 内容 | |------|------| | 为什么要用 C 做面向对象 | 动机与场景分析 | | 面向对象核心概念与 C 映射 | 封装→结构体+函数指针、继承→结构体嵌套、多态→虚函数表 | | 实现形式详解 | 三种主流 C 语言 OOP 实现方式对比 | | 单片机中的应用场景 | 驱动抽象、协议栈、GUI 框架 | | 业界大佬的代码实例 | Linux 内核、RT-Thread、LVGL 源码分析 | | 最佳实践与设计模式 | 工厂模式、观察者模式、策略模式在 C 中的实现 | ### 综合练习:闹钟项目 三层递进式实战项目,用同一个需求(闹钟)贯穿不同开发水平: | 版本 | 技术栈 | 适合阶段 | |------|--------|---------| | **基础框架版本** | 裸机 + 基本模块化 | 学完 3-1 后 | | **带 utils 库的版本** | 裸机 + utils 工具库 | 学完 3-2 后 | | **面向对象版本** | OOP 设计 + 状态机 | 学完 3-3 后 | ### 🎯 第三阶段达标检查 - [ ] 能从零搭建一个目录规范、模块清晰的项目 - [ ] 会使用 Git 管理代码版本 - [ ] 理解分层架构,能写出可移植的驱动代码 - [ ] 能独立完成闹钟项目的任一版本 --- ## 第四阶段:可选择学习方向 — 按需深入 > **前置知识**:前三阶段全部完成 > **说明**:本阶段各方向互相独立,可根据兴趣和职业规划选择学习顺序。建议先读各方向的"方向入口文档",再决定深入路线。 ### 方向 A:操作系统 ``` 操作系统入门概论.md(必读,建立 OS 全局认知 + 选型指南) │ ├──→ 1、RT-Thread(推荐入门) │ · RT-Thread 从入门到精通(13 章,含实战章节) │ · 适合:国内就业、IoT 项目、中小型设备 │ ├──→ 2、Zephyr(进阶选择) │ · Zephyr 从入门到精通(13 章,含实战章节) │ · 适合:蓝牙/安全认证项目、国际化项目 │ · 特点:Device Tree + Kconfig,和 Linux 一脉相承 │ └──→ 3、Linux · Linux 技术方向(含技术栈全景图与学习路线) · 适合:高端嵌入式、路由器/网关/服务器 · 注意:普通 STM32 无法运行 Linux! ``` | 对比维度 | RT-Thread | Zephyr | Linux | |----------|-----------|--------|-------| | 硬件要求 | STM32/ESP32 等 Cortex-M | Cortex-M/R/A、RISC-V、x86 | Cortex-A 及以上(需 MMU) | | 学习曲线 | 中等 | 中等偏上(全英文文档) | 陡峭 | | 适合场景 | IoT 设备、中小型项目 | 安全/蓝牙产品、国际化项目 | 复杂设备、网关、服务器 | | 就业方向 | 国内 IoT 企业 | 外资/合资企业、汽车电子 | 大厂嵌入式、驱动开发 | | 特色 | 中文社区、500+ 软件包 | 安全认证、原生 BLE、Device Tree | 完整 OS 生态、多进程 | ### 方向 B:LVGL 图形库 为单片机项目添加图形界面,做出类似手机 App 的交互效果。 | 文档 | 说明 | |------|------| | LVGL的应用套路 | 从"对象-样式-事件-布局"四大核心套路到实战项目 | > LVGL 是一套面向对象的 GUI 框架,建议先学完 3-3(C 语言 OOP)再学 LVGL,理解更深。学完后可挑战 [基于 LVGL 图形显示的闹铃项目](4、可选择学习方向/综合练习题:闹钟项目/3、基于LVGL图形显示的闹铃/)。 ### 方向 C:物联网 | 文档 | 说明 | |------|------| | 基于ESP32的物联网设计模式 | ESP32 六种通信模式、设计模式与工程实践 | > 学完本项目,你将掌握 ESP32 平台的 WiFi/蓝牙通信、MQTT 协议、OTA 升级、低功耗设计等物联网核心技能。学完后可挑战 [基于 ESP32 的网络时钟同步闹铃项目](4、可选择学习方向/综合练习题:闹钟项目/4、基于ESP32的网络时钟同步的闹铃/)(含 Arduino/IDF 双方案 + 云端服务 + LVGL 界面)。 ### 方向 D:嵌入式软件测试(进阶可选) | 文档 | 说明 | |------|------| | 嵌入式软件测试技术 | 单元测试、静态分析、CI 持续集成等质量保障方法 | > 建议与"项目架构"第 08 章(调试与测试方法)配合阅读,掌握"写完代码如何证明它是对的"。测试方向不依赖具体单片机平台,任何时候都可提前学习。 ### 🎯 第四阶段达标检查 - [ ] 掌握至少一个可选方向的完整开发能力 - [ ] 能用所选技术栈独立完成一个项目 ### 综合练习:四个方向的拓展闹钟项目 学完各自方向后,可以挑战方向特色的闹钟升级项目——同一个产品,四种技术栈,帮你验证学习成果: | 版本 | 方向 | 技术栈 | 核心亮点 | |------|:---:|--------|------| | 基于 RT-Thread 的闹钟 | 操作系统 | RT-Thread 多线程 | 用 RTOS 抢占式调度重构闹钟架构 | | 基于 Zephyr 的闹钟 | 操作系统 | Zephyr 多线程 + Device Tree | Device Tree 描述硬件,Kconfig 配置,三权分立 | | 基于 LVGL 图形显示的闹铃 | LVGL | LVGL + 触摸屏 | 对象化 UI,彩色触摸屏交互 | | 基于 ESP32 网络时钟同步 | 物联网 | ESP32 + NTP + 天气 + AI | Arduino/IDF 双方案,FreeRTOS 多任务,云端服务对接 | --- ## 推荐学习路径 ### 路径一:标准全栈路线(推荐) ``` C语言入门基础(5 个 PPT + 题库) ↓ 1~2 个月 C语言高级语法(7 篇技术文档 + 练习题) ↓ 1~2 个月 单片机外设设计哲学(4 篇) ↓ 2~4 周 项目架构高级教程(12 章) ↓ 2~3 个月 平台无关 utils 库(11 个模块) ↓ 1~2 个月 综合练习:闹钟项目 ↓ 2~4 周 可选方向:OS / LVGL / 物联网 / 软件测试 ``` ### 路径二:快速就业路线 ``` C语言入门基础 → C语言高级语法(重点:指针、结构体、预处理) ↓ 常用外设讲解 → STM32 HAL 设计通性 ↓ 项目架构 01~06 章 + 10 章 + 11 章 ↓ RT-Thread(方向 A) ``` ### 路径三:竞赛/项目突击路线 ``` C语言高级语法(查漏补缺)→ 外设设计哲学(快速过一遍) ↓ 项目架构 06(状态机/架构)→ 07(数据结构/算法) ↓ utils 库(现成工具直接用) ↓ 综合练习:闹钟项目 ``` --- ## 前置知识对照表 | 要学习的内容 | 必须先掌握 | |-------------|-----------| | C 语言高级语法 | C 语言入门基础(变量、循环、函数、数组) | | 单片机外设设计哲学 | C 语言基础 + 指针 + 结构体 | | 项目架构教程 | C 语言高级语法 + 至少一个平台的外设编程经验 | | utils 库 | 项目架构 01~04 章 | | C 语言面向对象编程 | C 语言结构体 + 函数指针 | | 闹钟项目(基础版) | 项目架构 01~06 章 | | 闹钟项目(utils 版) | utils 库各模块 | | 闹钟项目(OOP 版) | C 语言面向对象编程 | | RT-Thread | 项目架构 06 章(程序架构设计) | | Linux | RT-Thread 或 FreeRTOS 基础 | | LVGL | C 语言面向对象编程 + RT-Thread | | 嵌入式软件测试技术 | C 语言基础 + 项目架构 08 章(调试与测试) | --- ## 学习建议 1. **不走捷径**:每个知识点都要用脑子分析一遍、动手敲一遍 2. **允许跳跃**:某个知识点吃不透可以先放一放,读完后面再回头看 3. **先手敲,后用 AI**:学习时手动编码建立语感,项目实战时善用现成稳定代码 4. **常看常新**:基础知识点反复咀嚼,每次都有新理解 5. **外设不是背出来的,是用出来的**:每做一个项目,都会对几个外设有更深的理解 6. **按序号顺序学**:文件夹和文件的前缀数字即是推荐学习顺序 --- ## 文件统计 | 阶段 | 文件数 | 说明 | |------|:---:|------| | C 语言(重点) | 31 | 5 个 PPT + 5 篇入门基础 MD + 10 篇题库/答案 MD + 8 篇高级语法文档 MD(含 C23 专章)+ 2 篇高级练习题 MD + 1 张图片 | | 单片机外设设计哲学 | 7 | 4 篇基础外设(掌握)MD + 3 篇高级外设/了解 MD(USB/以太网与 WiFi/蓝牙) | | 单片机项目架构 | 80 | 34 篇 MD(12 篇架构教程 + 11 篇 utils 教程 + 8 篇 OOP 文档 + 3 版闹钟项目)+ 22 个 .h + 20 个 .c + 若干 PDF/图片(utils 教程与代码、代码参考实现均配套) | | 可选择学习方向 | 16 | 4 篇 OS 方向 MD(入门概论/RT-Thread/Zephyr/Linux)+ 1 篇 LVGL 套路 MD + 1 篇物联网设计模式 MD + 1 篇软件测试 MD + 8 篇闹钟项目架构/附录 MD + 1 篇 PDF | --- *本学习路径持续更新中,欢迎补充和反馈。*