本仓库英文名为 Embedded-Career-Roadmap,中文名为《嵌入式软件工程师学习与项目实践资料库》。
面向通信工程、电子信息、自动化等专业学生的一站式嵌入式软件转岗资料库:从单片机、嵌入式 C、RS485/Modbus、FreeRTOS,到 Qt 上位机、项目实战和面试表达。
它不是一本只讲概念的笔记,也不是一个只堆代码的仓库。它希望帮助通信工程、电子信息、自动化等专业的同学,把课堂里的 C 语言、单片机、通信原理、控制基础,逐步连接到嵌入式软件工程师岗位需要的真实工程能力。
- 路线清楚:按“单片机基础 -> 嵌入式 C -> RS485/Modbus -> FreeRTOS -> Linux/Qt -> 项目实战 -> 求职面试”推进。
- 贴近求职:每篇文档尽量连接工程用途、调试方法、面试问法、简历表达和小练习。
- 项目导向:以 RS485/Modbus RTU、FreeRTOS 多任务通信、Qt 串口调试上位机作为主要实践线。
- 代码配套:提供不依赖具体芯片库的 C 语言教学示例,并补充 FreeRTOS RS485 架构模拟和 Qt Modbus 调试上位机最小 Demo,方便理解协议接收、CRC16、任务拆分、Modbus 03/06 功能码和上位机日志。
- 可复现:围绕公开学习场景设计文档、代码、测试用例和调试日志,方便后续持续扩展。
| 想先看什么 | 推荐入口 |
|---|---|
| 全站文档索引 | DOCS_INDEX.md |
| 学习路线 | 通信工程硕士转嵌入式软件工程师学习路线 |
| RS485/Modbus 核心主线 | RS485/Modbus 总览 |
| C 语言协议示例 | RS485/Modbus 示例代码 |
| FreeRTOS 项目化拆分 | FreeRTOS RS485 架构示例 |
| Qt 上位机 Demo | Qt Modbus 调试上位机最小 Demo |
| 项目测试材料 | 项目测试报告模板 |
| 面试和简历 | 嵌入式软件工程师能力模型 |
| 后续路线图 | ROADMAP.md |
| 贡献和同步说明 | CONTRIBUTING.md / GITEE_SYNC.md |
flowchart LR
A["00 学习路线"] --> B["01 单片机基础"]
B --> C["02 嵌入式 C"]
C --> D["03 USART/RS485"]
D --> E["自定义协议"]
E --> F["Modbus RTU"]
F --> G["04 FreeRTOS"]
G --> H["05 嵌入式 C++"]
H --> I["06 嵌入式 Linux"]
I --> J["07 Qt 上位机"]
J --> K["08 项目实战"]
K --> L["09 求职面试"]
这张图不是要求你一次学完所有内容,而是提醒你:每个知识点最终都要落到项目、调试和面试表达上。第一版建议先按“学习路线 -> 嵌入式 C -> RS485/Modbus -> FreeRTOS -> 求职面试”的顺序读。
第一版建议重点展示 Modbus RTU 设备调试项目。它能把 RS485、Modbus RTU、CRC16、03/06 功能码、模拟寄存器、Qt 上位机联调、测试用例和调试日志串成一个完整闭环。
如果想看上位机如何组织代码,可以继续阅读 Qt Modbus 调试上位机最小 Demo。这个 Demo 只做教学用途,重点展示串口收发、03/06 组帧、CRC 校验和 TX/RX 日志,不绑定任何真实设备协议。
如果想准备面试展示材料,可以继续整理 项目测试报告模板 和 RS485/Modbus 调试日志样例。这两篇用于说明测试用例、异常帧、超时、方向控制和日志复盘,不包含真实公司或客户资料。
更多项目可从 项目实战索引 开始阅读。
本仓库当前已经从“学习路线文档”扩展为“文档 + 示例代码 + CI 检查 + 项目展示材料”的开源资料库。为了避免读者误解,下面把完成内容和边界说清楚。
| 类别 | 当前状态 | 入口 |
|---|---|---|
| 学习路线 | 已完成第一版 | 00_学习路线 |
| 单片机基础 | 已完成基础版,包含 GPIO、定时器、USART、ADC、PWM 等 | 01_单片机基础 |
| 嵌入式 C | 已完成基础版,重点覆盖关键字、缓冲区、链表 | 02_嵌入式C语言 |
| RS485/Modbus | 已完成核心精修版和 C 示例 | 03_RS485_Modbus |
| FreeRTOS | 已完成基础版和 RS485 架构模拟代码 | 04_FreeRTOS |
| 嵌入式 C++ | 已完成基础版,补充协议类、设备类、状态机类 | 05_嵌入式C++ |
| 嵌入式 Linux | 已完成基础版和串口、TCP、UDP 示例 | 06_嵌入式Linux |
| Qt 上位机 | 已完成基础版、项目骨架和最小 Demo,Demo 支持模拟 RX、解析表格和 CSV 日志导出 | 07_Qt上位机 |
| 项目实战 | 已完成项目闭环、测试报告模板和调试日志样例 | 08_项目实战 |
| 求职面试 | 已完成能力模型、简历模板、复盘模板和高频问答 | 09_求职面试 |
| 目录 | 内容 | 验证方式 |
|---|---|---|
03_RS485_Modbus/codes |
自定义协议接收、CRC16、Modbus RTU 从机模拟 | GitHub Actions 使用 make 编译 |
04_FreeRTOS/codes |
FreeRTOS 风格 RS485 任务拆分模拟 | GitHub Actions 使用 make 编译 |
06_嵌入式Linux/codes |
Linux 串口、TCP、UDP 示例 | GitHub Actions 使用 make 编译 |
07_Qt上位机/qt_modbus_debugger_demo |
Qt Modbus 调试上位机最小 Demo,包含模拟 RX、解析表格、TX/RX 日志和 CSV 导出 | 需要本机安装 Qt 和 C++ 构建环境后自行编译 |
- 本仓库是学习与求职作品集资料库,不是工业现场交付项目。
- 示例代码用于理解通信链路、任务拆分和调试方法,不保证可直接用于量产设备。
- 所有寄存器地址、状态字、错误码、接线方式均为教学示例,不对应真实设备。
- 涉及控制卡、驱动器、传感器、端子、A/B 线、供电、GND、终端电阻时,必须以对应数据手册、原理图、端子定义和实测结果为准。
- 仓库不包含真实公司、客户、产线、设备内部资料,也不建议把学习项目包装成公司项目。
这是一个面向初学者的嵌入式软件学习路线和项目实践资料库。内容会围绕一条主线展开:
单片机基础 -> 嵌入式 C -> USART/RS485 -> 自定义协议 -> Modbus RTU -> FreeRTOS -> C++ -> Linux -> Qt 上位机 -> 项目实战 -> 求职面试
每个知识点都尽量回答几个问题:
- 它是什么;
- 项目里为什么需要它;
- 代码一般怎么写;
- 出问题时怎么调;
- 面试可能怎么问;
- 简历里可以怎么表达;
- 学完后能做什么练习。
本资料库适合:
- 通信工程、电子信息、自动化、测控、机械电子等专业学生;
- 有 C 语言基础,但不知道怎么进入嵌入式项目的同学;
- 学过单片机,但项目经历比较薄弱的同学;
- 想用 RS485、Modbus、FreeRTOS、Qt 上位机做简历项目的同学;
- 正在准备嵌入式软件工程师、单片机工程师、上位机开发、工业控制软件岗位的同学。
如果你已经能独立做复杂驱动、Linux BSP 或工业现场调试,本仓库可能偏基础。但你仍然可以把它当作面试复盘和教学提纲。
很多同学的问题不是“不努力”,而是不知道知识如何连接到岗位:
- 学了 C 语言,却不知道
static、volatile在中断和驱动里怎么用; - 学了串口,却不知道 RS485 半双工为什么需要方向控制;
- 会发几个字节,却不知道 Modbus RTU 帧格式、CRC 和超时怎么处理;
- 听过 FreeRTOS,却不知道任务、队列、互斥量如何服务一个通信项目;
- 做过课程设计,却不知道如何把项目写成简历上的工程经历。
这个资料库想把这些断点接起来,让学习路线更像一条可以走完的工程路径。
建议按以下顺序学习:
- 单片机基础:GPIO、定时器、USART、中断、ADC、PWM。
- 嵌入式 C:指针、结构体、位运算、缓冲区、
static、extern、const、volatile。 - USART/RS485:串口参数、半双工通信、方向控制、收发时序。
- 自定义协议:帧头、长度、命令字、数据区、校验、超时和重发。
- Modbus RTU:功能码、寄存器、帧格式、CRC16、异常响应。
- FreeRTOS:任务拆分、队列通信、定时器、互斥和实时性。
- 嵌入式 C++:类、封装、协议类、设备类、状态机类、资源管理。
- 嵌入式 Linux:进程、线程、串口、Socket、设备文件和交叉编译。
- Qt 上位机:串口工具、协议调试、数据可视化、日志和参数配置。
- 项目实战:把下位机、通信协议、上位机和调试文档串起来。
- 求职面试:能力模型、项目表达、常见追问和简历优化。
第一版建议先按下面 5 个模块读,不必一开始就追求覆盖所有目录。这个顺序的目的,是先建立方向,再补 C 语言工程基础,然后进入 RS485/Modbus 通信主线,最后用 FreeRTOS 和求职表达把项目串起来。
为什么先学它:先知道嵌入式软件岗位需要什么,再决定后面的学习重点。否则容易陷入“今天看一点 C,明天看一点 Linux,后天看一点 Qt”的碎片化状态。
通信工程硕士转嵌入式软件工程师学习路线.md:学完能解决“我该按什么路线从专业背景过渡到嵌入式软件岗位”的问题。
为什么第二步学它:RS485、Modbus、FreeRTOS 最后都会落到 C 语言代码上。先把变量作用域、缓冲区、中断共享变量和数据结构讲清楚,后面看协议代码才不会只是在抄。
00_嵌入式C语言总览.md:学完能解决“嵌入式 C 和课堂 C 语言到底差在哪里”的问题。04_static_extern_const_volatile.md:学完能解决“中断、模块封装和共享变量里这些关键字怎么用”的问题。07_链表和缓冲区.md:学完能解决“串口字节流如何先缓存、再解析”的问题。
为什么第三步学它:这是第一版资料库的核心项目主线。RS485/Modbus 很适合做求职项目,因为它能同时体现串口、中断、协议、CRC、调试和上位机联调能力。
00_RS485_Modbus总览.md:学完能解决“UART、RS232、RS485、Modbus RTU 分别是什么”的问题。02_RS485半双工和方向控制.md:学完能解决“为什么 RS485 发送前后要控制 DE/RE 或 RS485_EN”的问题。03_串口中断接收.md:学完能解决“如何用中断接收自定义协议帧,并为 Modbus RTU 接收做准备”的问题。04_自定义协议设计.md:学完能解决“如何设计帧头、长度、命令字、数据区、校验和超时”的问题。05_机器状态解析.md:学完能解决“如何把通信帧里的状态字转换成运行、报警、完成等工程状态”的问题。06_Modbus_RTU帧格式.md:学完能解决“如何逐字节看懂 03/06 功能码请求和响应”的问题。07_CRC16校验.md:学完能解决“如何计算和校验 Modbus RTU 帧尾 CRC”的问题。
建议同步阅读 03_RS485_Modbus/codes 目录里的示例代码,把文档里的概念和 C 代码对上。
为什么第四步学它:当采集、通信、控制、日志都放进一个 while (1) 时,代码会越来越乱。FreeRTOS 的价值是帮助你把项目拆成任务,而不是只在简历上多写一个关键词。
01_为什么需要RTOS.md:学完能解决“什么时候裸机轮询不够用,为什么要做任务拆分”的问题。
建议同步阅读 04_FreeRTOS/codes 目录里的示例代码,把“中断、信号量、队列、任务拆分、日志任务”连成一条可运行的学习链路。
为什么最后学它:技术点学完后,需要转成面试能讲清楚、简历能写明白的项目表达。求职材料不是夸大项目,而是把真实做过的模块、调试过程和验证结果讲具体。
01_嵌入式软件工程师能力模型.md:学完能解决“嵌入式软件岗位到底看哪些能力”的问题。02_简历项目描述模板.md:学完能解决“如何把 RS485/Modbus/FreeRTOS/Qt 上位机项目写成简历经历”的问题。07_项目复盘模板.md:学完能解决“如何把项目背景、方案、调试问题、日志证据和面试讲法整理成复盘材料”的问题。
| 天数 | 阅读内容 | 当天目标 |
|---|---|---|
| 第 1 天 | 00_学习路线 |
明确岗位能力主线,写下自己的差距清单 |
| 第 2 天 | 02_嵌入式C语言/00_嵌入式C语言总览.md、04_static_extern_const_volatile.md |
理解中断共享变量、模块作用域和嵌入式 C 重点 |
| 第 3 天 | 02_嵌入式C语言/07_链表和缓冲区.md、03_RS485_Modbus/03_串口中断接收.md |
能解释 rxBuffer/rxIndex/rxFlag 和完整帧处理 |
| 第 4 天 | 03_RS485_Modbus/00_RS485_Modbus总览.md、02_RS485半双工和方向控制.md |
能区分 UART、RS485、Modbus,并讲清楚方向控制 |
| 第 5 天 | 03_RS485_Modbus/06_Modbus_RTU帧格式.md、07_CRC16校验.md |
能手动拆解一帧 Modbus RTU 报文并说明 CRC |
| 第 6 天 | 04_FreeRTOS/01_为什么需要RTOS.md |
能把采集、通信、控制拆成任务思路 |
| 第 7 天 | 09_求职面试 两篇 |
写出一段真实、可追问的项目描述 |
| 天数 | 复习内容 | 输出结果 |
|---|---|---|
| 第 1 天 | 复习 03_RS485_Modbus 五篇核心文档 |
准备 5 个高频问题:RS485 是否协议、半双工方向控制、串口中断、Modbus 帧格式、CRC |
| 第 2 天 | 复习 02_嵌入式C语言 和 04_FreeRTOS |
准备 3 个代码追问:volatile、缓冲区、任务拆分 |
| 第 3 天 | 复习 09_求职面试,重写项目描述 |
准备 1 分钟项目介绍、3 分钟项目介绍、1 个调试问题复盘 |
复习时不要背整段话。更有效的方法是:先画通信链路,再手写一帧报文,最后用自己的项目经历回答“你做了什么、怎么验证、出过什么问题”。
00_学习路线 从专业背景到岗位能力的学习规划
01_单片机基础 GPIO、定时器、USART、中断等基础模块
02_嵌入式C语言 嵌入式 C 语法、内存、缓冲区和工程写法
03_RS485_Modbus RS485、串口接收、自定义协议、状态解析、Modbus RTU 和 CRC
04_FreeRTOS RTOS 基础、任务拆分、队列、同步和 RS485 架构示例
05_嵌入式C++ 用 C++ 做协议类、设备类、状态机类和模块封装
06_嵌入式Linux Linux 应用开发、串口、网络和交叉编译
07_Qt上位机 Qt 串口调试工具、协议界面、数据展示和最小 Demo
08_项目实战 面向简历的综合项目设计、测试报告和调试复盘
09_求职面试 能力模型、简历模板、面试问答和表达训练
建议不要从头到尾只读文档。更好的方式是:
- 先读
00_学习路线,明确自己当前处在哪一阶段。 - 每学一个知识点,都写一个最小代码实验。
- 学 RS485/Modbus 时,准备串口调试助手、USB-RS485 模块或仿真环境。
- 做项目时同步记录:需求、协议、调试问题、解决过程和测试结果。
- 每完成一个模块,就把它改写成简历中的一句项目描述。
涉及硬件接线、端子定义、控制卡、驱动器或传感器时,请务必以数据手册、端子定义、原理图或实测结果为准。示例只用于学习,不能替代真实设备资料。
- 面向初学者:尽量用课堂能听懂的方式讲工程问题。
- 面向求职:每篇文档都尽量连接面试和简历表达。
- 面向项目:重点关注串口、RS485、Modbus、FreeRTOS、Qt 上位机等可落地内容。
- 面向调试:不仅讲怎么写,还讲怎么查问题。
- 面向真实工程意识:强调数据手册、端子定义、原理图、实测验证和日志记录。
后续会继续完善:
- 单片机基础模块:ADC 滤波、定时采样、PWM 联动控制;
- 自定义协议、机器状态解析与状态机解析;
- FreeRTOS 队列、信号量、互斥量和任务优先级的更多项目化案例;
- 嵌入式 C++ 协议类、设备类和状态机类的项目化示例;
- Linux 串口和 Socket 通信示例的项目化扩展;
- Qt 上位机项目:继续完善界面原型、响应解析、日志导出和可运行 Demo;
- 完整项目实战:下位机通信控制器 + Qt 上位机的代码级实现和测试材料;
- 面试题、简历案例和项目复盘模板的案例化扩展。
本仓库会持续保持一个原则:不夸大、不编造、不泄露真实公司资料,把能公开、能学习、能复现的工程能力讲扎实。