本文档是一份面向嵌入式工程师的学习路线图,由 Meysam Parvizi 编写,系统整理了从入门到进阶的学习方向及优质资源。
Original: https://github.com/m3y54m/Embedded-Engineering-Roadmap
本路线图旨在帮助有志于从事嵌入式工程师/开发人员职业的初学者,同时也帮助当前从业者拓展技能。
嵌入式工程需要对硬件功能有扎实的理解,以及软件开发 和编程技能。如果您真的想从事这个职业,您必须具有高度的动力和热情。正如那句名言所说:“硬件是很难的!“但不要惊慌,要对您在这个激动人心的旅程中可能遇到的挑战保持耐心。通过投入足够的时间和精力进行实践和项目开发,您很快就会发现自己成为一名真正的嵌入式工程师!😀
❓ 什么是嵌入式系统?
计算机系统是更大系统的一部分,并执行该系统的某些要求。例如,用于飞机或快速交通系统的计算机系统。
嵌入式系统的硬件和软件通常是为特定功能而最小化和优化的。嵌入式系统至少包括一个微控制器、微处理器或数字信号处理器。嵌入式系统设计用于优化可靠性、成本、尺寸和功耗,以满足应用需求。
▶️ “Making Embedded Systems” 书籍:
嵌入式系统是一种专门为其应用而构建的计算机化系统。
▶️ “Computer Organization and Embedded Systems” 书籍:
使用计算机控制来实现特定目的的物理系统,而不是用于通用计算,这种系统称为嵌入式系统。
嵌入式系统是一种计算机(通常是微控制器或微处理器)作为系统组成部分而包含在内的系统。
通常,计算机对用户相对不可见,没有明显的应用程序、文件或操作系统。具有不可见嵌入式系统的产品示例包括运行微波炉的控制器或现代汽车的发动机控制系统。
▶️ 嵌入式系统词汇表:
计算机硬件和软件以及可能附加的机械或其他部件的组合,设计用于执行专用功能。
在某些情况下,嵌入式系统是更大系统或产品的一部分,例如汽车中的防抱死制动系统。
🗺️ 路线图

嵌入式系统工程路线图分为三个基础领域:软件、硬件 和 软技能。
虽然在嵌入式系统中硬件和软件的交叉很普遍,但具体的职位名称往往强调其中一个方面。例如,“嵌入式软件工程师/开发人员”、“固件工程师/开发人员"和"嵌入式 Linux 工程师/开发人员"等角色主要专注于软件开发。相反,“嵌入式硬件工程师"和"硬件设计工程师"等职位主要处理硬件设计和电子。此外,还有"嵌入式系统工程师"这样的角色,需要对硬件和软件都有全面的理解。
重要的是要注意,嵌入式行业中的每个公司对给定职位可能有独特的要求。因此,根据您的职业志向调整您的重点至关重要。如果您寻求嵌入式软件职位,请优先考虑路线图中列出的软件相关技能。相反,如果您对嵌入式硬件工作感兴趣,请专注于硬件技能,并在电子学习上投入更多时间。
本路线图为典型的"嵌入式系统工程师"角色提供了全面的指导。通过深入了解软件和硬件方面,您可以培养在这动态领域发展所需的必要技能。但是,如果您对软件或硬件有明确的偏好,您可以相应地调整学习路径。
🔗 有关此路线图背后历史的更多信息,请阅读这篇文章:嵌入式系统路线图:弥合差距
[!NOTE] 请记住,个人软件和硬件技能的重要性可能因公司要求和职位角色的具体要求而异。
[!TIP] 为了区分学习资源的类型及其内容质量,在每个项目前使用了特定符号。
资源类型:
- 📘 :书籍
- 🎞️ :视频
- 📝 :撰写内容、文章和博客文章
- 🔗 :不属于上述类别的其他链接
内容质量符号:
- 👶 :易于理解和适合初学者的资源。如果您对某个主题没有先验知识,请参考这些资源。
- 💎 :众所周知的参考资料,具有真正无价的综合内容。如果您想加深对某个主题的理解,请参考这些资源。
[!IMPORTANT] 本仓库不隶属于任何内容创建者、出版商或组织,也不以任何方式获得其财务支持。我们不认可或推荐任何特定的付费资源。免费和付费资源都已包含在内,以提供一系列选项,让您选择最适合您需求和偏好的内容。
😕 不知道从哪里开始!
如果您被路线图中大量的主题感到不知所措,您并不孤单。在深入之前,让我们通过一些简单的入门项目来轻松入门。学习嵌入式系统工程需要时间和精力。如果您没有立即理解某些内容,请不要气馁。不断练习,您最终会达到目标。
⚒️ 项目
从事实践项目是学习最有效的方法。而不是仅仅依赖书籍或文章的理论知识。开展项目可以获得实践学习经验。即使是一个看似简单的项目,也有可能教给您比漫无目的阅读数小时更多的东西。当您在真实项目的理解问题上遇到困难时,您可以参考书籍、文章和课程。
不要试图立即构建一个复杂的项目。从小型、易管理的项目开始,让您熟悉这个领域。
- 🔗 Random Nerd Tutorials | 学习 ESP32、ESP8266、Arduino 和 Raspberry Pi
- 🔗 Last Minute Engineers
- 🔗 51 个 STM32 项目和教程,适合初学者及进阶者 - Hackster.io
- 🔗 STM32 (STM32F103C8) 项目和教程
- 🔗 ElectronicWings 项目
- 🔗 STM32 固件 - Phil’s Lab (YouTube 播放列表)
- 🔗 基于 Raspberry Pi 的嵌入式项目 ideas
- 🔗 ARM 嵌入式 Linux | 项目
- 🔗 嵌入式系统项目系列 - Artful Bytes (YouTube 播放列表)
- 🔗 ESP32 ESP-IDF 教程和 IoT 协议
- 🔗 flip-card
🔎 搜索和提问!
使用搜索引擎找到您问题的答案。
如果您使用搜索引擎找不到您要查找的内容,AI 聊天机器人也可以提供帮助。请注意,AI 在某些情况下可能会提供错误的答案。最好使用更可靠的参考资料来确认任何答案。
- 🔗 DuckDuckGo AI Chat
- 🔗 Microsoft Copilot
- 🔗 Google Gemini
- 🔗 ChatGPT
- 🔗 Claude AI
- 🔗 Poe - 快速、有帮助的 AI 聊天
如果您对仅依赖 AI 建议有顾虑,您也可以向真人提问:
✳️ 职业发展
作为嵌入式系统工程师,及时了解行业趋势、最佳实践和新技术以推进您的职业发展至关重要。以下是一些帮助您实现职业目标的资源:
- 🔗 EmbeddedJobs - 专注于嵌入式系统就业市场的招聘板。
🎥 课程和 YouTube 内容
您可能听说过 YouTube 是一所大学。确实如此 - YouTube 上有大量关于嵌入式系统的宝贵免费内容。您还可以通过 Coursera 和 EdX 找到一些优秀的免费课程。此外,Udemy 提供一些高质量的付费课程选项。
- 🎞️ DigiKey (YouTube 频道)
- 🎞️ Coursera - 嵌入式系统软件和开发环境简介
- 🎞️ Coursera - 嵌入式软件和硬件架构
- 🎞️ Fastbit Embedded Brain Academy
- 🎞️ 现代嵌入式系统编程课程 (YouTube 播放列表)
- 🎞️ element14 presents (YouTube 频道)
- 🎞️ Ben Eater (YouTube 频道)
- 🎞️ Phil’s Lab (YouTube 频道)
- 🎞️ 嵌入式系统 - Jacob Sorber (YouTube 播放列表)
- 🎞️ edX - 嵌入式系统 - 影响世界:微控制器输入/输出
- 🎞️ edX - 嵌入式系统 - 影响世界:多线程接口
- 🎞️ Low Byte Productions
🕹️ Arduino
如果您没有任何嵌入式系统编程背景,Arduino 板和库是您开始和学习基础知识的最佳选择。请记住,大多数 Arduino 库是为学习目的而开发的,未针对行业使用进行优化。
此外,Arduino Core 处理了大部分低级硬件相关操作,作为嵌入式工程师,您应该能够自己处理这些操作,或者至少对其有清晰的了解。如果您想成为专业的嵌入式开发人员,您应该能够有效地使用微控制器供应商提供和批准的行业标准 API 和 SDK,例如用于 ARM Cortex-M 微控制器的 CMSIS、用于 STM32 的 STM32Cube、用于 Espressif 微控制器的 ESP-IDF 等。
- 🔗 Arduino 入门指南
- 🔗 ArduinoMap(开源 Arduino 课程)
- 🎞️ 全新 Arduino R4 WiFi 零基础教程 (YouTube 播放列表)
- 🎞️ 新 Arduino 教程 (YouTube 播放列表)
- 🎞️ Arduino 用于商业产品?
- 🎞️ Arduino 项目到产品 (YouTube 播放列表)
👨🏫 教育网站
- 🔗 DeepBlueMbedded
- 🔗 Digital Electronics Deeds
- 🔗💎 Interrupt 博客 by Memfault
- 🔗💎 EmbeddedRelated.com
- 🔗 ElectronicWings - 硬件开发者社区
- 🔗 EduTecnica(意大利语)
- 🔗 Microchip University
- 🔗 Nordic Developer Academy
- 🔗 Electronics Tutorials
- 🔗 SparkFun Learn: 在 SparkFun Electronics 学习
- 🔗 Adafruit Learning System
- 🔗 STM32 World
- 🔗 ControllersTech
- 🔗 嵌入式系统新闻 - CNX Software
- 🔗 新闻 - PioLabs
🗺️ 其他有用的路线图
🛠️ IDE
- 🔗 Keil MDK & µVision
- 🔗 IAR Embedded Workbench
- 🔗 STM32CubeIDE
- 🔗 Microchip Studio for AVR® and SAM Devices
- 🔗 MPLAB® X IDE
- 🔗 MCUXpresso IDE
👨💻 VS Code 扩展
🐜 PlatformIO
PlatformIO 是一个跨平台、跨架构、多框架的专业工具,面向嵌入式系统工程师和为嵌入式产品编写应用程序的软件开发人员。
PlatformIO 在工业和大型项目中尚未被广泛采用,然而,对于从事小型项目的个人来说,它是一个极好的选择。因为它大大减少了对安装框架和设置构建及调试工具的需求,让您能够专注于编程。
📚 学习资源
[!WARNING] 您不需要阅读这里的所有书籍、文章或观看所有视频。如果您尝试这样做,最终会感到疲惫和失望。您无法在合理的时间内学习完这里提供的所有内容,因为这可能需要数年时间。重要的是学习足够的知识以对所需主题至少有一个基本的了解。当然,您投入学习和做项目的时间越多,您的知识和专业知识就会越深厚。
这里提到的一些资源只会用作参考资料。仅在需要时参考它们。
✳️ 软技能
与其他职业一样,嵌入式工程师需要软技能,这些技能不能仅通过阅读或观看视频获得。这些技能通过互动和处理各种工作障碍来培养。提高软技能不是一种一刀切的方法。它会因个人的特质而异,需要自我意识了解自己的优势和成长领域。提高这些技能需要时间和精力。
✳️ 电子学
🔵 基础微积分
🔵 电路原理
- 🔗👶 电路课程(All About Circuits)
- 🔗👶💎 电子教程
- 📘👶💎 电路基础 - Charles K. Alexander, Matthew Sadiku
- 📘👶💎 电路原理:传统电流版 - Thomas L Floyd, David M. Buchla
- 🎞️💎 基础电路理论 I (By Prof. Razavi) (YouTube 播放列表)
🔵 电子学基础
- 🔗👶💎 构建电子电路 - Øyvind Nydal Dahl
- 🎞️👶 电子基础 - GreatScott! (YouTube 播放列表)
- 📘👶 Make: Electronics: 通过发现学习 - Charles Platt
- 📘👶💎 电子设备:传统电流版 - Thomas Floyd, David Buchla, Steven Wetterling
- 📘👶💎 电子学基础:电路、设备和应用 - Thomas L Floyd, David M. Buchla, Gary D. Snyder
- 📘👶 发明者实用电子学 - Paul Scherz, Simon Monk
- 📘💎 电子学艺术 - Paul Horowitz, Winfield Hill
- 📝 这是一个快速了解主要电子元件的方法
- 📘 电子元件百科全书 - Charles Platt
🔵 数字设计
- 🔗👶 Tiny Tapeout > 数字设计指南
- 📘💎 数字设计 - Morris Mano, Michael Ciletti
- 📘👶💎 数字设计和计算机架构:ARM 版 - Sarah Harris, David Harris
- 📘👶💎 数字设计和计算机架构:RISC-V 版 - Sarah Harris, David Harris
- 📘👶 数字基础 - Thomas L. Floyd
🔵 计算机架构
计算机架构是嵌入式系统的支柱,管理着硬件和软件的交互。嵌入式开发人员需要掌握计算机架构才能有效地设计、开发和调试嵌入式软件。掌握 ARM 和 RISC-V(嵌入式系统中两种流行的指令集架构(ISA))的专业知识对嵌入式开发人员至关重要。ARM 是占主导地位的 ISA,而 RISC-V 的开源性和灵活性正在获得关注。
- 📘👶💎 计算机组成与设计:ARM 版 - David A. Patterson, John L. Hennessy
- 📘👶💎 数字设计和计算机架构:ARM 版 - Sarah Harris, David Harris
- 📘👶💎 数字设计和计算机架构:RISC-V 版 - Sarah Harris, David Harris
- 📘👶 计算系统的要素 - Noam Nisan, Shimon Schocken
- 📘 计算机组成和嵌入式系统 - Carl Hamacher, Zvonko Vranesic, Safwat Zaky, Naraig Manjikian
- 📘 嵌入式系统架构 - Tammy Noergaard
- 📘 嵌入式系统架构 - Daniele Lacamera
- 📘 ARM® Cortex®-M0 和 Cortex-M0+ 处理器权威指南 - Joseph Yiu
- 📘 ARM® Cortex®-M3 和 Cortex®-M4 处理器权威指南 - Joseph Yiu
- 🔗 从头开始构建 8 位计算机
✳️ 使用测试设备
嵌入式系统通常需要专用测试设备来验证其功能和性能。这些设备包括万用表、示波器、逻辑分析仪、函数发生器、电源和其他工具,使工程师能够测量信号、注入激励并监控嵌入式系统的行为。
🔵 万用表
🔵 逻辑/协议分析仪
🔵 示波器
✳️ 原型制作技能
虽然硬件设计和原型制作主要是电子硬件设计工程师的职责,但嵌入式软件工程师也可以从对这些概念的 基本理解中受益。这些知识在嵌入式系统调试过程中识别和解决硬件相关问题时可以发挥重要作用。通过掌握硬件原理,嵌入式软件工程师可以有效地找出问题的根本原因,从而实现更快、更高效的故障排除。
🔵 面包板
面包板是一种用于原型制作的实践方法,为实验和电路设计提供了多功能平台。嵌入式系统经常使用面包板,因为它们易于使用、灵活且经济高效。通过在面包板上连接元件,嵌入式系统开发人员可以快速测试和完善他们的设计,而无需永久焊接。这允许快速迭代和高效调试,使面包板成为嵌入式系统开发中不可或缺的工具。
🔵 硬件设计基础
- 🎞️👶💎 硬件设计 - Phil’s Lab (YouTube 播放列表)
- 🎞️ 电子电路设计 - IFE - TU Graz (YouTube 播放列表)
- 🎞️ 使用 Altium Designer 进行基于微控制器的硬件设计 (YouTube 播放列表)
🔵 PCB 设计 / EMC
- 🎞️💎 Altium Academy YouTube 频道
- 🎞️💎 Robert Feranec YouTube 频道
- 🎞️👶 Altium 初学者教程 - Robert Feranec (YouTube 播放列表)
- 🎞️👶 为快速原型制作创建 PCB - DigiKey (YouTube 播放列表)
- 🎞️👶💎 PCB 设计初学者 - Altium Academy (YouTube 播放列表)
- 🎞️ 如何制作 Raspberry Pi Compute Module 4 载板 - DigiKey (YouTube 播放列表)
- 🎞️💎 如何学习 PCB 设计(我的想法、历程和资源)- Phil’s Lab #87
- 🎞️👶 KiCad 6 STM32 PCB 设计完整教程 - Phil’s Lab #65
- 🎞️👶 KiCad 入门 - DigiKey (YouTube 播放列表)
- 🎞️💎 PCB 设计的 EMI 和 SI - Phil’s Lab #64
- 🎞️💎 高级用户的 PCB 设计 (YouTube 播放列表)
- 🎞️💎 PCB 知识 [PCB 生产技巧 By PCBWay] (YouTube 播放列表)
- 🎞️💎 Udemy – 高速板设计课程系统 On Module -EsteemPCB
- 🎞️💎 Udemy – 高级硬件和 PCB 设计大师班 2022
- 🎞️💎 9 个简单技巧改善您板子上的 EMC / EMI - 实用示例(与 Min Zhang 合作)
- 🎞️💎 许多 EMC 技巧帮助您设计更好的 PCB 板(与 Keith Armstrong 合作)
- 🔗 LearnEMC - EMC 资源
- 🔗 构建 PCB 的更好方法 - Flux AI
- 🔗 Monosketch
- 🔗 EasyEDA
- 🔗 Fritzing
- 🔗 Cirkit Designer
- 🔗 withdiode
🔵 焊接/返修
- 🎞️👶 如何焊接 - 电子产品与 Becky Stern | Digi-Key Electronics
- 🎞️👶 如何焊接!(初学者指南)
- 🎞️👶 焊接速成课程:基本技术、技巧和建议!
- 🎞️ 如何焊接通孔元件 - 另一个教学时刻 | DigiKey Electronics
- 🎞️ 如何手工焊接 QFN MLF 封装(使用热风返修站)| Digi-Key Electronics
- 🎞️ 从无焊面包板到焊接电路 - 电子产品与 Becky Stern | Digi-Key Electronics
✳️ FPGA 开发
FPGA(现场可编程门阵列)是专用集成电路,可配置为执行各种数字逻辑功能。它们广泛用于嵌入式系统中,以实现高性能、灵活性和成本效益。FPGA 设计人员使用硬件描述语言(HDL)创建直接映射到 FPGA 架构的定制电路。由于 FPGA 工程和验证与嵌入式软件开发显著不同,它在嵌入式系统中是一个专业领域。
- 🔗 FPGA / ASIC 工程路线图
- 📝 什么是 FPGA?
- 📝 FPGA 与微控制器:如何为您的项目选择合适的
- 🎞️👶 FPGA 简介 (YouTube 播放列表)
- 🔗👶 FPGA 基础 - Nandland
- 🎞️💎 Coursera – FPGA 设计嵌入式系统专业
- 📘💎 嵌入式系统设计实践指南 - Adam Taylor, Dan Binnun, Saket Srivastava
✳️ 编程基础
掌握编程基础和软件开发原则对于成功的嵌入式设计至关重要。嵌入式系统需要高效代码、优化数据管理、可重用设计模式和有效内存管理,才能在资源受限的环境中有效运行。嵌入式开发人员必须具备这些核心概念的坚实基础,以创建可靠和高性能的嵌入式系统。
🔵 基础离散数学
- 🎞️ Coursera - 计算机科学离散数学入门专业化
- 📘👶 LibreTexts 开放获取离散数学书籍
- 📘👶 计算机科学基础离散数学 by Lewis HARRY., Zax R. ACM DL
- 📘👶 离散数学指南 - Gerard O’Regan, Springer
- 📘💎 通往抽象数学的桥梁,AMS
🔵 算法与数据结构
- 📘👶💎 算法图解 - Aditya Y. Bhargava
- 📘💎 算法导论 - Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest and Clifford Stein
- 🔗 数学、机器学习、计算机科学、物理等领域各种算法的集合,用 C 语言实现,用于教育目的
- 🎞️ Udemy – 嵌入式系统状态机与数据结构
- 🔗 C 中的数据结构
- 🎞️ 数据结构 - 使用 C 和 C++ 的完整课程
- 🔗 Hello Algo
🔵 设计模式
- 📝 实用设计模式:C 中的不透明指针和对象
- 📘💎 C 嵌入式系统设计模式 - Bruce Powel Douglass
- 📘💎 制作嵌入式系统:伟大软件的设计模式 - Elecia White
- 🎧💎 制作嵌入式系统:伟大软件的设计模式 - Elecia White(有声书)
- 🔗 设计模式 - Refactoring Guru
🔵 状态机
- 📝 使用状态机轻松编程嵌入式系统
- 🎞️💎 状态机 (YouTube 播放列表)
- 🎞️💎 事件驱动编程 (YouTube 播放列表)
- 🎞️💎 Udemy - 使用 UML 状态机的嵌入式系统设计
- 📝 “输入驱动"与事件驱动状态机
- 📝 事件驱动系统的状态机
- 📘 C/C++ 实用 UML 状态图 by Miro Samek
🔵 内存管理
- 🎞️ 理解 C 运行时内存模型
- 🎞️ 指针和动态内存 - 栈 vs 堆
- 🎞️ 动态内存分配 | C 编程教程
- 🎞️ C 中的动态内存分配 - malloc calloc realloc free
- 📝 什么是 C/C++ 中的内存泄漏?我们如何避免?
- 📝 理解 Rust 中的内存管理
- 📝 Python 中的内存管理
✳️ 编程语言
C 和汇编等低级语言提供直接硬件访问,能够为资源受限的嵌入式系统实现高效代码优化。C++ 和 Rust 等系统级语言为复杂嵌入式应用提供了更高级别的抽象,而 Python 由于其简单性常用于测试嵌入式系统。
🔵 C
- 🎞️👶 Microchip University - C 的语法和结构 - Simply C
- 🎞️💎 Microchip University - 高级 C 编程
- 🎞️💎 Microchip University - 嵌入式 C 技巧、诀窍和注意事项
- 🎞️💎 Microchip University - C 编程:链表数据结构
- 🎞️💎 Microchip University - C 编程回调函数
- 🎞️👶 C 编程初学者完整课程
- 🎞️ C 编程教程 (YouTube 播放列表)
- 📘💎 C 编程语言 - Brian W. Kernighan, Dennis M. Ritchie
- 🔗👶 C 示例
- 📘👶 C 小书本
- 📘 C 如何编程 - Paul Deitel, Harvey Deitel
- 📘 有效 C - 专业 C 编程简介 - Robert C. Seacord
- 📘 现代 C - Jens Gustedt
- 🔗 嵌入式 C 编码标准
- 🔗 newlib C 库文档
- 🔗 GNU C 库 (glibc)
- 📝 从零到 main():裸机 C
- 📝 从零到 main():使用 Newlib 引导 libc
- 📝 Nintendo DS 编程简介
- 🎞️👶 学习 C 编程和面向对象与 Dr. Chuck
- 📘 极限 C - Kamran Amini
- 🎞️👶 Coursera - C 编程与 Linux 专业
🔵 C++
- 📝 现代 C++ 在嵌入式开发中的应用:(不要害怕)++
- 📝 嵌入式系统上的 C++
- 📝💎 裸机 C++ - Alexey Rybachuk
- 🎞️💎 在受限环境中的 C++ - Bjarne Stroustrup - CppCon 2022
- 🎞️👶 C++ 初学者教程完整课程
- 🎞️ C++ by The Cherno (YouTube 播放列表)
- 🎞️👶💎 Udemy - C++ 编程从入门到进阶
- 🎞️💎 CppCon 会议 - YouTube
- 📘💎 C++ tour (第三版) - Bjarne Stroustrup
- 📘💎 C++ 编程语言 (C++11) - Bjarne Stroustrup
- 📘💎 编程——使用 C++ 的原理和实践(第三版) - Bjarne Stroustrup
- 📘💎 实时 C++:高效面向对象和模板微控制器编程 - Christopher Kormanyos
- 📘 有效现代 C++ - Scott Meyers
来自 Bjarne Stroustrup(C++ 创建者)的额外资源
- 🎞️👶 C++ 的本质 by Bjarne Stroustrup - YouTube
- 🎞️👶💎 提供安全的 C++ by Bjarne Stroustrup - CppCon 2023
- 🎞️👶💎 Bjarne Stroustrup 计算机历史 C++ 的设计 - YouTube
- 📘 C++ 的设计和演变 - Bjarne Stroustrup
- 📘💎 Bjarne Stroustrup 关于 C++ 的论文 - Stroustrup 网站
- 🔗 Bjarne Stroustrup 关于 C++ 的论文 - ACM DL
🔵 汇编
- 📝👶 ARM 汇编基础简介
- 🎞️ Udemy – ARM GNU 汇编从零编程
- 🎞️ ARM 汇编语言编程完整初学者教程
- 📝 如何在 C 代码中使用内联汇编语言
- 📘 Raspberry Pi 汇编语言编程:ARM 处理器编码
- 🔗 x86-64 Linux 笔记本电脑电池信息程序,仅用 298 字节机器码
🔵 Python
- 📝 嵌入式系统测试的 Python
- 📝👶 Python 手册 – 为初学者学习 Python
- 🔗💎 Real Python: Python 教程
- 📘👶💎 Python 速成课程 - Eric Matthes
🔶 Python 用于微控制器
- 🔗 MicroPython - 用于微控制器的 Python
- 🔗 MicroPython 101 | Arduino 文档
- 🔗 CircuitPython
- 📝 使用 MicroPython 设计嵌入式系统的优缺点
- 📝 使用 MicroPython 编程 ESP32
🔵 Rust
- 📝 Rust 在嵌入式系统中采用的 5 个障碍
- 🔗 嵌入式 Rust 书籍
- 🎞️ 编程的未来:Rust (YouTube 播放列表)
- 🔗 STM32 微控制器社区 Rust 支持项目
- 🔗 ESP 社区 Rust
- 🎞️ ESP32 上的嵌入式 Rust(意大利语)- YouTube 播放列表
- 📝 Rust on STM32: 入门
- 📝 从零到 main():裸机 Rust
- 📝 用 Rust 编写操作系统 - Philipp Oppermann 的博客
- 📝 2022 年用 Rust 编写内核驱动程序
- 🔗 Rustlings - 小型练习让您习惯阅读和编写 Rust 代码!
- 🔗 有效学习 Rust
🔵 Zig
✳️ 微控制器
微控制器是集成电路(IC),将微处理器、存储器和输入/输出(I/O)外设集成在单个芯片上。它们专为嵌入式应用而设计,用于控制各种行业的设备,包括汽车、工业、消费电子和医疗保健。
一些流行的微控制器系列包括 AVR、PIC、STM32、MSP430、nRF 和 ESP32。选择合适的微控制器需要评估应用需求、处理能力、内存需求和输入/输出能力。考虑易用性、成本、可靠性、可用性和未来扩展性。
- 📝 什么是微控制器?常见组件的定义特征和架构
- 📝 如何为您的应用选择合适的微控制器
- 📝 如何阅读微控制器数据手册:简介和第一步
- 📘👶 Make: AVR 编程 - Elliot Williams
- 🎞️👶💎 NewbieHack - 微控制器教程 - 初学者指南(AVR)
- 🎞️👶 STM32 和 Nucleo 入门 (YouTube 播放列表)
- 📘💎 精通 STM32 - Carmine Noviello
- 📘💎 使用 ESP32 开发 IoT 项目 - Vedat Ozan Oner
- 🎞️👶 Raspberry Pi Pico 和 RP2040 入门 (YouTube 播放列表)
- 🔗 STM32 入门:STM32 循序渐进
- 🎞️ AVR 入门 (YouTube 播放列表)
- 🎞️ 微控制器基础 - Arduino 裸机分解 (YouTube 播放列表)
- 🎞️ 裸机嵌入式编程:理论和使用 STM32 的实践 (YouTube 播放列表)
- 📘 STM32 入门:使用 FreeRTOS、libopencm3 和 GCC 开发 - Warren Gay
- 🎞️ Udemy – 微控制器嵌入式 C 编程:绝对初学者
- 🎞️ Udemy – 嵌入式系统 STM32 低层 API(LL) 驱动开发
- 🎞️ Udemy – 嵌入式系统 STM32 HAL API 驱动开发
- 📘 使用 ARM Cortex-M 微控制器的嵌入式系统设计:使用 C、C++ 和 MicroPython 的应用 - Cem Ünsalan, Hüseyin Deniz Gürhan, Mehmet Erkin Yücel
- 📘💎 使用 MSP430FR2355 LaunchPad 进行嵌入式系统设计 - Brock J. LaMeres
- 📘💎 构建嵌入式系统:可编程硬件 - Changyi Gu
- 🔗 Awesome Embedded:精选嵌入式编程资源列表
- 🔗 Awesome Electronics:精选电子资源列表
🔵 GPIO
🔵 ADC
🔵 DAC
🔵 定时器/计数器
🔵 PWM(脉冲宽度调制)
🔵 RTC(实时时钟)
🔵 看门狗
🔵 中断
- 🎞️ 轮询/中断/DMA 差异轻松解释
- 🎞️ 提升您的 Arduino 代码:外部中断
- 🎞️ 教程 10:外设 2 - STM32 中的嵌套向量中断控制器(NVIC)
- 🎞️ 教程 11:实验 - STM32 中使用 STM32CUBEMX 的外部中断(EXTI)接口
- 🎞️ 教程 12:STM32 中的中断优先级
🔵 DMA
- 🎞️ 直接内存访问(DMA)简介
- 🎞️ STM32 DMA 第一部分
- 🎞️ STM32 DMA 第二部分
- 🎞️ STM32 和 Nucleo 入门第四部分:使用 ADC 和 DMA 工作 - Maker.io
- 🎞️ STM32 UART DMA 和空闲线 || 接收未知长度数据
🔵 时钟管理
- 📝 STM32 中的时钟配置
- 🎞️ STM32:通过寄存器更改时钟速度
- 🎞️ #1. STM32F4 基于寄存器的编程入门 || 时钟设置 || LED 闪烁 || 无 HAL
- 🎞️ 教程 8:使用 STM32CUBEMX 在 STM32 中配置 MCU 时钟
- 🎞️ ARM Cortex M4 中的时钟源和 PLL
🔵 电源管理
🔵 引导加载程序 / DFU(设备固件更新)
- 📝 开发 Arduino 引导加载程序基础
- 📝 从零到 main():如何从头编写引导加载程序
- 🎞️ 如何创建一个超级简单的引导加载程序
- 🎞️ 从闪烁到引导加载程序:裸机编程系列 (YouTube 播放列表)
- 📝 简单 AVR 引导加载程序教程
- 🎞️💎 Udemy – STM32Fx 微控制器自定义引导加载程序开发
- 📝💎 设备固件更新 Cookbook
✳️ 接口、协议与通信技术
嵌入式系统通常通过接口和协议与其他设备或外部系统通信。接口提供物理连接,协议定义数据交换规则。选择取决于应用特定需求,包括带宽、距离、安全性和功耗。
🔵 基本协议
- 🎞️👶 理解串行协议
- 🎞️👶 串行协议基础
- 📝👶 2024 年理解和选择:I2C、SPI、UART 解释
- 📝👶 有线嵌入式协议基础
- 🎞️ 协议:UART - I2C - SPI - 串行通信 #001
🔶 UART
- 🎞️👶 理解 UART
- 🎞️ UART 是如何工作的???(清晰解释)
- 🎞️ UART 通信基础 | UART 帧结构 | RS 232 基础 | 第1部分
- 🎞️ 理解 UART 通信编程 | UART 外设 | 第2部分
- 🎞️ RS-232 协议
🔶 I2C
🔶 SPI
🔶 SDIO
🔶 I3C
🔶 1-Wire
🔵 数字音频协议
🔶 I2S
🔶 PCM
🔵 显示和摄像头协议
🔶 SCCB
🔶 MIPI CSI-2
🔶 MIPI DSI
🔶 HDMI
🔵 无线协议
🔶 蓝牙 / BLE
- 🎞️👶💎 Microchip University - 蓝牙低功耗(BLE)第一步
- 📝 蓝牙基础
- 📝 蓝牙低功耗:入门读物
- 📝 BLE 吞吐量实用指南
- 🎞️ SparkFun 根据 Pete #49 - 蓝牙如何工作
- 🔗 蓝牙低功耗基础 - Nordic Semiconductor
- 🔗 蓝牙概述 - ESP-IDF 编程指南
🔶 Wi-Fi
- 🎞️ 802.11 WiFi 如何工作 - 无线网络 | 计算机网络 Ep. 7.3 | Kurose & Ross
- 🎞️ 802.11 帧分析
- 🔗 Wi-Fi 驱动程序 - ESP-IDF 编程指南
- 📝 ESP32 使用 ESP-IDF 设置接入点(AP)
- 📝 ESP32 ESP-IDF WiFi 连接 - 基站模式示例
🔶 LoRa / LoRaWAN
- 📝 Arduino LoRa® 和 LoRaWAN® 指南
- 🔗💎 LoRaWAN 基础知识!
- 📝 什么是 LoRa® 和 LoRaWAN®?
- 🎞️ #112 LoRa / LoRaWAN 揭秘 / 教程
- 🔗 ESP32 使用 Arduino IDE 连接 LoRa RFM95 - 入门
🔶 Zigbee
🔶 Thread
- 🔗 OpenThread - Thread® 的开源实现
- 🎞️ 什么是 Thread?智能家居设备的低功耗物联网网络 | Digi-Key Electronics
- 🔗 OpenThread - ESP-IDF 编程指南
🔶 Matter
🔵 工业协议
🔶 Modbus
🔶 RS485
🔶 EtherCAT
🔶 CoAP 和 MQTT
- 🎞️ #144 互联网协议:CoAP vs MQTT、网络嗅探,以及为 IKEA Tradfri 黑客攻击做准备
- 🎞️ MQTT vs. CoAP | 物联网协议比较
- 🎞️ 简单 ESP32 物联网传感器节点教程:启用 WiFi 的 MQTT 传感器数据节点
- 🔗 蜂窝物联网基础 - Nordic Semiconductor
🔵 高速协议
🔶 以太网
- 🎞️👶 Microchip University - 以太网基础
- 📝 以太网协议如何工作 - 完整指南
- 🎞️ 什么是以太网 PHY?
- 🎞️ 数据链路层、MAC 地址和以太网帧
- 🎞️ Microchip University - 串行器/解串器(SerDes)基础,适用于您下一个 Microchip 以太网 PHY 设计
- 🎞️ Microchip University - 以太网交换机基础
🔶 USB
- 🎞️👶 Microchip University - USB 2.0 简介
- 🎞️👶 Microchip University - USB 3 基础
- 🎞️ 培训 - USB 101 - USB 简介
- 🔗 USB 101:通用串行总线 2.0 简介
- 🎞️ USB 键盘是如何工作的?
- 🎞️ USB 设备发现是如何工作的?
- 🎞️ MOOC - STM32 USB 培训 (YouTube 播放列表)
- 🎞️ Microchip University - USB2 集线器基础
- 🔗 Beyond Logic - USB 简明指南
- 📝 软件开发人员的 USB:编写用户空间 USB 驱动程序简介
🔶 PCIe
🔵 汽车协议
🔶 CAN
- 🎞️👶 Microchip University - CAN 和 CAN FD 协议和物理层基础
- 📝👶 2024 年 CAN 总线:操作、优势和最新发展
- 🎞️👶 CAN 总线:串行通信 - 它是如何工作的?
- 🎞️👶 CAN 总线:初学者指南第一部分
- 🎞️👶 CAN 总线:初学者指南第二部分
- 🎞️💎 Microchip University - 设计和实现 CAN FD 网络
- 🎞️ 使用 CAN 总线改进我的电动长板!CAN 总线能做什么?EB#44
- 🎞️ CAN 总线、OBD2 和 J1939 解释 (YouTube 播放列表)
- 🎞️ J1939 解释 - 简单入门 [v2.0 | 2021]
- 🎞️ 统一诊断服务(UDS)解释 - 简单入门 [2022]
🔵 网络协议 / 套接字编程
- 🎞️ 网络基础 - 实用网络 (YouTube 播放列表)
- 🎞️ TCP vs UDP - 解释事实和揭穿神话 - TCP 大师课
- 🎞️ TCP - 解释传输控制协议的 12 个简单概念
- 🎞️ UDP 不可耻!对于这些类型的应用,它是最好的 L4 协议…
- 🎞️ 网络教程 - Ben Eater (YouTube 播放列表)
- 📘💎 动手学习网络编程 with C - Lewis Van Winkle
- 📘💎 网络算法学 - George Varghese, Jun Xu
- 🔗 tcpdump 和 libpcap 库
- 🔗 lwIP - 轻量级 TCP/IP 协议栈
- 🔗 lwIP (ESP-IDF)
- 🔗 使用 STM32Cube 和 LwIP TCP/IP 协议栈开发应用程序
- 📝 理解 Traceroute
🔵 蜂窝通信
🔶 GSM / LTE
🔶 LTE-M 和 NB-IoT
✳️ 存储技术与文件系统
嵌入式系统采用易失性(SRAM、DRAM、PSRAM)和非易失性(闪存、EEPROM、FRAM)存储器的组合来存储和访问数据,基于性能、成本、功耗和耐用性等因素。
🔵 闪存
🔶 NOR / NAND
🔶 eMMC
🔶 SD 卡
🔵 EEPROM
🔵 SRAM / DRAM
- 📝 SRAM vs DRAM:SRAM 和 DRAM 的区别解释
- 🎞️ 什么是 SRAM?
- 🎞️ SDRAM 硬件和固件教程(STM32)- Phil’s Lab #80
- 🎞️ STM32 中的 SDRAM || MT48LC4
🔵 文件系统
文件系统是在存储设备(如硬盘、闪存驱动器或固态驱动器)上组织数据的一种方式。它提供了存储、访问和管理文件的方法,文件是可以单独访问的数据集合。嵌入式系统中的文件系统通常是轻量级的并为效率而优化,考虑到嵌入式设备的有限资源和特定要求。与桌面或服务器文件系统相比,它们通常采用更简单的文件结构和数据结构。
- 📝 闪存文件系统
- 📝 块文件系统
- 📝 理解嵌入式设备中的 UBI 文件系统
- 📝 UBI 文件系统
- 📝 JFFS:日志闪存文件系统
- 📝 防止嵌入式 Linux 中的文件系统损坏
- 🔗 LittleFS - 高完整性嵌入式文件系统
- 🔗 SPIFS - 嵌入式设备的磨损均衡 SPI 闪存文件系统
- 🔗 EEPROM 文件系统 (EEFS)
✳️ 硬件仿真 / 模拟
嵌入式系统开发通常涉及在将软件部署到实际硬件之前,仿真或模拟硬件环境来测试和调试软件。仿真工具创建硬件系统的虚拟模型,而仿真工具使用真实硬件组件复制实际硬件行为。这些工具提供了几个优势,包括减少开发时间、最小化硬件成本和提高软件可靠性。
- 🔗👶 Wokwi - 在线 ESP32、STM32、Arduino 仿真器
- 🔗👶 SimulIDE 电路仿真器
- 🔗👶 为教育目的设计的数字逻辑设计和电路仿真器
- 🔗👶 EveryCircuit
- 🔗👶 电路仿真小程序
- 🔗👶 Tinkercad
- 🔗👶 Voltsim
- 🔗 Velxio - Arduino 和嵌入式板仿真器
- 🔗 picoZ80
🔵 QEMU
- 🔗 QEMU 文档
- 📝 在 QEMU 中运行 AVR 代码 - 加速 AVR 固件开发的快速入门指南
- 📝 QEMU 仿真 - 闪烁 - STM32F767ZI 全栈
- 📝 在 QEMU 中仿真 Raspberry Pi
🔵 Renode
- 🔗 Renode - GitHub 仓库
- 🔗 Renode - 文档
- 🔗 Renode - 官方教程
- 📝 使用 Renode 进行 Cortex-M MCU 仿真
- 📝 Renode 入门简单指南
- 🎞️ 在 CI 工作流中使用 Renode 将 TensorFlow Lite 引入 Zephyr
✳️ 传感器和执行器
传感器和执行器是嵌入式系统的眼睛和双手。它们负责收集有关环境的信息,并根据这些信息采取行动。传感器将物理现象(如温度,光或声音)转换为嵌入式系统可以处理的电信号。另一方面,执行器将电信号转换为物理动作,如控制电机速度或打开和关闭阀门。
🔵 传感器
- 📝 校准传感器
- 📝 DHT11 vs DHT22 vs LM35 vs DS18B20 vs BME280 vs BMP180
- 🎞️ STM32 和 Nucleo 入门第二部分:如何使用 I2C 读取温度传感器 TMP102
- 🎞️ GPS 模块和 STM32 || NEO 6M || 获取坐标、日期、时间、速度等
- 🎞️ 接口 MPU6050/GY-521 与 STM32 || LCD 20x4 || CubeMx || HAL || SW4STM
- 📝 Arduino 与 PIR 运动传感器
- 📝 超声波传感器 HC-SR04 完整指南,使用 Arduino
- 🎞️ 电子基础 #15:温度测量(第1部分)|| NTC、PT100、惠斯通电桥
🔵 执行器
- 📝 Adafruit 电机选择指南
- 🎞️ 使用 STM32 的 PWM 电位器直流电机速度控制器
- 📝 关于步进电机的一切
- 📝 使用 CircuitPython 和 Arduino 使用舵机
- 🎞️ 电子基础 #25:舵机及其使用方法
- 🎞️ 电子基础 #24:步进电机及其使用方法
- 🎞️ 电子基础 #18:直流和无刷直流电机 + ESC
✳️ 数字信号处理
数字信号处理(DSP)是处理数字信号的工程分支。它广泛应用于嵌入式系统、通信系统和多媒体系统等各种应用。DSP 算法通常使用专用集成电路(ASIC)或现场可编程门阵列(FPGA)在硬件中实现。
🔵 DSP 基础和滤波器设计
- 📘💎 科学家和工程师数字信号处理指南 - Steven W. Smith
- 🎞️ FIR 滤波器设计和软件实现 - Phil’s Lab #17
- 🎞️ IIR 滤波器 - 理论和实现(STM32)- Phil’s Lab #32
- 🎞️ 数字信号处理(ECSE-4530)讲座,2014 年秋季 (YouTube 播放列表)
- 🎞️ Udemy – 数字信号处理(DSP)从零开始用 C 编程
- 📘 实时数字信号处理:基础、实现和应用 - Sen M. Kuo, Bob H. Lee, Wenshun Tian
- 📘 从 MATLAB 到 C 的实时数字信号处理,使用 TMS320C6x DSP - Thad B. Welch, Cameron H.G. Wright, Michael G. Morrow
- 📘 信号与系统大纲 - Hwei P. Hsu
- 📘💎 数字信号处理 - John G. Proakis, Dimitris K. Manolakis
- 📘 计算机音乐入门
🔵 离散傅里叶变换 / FFT
- 🎞️ 离散傅里叶变换 - 简单循序渐进
- 🎞️ 快速傅里叶变换(FFT):有史以来最巧妙的算法?
- 🎞️ FFT 算法 - 简单循序渐进
- 🎞️ STM32 快速傅里叶变换(CMSIS DSP FFT)- Phil’s Lab #111
✳️ 控制理论
- 🎞️ 理解控制系统 (YouTube 播放列表)
- 🎞️ 控制系统 - CircuitBread (YouTube 播放列表)
- 🎞️💎 Brian Douglas 的控制系统讲座 (YouTube 频道)
- 📘💎 控制系统工程 - Norman S. Nise
- 📘💎 现代控制系统 - Richard C. Dorf, Robert H. Bishop
- 🔗 卡尔曼滤波器
🔵 PID 控制器
- 🎞️👶 什么是 PID 控制器?| DigiKey
- 🎞️👶 如何为倒立摆调整 PID 控制器 | DigiKey
- 🎞️ PID 控制器解释
- 🎞️ 理解 PID 控制 (YouTube 播放列表)
- 🎞️ 软件中的 PID 控制器实现 - Phil’s Lab #6
🔵 MATLAB / Simulink
- 🎞️ MATLAB 教程:MATLAB 入门 (YouTube 播放列表)
- 🎞️ Simulink 入门 (YouTube 播放列表)
- 🎞️ Udemy – MATLAB/SIMULINK 权威指南|从零到英雄!
✳️ 操作系统
嵌入式系统可以使用操作系统(OS)编程,也可以直接在硬件上编程,称为裸机编程。每种方法都有其优缺点。嵌入式操作系统在硬件和应用程序代码之间提供了一层抽象,提供资源管理、任务调度、错误处理和通信能力等好处。然而,它们增加了开销,可能不适合内存受限的应用。
🔵 操作系统基础
- 📝👶 把"你"放入 CPU
- 📝👶 用 1000 行代码编写操作系统
- 📘👶 关于 OS 开发的小书
- 📘👶 操作系统:从 0 到 1
- 🔗 一个操作系统
- 📝 将 Mac OS X 移植到 Nintendo Wii
- 📘💎 操作系统:三件容易的事 - Remzi H Arpaci-Dusseau, Andrea C Arpaci-Dusseau
- 📘💎 现代操作系统 - Andrew S. Tanenbaum, Herbert Bos
- 📝 用 Rust 编写操作系统 - Philipp Oppermann 的博客
- 🔗 在 Raspberry Pi 上用 Rust 进行操作系统开发教程
🔵 实时操作系统
实时操作系统(RTOS)是专为满足严格的时间期限而设计的专用操作系统。它们用于时间关键型的嵌入式系统,如航空电子、机器人和医疗设备。RTOS 提供了一个确定性环境,在该环境中任务可以以可预测的时间执行。这确保了关键任务始终能及时执行,即使在存在中断和其他干扰的情况下。
🔶 RTOS 基础
- 📝 裸机和基于 RTOS 的嵌入式系统
- 📝 RTOS 与裸机:导航性能、复杂性和效率
- 📝 RTOS 与裸机的优缺点:您会选择哪个?
- 📝 嵌入式系统的 FreeRTOS 与 Linux 比较
- 🔗 tinyOS RTOS
- 🔗 实时系统概念
- 🔗 RTOS 基础
- 📝 通过中断驱动的 Actor 模型实现的简单调度器
- 📝 ARM Cortex-M RTOS 上下文切换
- 🎞️ RTOS (YouTube 播放列表)
- 🎞️ 超越 RTOS (YouTube 播放列表)
🔶 FreeRTOS
- 🔗 FreeRTOS - 市场领先的 RTOS
- 🎞️👶 RTOS 简介 (YouTube 播放列表)
- 📘💎 掌握 FreeRTOS 实时内核 - 实践教程指南
- 🎞️👶 Microchip University - FreeRTOS 简明化:开发和调试 FreeRTOS 应用程序初学者指南
- 🎞️ STM32 和 Nucleo 入门第三部分:FreeRTOS - 如何使用 CMSIS-RTOS 运行多个线程
- 📘 使用 FreeRTOS、微控制器和 SEGGER 调试工具构建实时嵌入式系统的动手 RTOS:Brian Amos
- 📘 STM32 入门:使用 FreeRTOS、libopencm3 和 GCC 开发 - Warren Gay
- 🔗 SafeRTOS - 安全关键实时操作系统
🔶 Zephyr
- 🔗 Zephyr® 项目
- 📝💎 Zephyr 入门
- 🔗 Zephyr:初学者教程
- 📝 为什么我们从 FreeRTOS 迁移到 Zephyr RTOS
- 🔗 nRF Connect SDK
- 🎞️ Zephyr OS 上的 ESP32 (YouTube 播放列表)
- 🎞️💎 Zephyr 简介 - Digikey (YouTube 播放列表)
🔶 μC/OS / Micriμm OS
🔶 NuttX
🔶 RT-Thread
🔶 Mbed OS
🔶 QNX
🔶 VxWorks
🔶 Azure RTOS (ThreadX)
🔵 嵌入式 Linux
嵌入式 Linux 是为嵌入式系统量身定制的 Linux 操作系统专用版本。它设计用于在资源受限的设备上运行,如内存、处理能力和功耗受限的设备。
- 📝 什么是嵌入式 Linux?
- 📝 嵌入式系统的 FreeRTOS 与 Linux 比较
- 🎞️👶 嵌入式 Linux 简介 (YouTube 播放列表)
- 📝 掌握嵌入式 Linux 系列 - George Hilliard 的博客
- 📘💎 掌握嵌入式 Linux 编程 - Chris Simmonds
- 🎞️💎 Coursera - 高级嵌入式 Linux 开发专业化
- 🔗 Linux From Scratch - 构建您自己的自定义 Linux 系统的循序渐进说明
- 🔗 汽车级 Linux (AGL)
- 🔗 实时 Linux 和
PREEMPT_RT补丁 - 🔗 Android 开源项目
- 🔗 Android Automotive
🔶 Linux 内核
🔶 Linux 设备驱动程序
- 📝👶 编写简单的 Linux 内核模块
- 📘💎 Linux 设备驱动程序 - Jonathan Corbet, Alessandro Rubini, Greg Kroah-Hartman
- 📘 Linux 内核模块编程指南
- 📘 掌握 Linux 设备驱动程序开发 - John Madieu
- 📝 2022 年用 Rust 编写内核驱动程序
🔶 U-Boot
🔶 Buildroot
- 🔗 Buildroot 文档
- 🎞️ 嵌入式 Linux 入门第一部分 - Buildroot | Digi-Key Electronics
- 📝 使用 Buildroot 构建小型 Raspberry Pi Linux 镜像
🔶 Yocto
- 🔗 Yocto 项目快速构建
- 🔗💎 Yocto 项目文档
- 🎞️ 嵌入式 Linux 入门第二部分 - Yocto 项目 | Digi-Key Electronics
- 📝 使用 Yocto 项目为 Raspberry Pi 板构建 Linux 镜像
- 🎞️ Yocto 项目教程系列(基础到高级)(YouTube 播放列表)
- 🎞️ Udemy – 使用 Yocto 的嵌入式 Linux
- 📘💎 使用 Yocto 项目的嵌入式 Linux 系统 - Rudolf J.Streif
- 📘 使用 Yocto 项目 Cookbook 进行嵌入式 Linux 开发 - Alex Gonzalez
- 📘 Bootlin 嵌入式 Linux、内核、驱动程序、Yocto、Buildroot 和图形培训
🔶 多线程和并行处理
- 📝 线程/并发与并行
- 📝 多线程和并行编程
- 📝 多任务 vs 多线程 vs 多处理
- 📘💎 POSIX 线程编程 - David Butenhof
- 📘 C++ 并发实战 - Anthony Williams
🔶 高性能计算 (HPC)
- 🔗 OpenMP 并行编程和性能优化
- 🎞️ OpenMP 简介 - Tim Mattson (Intel) (YouTube 播放列表)
- 🔗 OpenCL 教程
- 🔗 CUDA C++ 编程指南
- 🔗 Mvidia
- 🔗 每个重要的 GPU
🔶 进程间通信 (IPC)
- 📝 进程间通信 (IPC)
- 📝 Linux 中的进程间通信是什么?
- 🎞️ Udemy – Linux 进程间通信 (IPC) 从零开始用 C 编程
- 📘 极限 C - Kamran Amini | 第 19 章:单主机 IPC 和套接字
- 🎞️ Udemy – 使用 Qt 5 C++ 的多线程和 IPC
- 📝 D-Bus 教程
🔶 Qt 框架
✳️ 调试
调试嵌入式系统包括识别和解决软件缺陷和硬件故障。采用各种技术来查明问题的根本原因,如静态代码分析、动态分析、仿真和模拟、在线调试和硬件调试。
🔵 JTAG / SWD
JTAG 和 SWD(串行线调试)是两种流行的接口协议,用于调试和编程嵌入式系统。JTAG 是一种更通用的协议,可用于调试和编程更广泛的设备,而 SWD 是一种更简单、更紧凑的协议,专门为 ARM 微控制器设计。
- 📝 深入了解 ARM Cortex-M 调试接口
- 🔗 指南:连接您的调试器
- 🎞️ STM32 + SWD + ST-Link + CubeIDE | 在自定义硬件上调试教程 - Phil’s Lab #4
- 📝 深入 JTAG 协议。第 1 部分 — 概述
- 📝 深入 JTAG 协议。第 2 部分 — 调试
- 📝 深入 JTAG 协议。第 3 部分 — 边界扫描
🔵 GDB
GDB(GNU 调试器)是一个强大的多功能调试器,用于源代码级和机器级调试。它支持多种编程语言,包括 C、C++、Objective-C、Java 和 Rust。GDB 是一个免费的开源软件工具,被开发人员和研究人员广泛使用。
- 📝 GDB 高级用法
- 📝 断点是如何工作的?
- 🔗 GNU GDB 调试器命令速查表
- 🔗 gdbgui - 基于浏览器的 gdb (gnu 调试器) 前端
- 🎞️ 每个人都应该停止使用打印调试(改为这个)
- 🎞️ GDB 真的很简单!用几个命令在代码中查找错误
- 📝 ARM 半主机简介
🔵 OpenOCD
OpenOCD(开源片上调试器)是一个开源软件工具,为调试和编程嵌入式系统提供了一个强大而通用的平台。它作为硬件调试适配器(HDA)和调试器(如 GNU 调试器(GDB))之间的接口,使开发人员能够与目标微控制器或微处理器交互。OpenOCD 支持广泛的硬件平台,并提供全面的硬件调试、编程和边界扫描测试功能集。
✳️ 构建系统
构建系统自动化将源代码编译和链接为可执行程序的过程。它们是软件开发的重要工具,可以帮助提高构建过程的效率和一致性。流行的构建系统包括 Make 和 CMake。
🔵 编译器 / GCC
GCC(GNU 编译器集合)是一个免费的开源编译器系统,可以为许多不同的编程语言编译程序,包括 C、C++、Objective-C、Fortran、Ada 和 Go。由于其开源性、成熟度、稳定性、可移植性、性能和大型社区,GCC 是嵌入式系统开发的流行选择。另一方面,Keil 和 IAR 等专有编译器提供工具链支持、特定目标优化和客户支持,可能更适合特定项目。
- 📝 GCC 和 Make - 编译、链接和构建 C/C++ 应用程序
- 📝 嵌入式最佳和最差的 GCC 编译器标志
- 📝 从零到 main():固件链接脚本揭秘
- 📝 裸机 - 从零到闪烁
- 🔗 Keil MDK & µVision
- 🔗 IAR Embedded Workbench
🔵 Make / CMake
CMake 和 Make 都是用于构建软件应用程序的工具。CMake 是一个元构建系统,生成 Makefile,然后由 Make 用于构建软件。CMake 比 Make 更通用和跨平台,正在成为现代软件开发中更流行的选择。
- 📝 GNU Make 浅析
- 🎞️ 使用 Make、CMake 和 arm-gcc 编译器工具链从零开始构建 STM32 项目 (YouTube 播放列表)
- 🔗 CMake 教程
- 🎞️ 如何 CMake 才好 (YouTube 播放列表)
- 📝👶 注释最详细的嵌入式 CMakeLists 文件
- 🔗 轻量级 C/C++ 构建和工作流工具
🔵 Bash 脚本
Bash 脚本在嵌入式系统开发中是一个强大的工具,使开发人员能够自动化重复性任务、处理复杂配置并有效地管理嵌入式系统环境。Bash 脚本是一个特定于 Linux 的工具,原生未集成到 Windows 中。但是,可以通过 Windows Subsystem for Linux (WSL) 访问它。
🔵 Docker
Docker 容器为构建软件应用程序提供了一致和隔离的环境。这可以帮助提高构建的可重复性并降低错误风险。Docker 还使共享构建环境变得更容易,可以为开发人员节省时间和精力。
- 🔗 Docker 文档
- 🔗 Docker 速查表
- 📝👶 Docker 傻瓜指南
- 🎞️ 嵌入式开发人员 Docker 简介
- 🎞️ CI/CD 入门第一部分:Docker 入门 | Digi-Key Electronics
- 📝 现代 C 开发环境
✳️ 软件开发生命周期 (SDLC) 模型
软件开发生命周期(SDLC)模型为软件开发提供了结构化方法,指导从规划到部署和维护的过程。这些模型为组织、管理和执行软件项目提供了一个框架,确保一致和高效的开发过程。
🔵 敏捷 / SCRUM
- 📝 敏捷适用于嵌入式软件吗?
- 📝 嵌入式软件的 Scrum:很好——但原因与您的经理认为的不同
- 📝 什么是 Scrum:最流行的敏捷框架指南
- 📝 Scrum 会议的敏捷指南
- 📝 什么是规模化敏捷框架?(SAFe)
- 🔗 Jira - 问题与项目跟踪软件
🔵 V 模型(V 周期)
✳️ 版本控制系统
版本控制系统是管理代码和其他数字资产更改的基本工具。它们跟踪随时间的变化,允许开发人员回滚到以前的版本,有效协作并识别潜在冲突。流行的版本控制系统包括 Git、Mercurial 和 Subversion。
🔵 Git
🔵 SVN (Subversion)
✳️ 测试
测试是嵌入式系统开发过程不可或缺的组成部分,确保这些系统的质量、可靠性和安全性。它涉及一系列技术,从单元测试到系统测试,以验证软件和硬件组件的功能和性能。
🔵 测试驱动开发 (TDD)
- 📘💎 嵌入式 C 测试驱动开发 - James Grenning
- 📝 测试:单元 vs 集成 vs 回归 vs 验收
- 📝 使用 Renode 和 GitHub Actions 进行固件测试
- 📝 测试覆盖率与开销的平衡
🔶 单元测试
- 📝 嵌入式 C/C++ 单元测试基础
- 📝 嵌入式 C/C++ 单元测试与模拟
- 🔗 C 单元测试(特别是嵌入式软件)
- 📝 如何使用 Ceedling 进行嵌入式测试驱动开发
- 📘 单元测试原则、实践和模式 - Vladimir Khorikov
- 🔗 Catch2 - 一个现代的、C++ 原生的单元测试框架
- 🔗 pytest-embedded
- 📝 使用 Pytest 测试 ESP32 代码简介
- 🔗 Pigweed
🔸 GoogleTest - Google 测试和模拟框架
🔶 集成测试
🔵 CI/CD 流水线
持续集成(CI)和持续交付(CD)是自动化构建、测试和部署软件过程的软件开发实践。CI/CD 流水线旨在确保软件更改快速且可靠地部署。
- 🎞️ CI/CD 入门第一部分:Docker 入门 | Digi-Key Electronics
- 🎞️ CI/CD 入门第二部分:GitHub Actions 入门 | Digi-Key Electronics
- 📝 如何为嵌入式软件构建持续集成和交付流程
- 📝 嵌入式开发中持续交付指南
- 🎞️ 嵌入式系统的持续交付 • Mike Long • GOTO 2015
- 📝 嵌入式系统持续集成和持续交付(白皮书)
- 📝 嵌入式设备公司中的 DevOps 是什么?
- 🎞️💎 CI/CD 教程 (YouTube 播放列表)
🔵 SIL / HIL 测试
软件在环(SIL)和硬件在环(HIL)测试是嵌入式系统开发中使用的两种关键技术,用于在将软件部署到真实硬件之前验证其功能和性能。这些测试方法使用软件模型或硬件仿真器模拟嵌入式系统的真实世界环境。
🔵 标准和认证
嵌入式系统开发受各种标准和认证的约束,这些标准和认证作为指南和基准,确保这些系统的质量、安全性和可靠性。这些标准通常由行业机构制定和维护,如国际电工委员会(IEC)和汽车工程师协会(SAE)。
🔶 功能安全
- 🎞️👶 Microchip University - 功能安全简介
- 🎞️ Udemy – 根据 ISO 26262 的功能安全 - 速成课程
- 📝 MISRA C 编码标准指南 - MISRA C 和 MISRA C++
- 📝 Jack Ganssle 的固件开发标准
- 📝 安全关键嵌入式系统:如何为软件开发做准备
- 📝 DO-178C - 航空系统和设备认证中的软件考虑
✳️ 嵌入式安全
嵌入式系统安全特别具有挑战性,因为资源限制和这些设备的固有性质。嵌入式系统通常在具有有限内存和处理能力的小型低功耗微控制器上运行。这使得实现与传统计算平台相同级别的安全性变得困难。此外,嵌入式系统通常对更新和补丁的访问有限,使它们更容易受到已知漏洞的影响。
🔵 硬件黑客
学习硬件黑客技术有助于安全专业人员理解嵌入式系统是如何被攻破的,从而能够设计和开发有效的防御措施来抵御网络攻击。这类知识能够显著提升嵌入式设备在面对攻击时的安全性与韧性。
- 📘💎 实用硬件渗透测试 - Jean-Georges Valle
- 🎞️ 硬件黑客教程 (YouTube 播放列表)
- 📘💎 硬件黑客手册:使用硬件攻击破解嵌入式安全 - Jasper van Woudenberg, Colin O’Flynn
- 🔗 官方 WiFi Pineapple 分页有效载荷仓库
🔵 密码学
- 🎞️👶 Microchip University - 密码学入门
- 🎞️ 哈希、哈希算法和冲突 - 密码学 - 实用 TLS
- 🎞️ 数据完整性 - 哈希如何用于确保数据未被修改 - HMAC - 密码学
- 🎞️ 加密 - 对称加密与非对称加密 - 密码学 - 实用 TLS
- 🎞️ 公钥和私钥 - 签名和密钥交换 - 密码学 - 实用 TLS
- 🎞️ 理解 AES 加密机制:BMPS
- 📘💎 理解密码学:学生和从业者的教科书 - Christof Paar, Jan Pelzl
- 📘💎 应用密码学手册 - Alfred J. Menezes, Paul C. van Oorschot, Scott A. Vanstone
- 📘 严肃的密码学:现代加密实用入门 - Jean-Philippe Aumasson
- 🎞️ MOOC - 安全第2部分:密码学基础 (YouTube 播放列表)
- 🎞️ MOOC - 安全第3部分:STM32 安全功能 (YouTube 播放列表)
- 📝 嵌入式 Linux 开发人员的加密入门
- 📝 对称密钥加密的实践方法
- 📝 实践中的非对称密钥加密和数字签名
🔵 安全启动和安全固件更新
- 📝 AVR231:AES 引导加载程序
- 🎞️ 从闪烁到引导加载程序:裸机编程系列 (YouTube 播放列表)
- 🎞️ MOOC - 安全第4部分:STM32 安全实践 (YouTube 播放列表)
- 🎞️ MOOC - 安全第5部分:如何定义您的安全需求 (YouTube 播放列表)
- 🎞️ MOOC - 安全第6部分:STM32 安全生态系统,从理论到实践 (YouTube 播放列表)
- 🎞️ TPM(可信平台模块)- Computerphile
- 🎞️ 使用 TPM 2.0 保护嵌入式 Linux 系统 - Philip Tricca, Intel
- 📝 TPM:嵌入式设备的基本应用
- 📝 嵌入式 Linux 设备的 OTA:实用入门
- 📝 嵌入式 Linux 安全简介 - 第1部分
- 📝 嵌入式 Linux 安全简介 - 第2部分
✳️ 嵌入式 GUI
图形用户界面(GUI)已成为现代嵌入式系统不可或缺的组成部分,为与设备交互提供了用户友好和直观的方式。为嵌入式系统设计有效的 GUI 需要仔细考虑资源限制、用户体验和实时性能等因素。
✳️ 物联网 (IoT)
物联网(IoT)指的是互联设备的网络,这些设备收集数据并与其他设备或云交换数据。嵌入式系统通常是物联网设备的"大脑”,管理数据收集、处理和通信任务。嵌入式系统设计用于在有限的电源和资源下运行,使它们非常适合物联网应用。
🔵 差分空中固件更新
✳️ 边缘 AI
边缘 AI 指的是设备能够自行执行机器学习任务的能力,无需将数据发送到中央服务器。这可以通过使用直接嵌入设备内的小型专业 AI 模型来完成。TinyML 是边缘 AI 的一个子集,专注于为计算能力非常有限的设备(如微控制器和传感器)开发这些模型。
🔵 AI 和 ML 基础
🔵 TensorFlow Lite
- 🎞️ TensorFlow 和 Keras 入门 – Maker.io | Digi-Key Electronics
- 🎞️ TensorFlow Lite 第一部分简介:唤醒词特征提取 – Maker.io | Digi-Key Electronics
- 🎞️ TensorFlow Lite 第二部分简介:语音识别模型训练 – Maker.io | Digi-Key Electronics
🔵 TinyML
- 🎞️👶 TinyML 第一部分简介:在 TensorFlow 中为 Arduino 训练神经网络 | Digi-Key Electronics
- 🎞️👶 TinyML 第二部分简介:将 TensorFlow Lite 模型部署到 Arduino | Digi-Key Electronics
- 🎞️ Coursera - 嵌入式机器学习简介
- 🎞️ TinyML:TensorFlow Lite for Microcontrollers 入门 | Digi-Key Electronics
- 🎞️ TinyML:STM32 X-CUBE-AI 入门 | Digi-Key Electronics
- 🎞️ edX - TinyML 基础
- 🎞️ edX - TinyML 应用
- 🎞️ edX - 部署 TinyML
- 🎞️ edX -规模化 TinyML 的 MLOps
- 📘 TinyML:TensorFlow Lite 在 Arduino 和超低功耗微控制器上的机器学习 - Pete Warden, Daniel Situnayake
✳️ AUTOSAR 架构
AUTOSAR,即汽车开放系统架构,是一个全球性的汽车工业软件标准。它是一种软件架构,为开发 和集成车辆电子控制单元(ECU)中的软件组件提供了标准化平台。这允许来自不同制造商的不同 ECU 能够无缝通信和协作。
- 🔗 AUTOSAR 标准
- 🎞️ AUTOSAR 基础 | AUTOSAR 教程 | 架构 | 汽车
- 🎞️ AUTOSAR 简介
- 🎞️ Udemy - Autosar 架构(从零开始学习与演示)
- 📝 OSEK OS 概述
- 💎 🔗 OSEK/VDX 操作系统规范 2.2.3
- 💎 🔗 OSEK/VDX OIL(OSEK 实现语言)规范 2.4.1
✳️ 附录 A:高级主题
🔵 离散数学
一门通用核心课程:这是一门对计算机科学学生以及部分数学和电气工程专业学生都至关重要的公共基础课程,其设置依据是计算机协会关于 CS/CE 教育的指南。该课程涵盖了抽象数学建模和计算理论中最为核心的内容。此外,它有助于学生建立关键的工程化思维方式,构成所有计算机科学与计算机工程领域的共同基础。然而,对于嵌入式系统工程师而言,逻辑、组合数学理论、编码理论以及计算理论是最为重要的核心科目。
学习离散数学的目标:嵌入式系统工程师应当根据自身的专业方向,最终掌握其中的大部分内容;因为离散数学解释了计算机工程的科学与理论基础。例如:用于音频/视频编码与解码以及数据传输的编码理论,用于事件控制和数据传输的自动机理论,用于数字电路设计和开关代数的逻辑理论,以及用于并发建模的 π 演算和自动机理论。
离散数学是一门多学期课程,涉及计算机科学理论数学基础的主题,包括但不限于:
- 逻辑(命题、量词和规范形式)。
- 公理化集合论(集合、集合运算和幂集)。
- 关系集和函数理论(即 λ 演算)。
- 组合学理论。
- 矩阵和图论。
- 计算理论(即计算自动机理论、计算复杂性、计算可判定性)。
- 自动机理论(例如,有限状态机、下推自动机、图灵机和细胞自动机)。
- 过程建模/演算(即 π 演算)。
- 编码理论。
- 除法定理模运算(数论部分)。
- 📘💎 Rosen 的离散数学及其应用
- 📘💎 Susanna S. Epp 的离散数学及其应用
- 📘💎 开关和有限自动机理论,Cambrdige Press
- 📘💎 Bernard Kolman 的离散数学结构
- 📘💎 离散数学邀请,牛津大学出版社
- 📘💎 元胞自动机的数学 by Jane Hawkins, AMS
历史
起初这只是我的个人阅读列表,但随着列表逐渐越来越大,我想为什么不与他人分享。所以我研究了当前嵌入式工程职位的招聘信息,选择了最常见的技能,并将它们包含在路线图中。为了使路线图更全面,我还添加了一些基本技能,最终得到了您现在看到的内容。
创建这个路线图的想法来自 vazeri / Embedded-Engineering-RoadMap-2018,它设计得很好但有一些缺陷且多年未更新。我采纳了那个想法,更改了路线图的结构并尝试改进它。最初的结果可以在 m3y54m / Embedded-Engineering-Roadmap-Archived 访问,现在已归档。路线图的早期版本是使用 Balsamiq Wireframes 创建的,它不适合这类图表。所以我决定改用 Microsoft Visio 并重新绘制了整个图表。
版权
本作品采用 Creative Commons Attribution-ShareAlike 4.0 International License 授权,这意味着您可以自由地共享或改编本作品,但须遵守以下条款:
-
署名 — 您必须给予适当的署名,提供指向许可协议的链接,并注明是否进行了修改。您可以通过任何合理的方式履行这些要求,但不得以任何形式暗示许可方认可您或您的使用方式。
-
相同方式共享 — 如果您再编、转换或基于本作品进行创作,必须在相同的许可协议下分发您的贡献作品。
致谢
特别感谢我在 Twitter 上的伊朗嵌入式工程师社区和 r/embedded 子版块的朋友们,他们的建议帮助改进了这个路线图。
贡献
如果您认为这个路线图可以以任何方式改进,或者您知道一些可以添加在这里的优秀学习资源,请提出 issue 或 pull request。我将经常维护和更新此仓库。
源文件是使用 Microsoft Visio 以 .vsdx 格式创建的,并包含在此仓库中供您贡献。如果您没有 Microsoft Visio 或想使用免费软件,可以使用 draw.io,它可以导入和导出 .vsdx 文件。