本文档为一份详尽的嵌入式工程学习指南,原英文作者为 Meysam Parvizi,为有志于成为嵌入式工程师的人提供了一份全面的路线图,其中包括精选的学习资源列表。
Original: https://github.com/m3y54m/Embedded-Engineering-Roadmap
这份路线图旨在帮助渴望成为嵌入式工程师/开发者的初学者,并帮助现有从业者扩展其技能。
嵌入式工程需要对硬件功能以及软件开发和编程技能有扎实的理解。如果你真的想追求这个职业,你必须有高度的动力和热情。正如著名的谚语所说,“硬件很难!”但不要惊慌,面对这段激动人心的旅程中可能遇到的挑战要有耐心。通过投入足够的时间和努力进行练习和项目,你很快就会发现自己成为了一名真正的嵌入式工程师!😀
❓ 什么是嵌入式系统?
ISO/IEC/IEEE 24765 标准:
嵌入式系统是一个更大系统的一部分,并执行该系统的一些要求。例如,用于飞机或快速运输系统的计算机系统。
嵌入式系统的硬件和软件通常被最小化并针对特定功能进行优化。嵌入式系统至少包括一个微控制器、微处理器或数字信号处理器。嵌入式系统旨在为应用优化可靠性、成本、尺寸和节能。
“Making Embedded Systems” 书籍:
嵌入式系统是一个为其应用特定目的构建的计算机化系统。
“Computer Organization and Embedded Systems” 书籍:
一个物理系统,使用计算机控制来实现特定目的,而不是用于通用计算,被称为嵌入式系统。
Analog Devices 术语表:
嵌入式系统是将计算机(通常是微控制器或微处理器)作为系统的一个组成部分的系统。
通常,计算机对用户是相对不可见的,没有明显的应用程序、文件或操作系统。例如,运行微波炉的控制器或现代汽车的发动机控制系统。
Embedded Systems 术语表:
由计算机硬件和软件以及其他可能的机械部件或其他部分组合而成,设计用于执行专用功能。
在某些情况下,嵌入式系统是一个更大系统或产品的一部分,如汽车中的防抱死刹车系统。
🗺️ 路线图
嵌入式系统工程路线图分为三个基本领域:软件、硬件和软技能。
虽然嵌入式系统中硬件和软件的交集很常见,但具体的职位名称往往侧重于一个方面。例如,“嵌入式软件工程师/开发者”、“固件工程师/开发者”、“嵌入式 Linux 工程师/开发者”等职位主要关注软件开发。相比之下,“嵌入式硬件工程师”和“硬件设计工程师”等职位主要处理硬件设计和电子学。此外,还有“嵌入式系统工程师”等职位需要对硬件和软件有全面的理解。
重要的是,每个嵌入式行业的公司对某个职位的要求可能各不相同。因此,必须根据你的职业目标调整重点。如果你要找嵌入式软件职位,优先考虑路线图中列出的软件相关技能。相反,如果你对嵌入式硬件职位感兴趣,则侧重于硬件技能,并花更多时间学习电子学。
路线图提供了“嵌入式系统工程师”职位所需的重要主题指南。通过深入了解软件和硬件两个方面,你可以培养在这个动态领域中茁壮成长的必要技能。然而,如果你对软件或硬件有明确的偏好,可以相应地调整你的学习路径。
注意:个别软件和硬件技能的重要性会因公司和职位的具体要求而有所不同。
提示:为了区分不同类型的学习资源及其内容质量,具体符号用于每个项目之前。
资源类型:
📘 :书籍
🎞️ :视频
📝 :写作、文章和博客帖子
🔗 :其他不属于上述类别的链接
内容质量符号:
👶 :易于理解且适合初学者的资源。如果你对某个主题没有先前知识,请参考这些。
💎 :著名参考资料,内容真正无价且全面。如果你想深入理解某个主题,请参考这些。
😕 不知道从哪里开始!
如果你看到路线图上冗长的主题列表感到不知所措,你并不孤单。在深入研究之前,让我们通过一些简单的入门项目来轻松开始。学习嵌入式系统工程需要时间和努力。如果你一开始不理解某些东西,不要灰心。继续练习,你最终会成功的。
项目
动手项目是学习的最有效方法,而不仅仅依靠书本或文章的理论知识。进行项目可以获得实际的学习经验。即使是看似基本的项目也能教会你比毫无目标的阅读更多的东西。当你在实际项目中遇到问题时,可以参考书籍、文章和课程以帮助理解问题。
不要立即尝试构建复杂的项目。先从小型、可管理的项目开始,逐步提升。
🔗 Random Nerd Tutorials | Learn ESP32, ESP8266, Arduino, and Raspberry Pi
🔗 Last Minute Engineers
🔗 51 STM32 Projects & Tutorials for Beginners and Up - Hackster.io
🔗 STM32 (STM32F103C8) Projects & Tutorials
🔗 ElectronicWings Projects
🔗 STM32 Firmware - Phil’s Lab (YouTube Playlist)
🔗 Raspberry Pi Based Embedded Project Ideas
🔗 Embedded Linux On ARM | Projects
搜索并提问!
使用搜索引擎找到你的问题答案。
🔗 Bing
🔗 DuckDuckGo
如果通过搜索引擎找不到想要的内容,AI 聊天机器人也能提供帮助。请记住,AI 在有些情况下可能会给出错误答案,最好通过更可靠的参考资料确认答案。
🔗 DuckDuckGo AI Chat
🔗 Microsoft Copilot
🔗 Google Gemini
🔗 ChatGPT
🔗 Claude AI
🔗 Poe - Fast, Helpful AI Chat
如果对仅依赖 AI 建议有所保留,你也可以向真实的人提问:
🔗 Electrical Engineering Stack Exchange
🔗 Reddit · r/embedded
课程和 YouTube 内容
你可能听说过 YouTube 是所大学,这是真的 — YouTube 上有大量关于嵌入式系统的宝贵免费内容。你还可以通过 Coursera 和 EdX 找到一些优秀的免费课程。此外,Udemy 也提供一些高质量的付费课程选项。
🎞️ DigiKey (YouTube Channel)
🎞️ Coursera - Introduction to Embedded Systems Software and Development Environments
🎞️ Coursera - Embedded Software and Hardware Architecture
🎞️ Fastbit Embedded Brain Academy
🎞️ Modern Embedded Systems Programming Course (YouTube Playlist)
🎞️ element14 presents (YouTube Channel)
🎞️ Ben Eater (YouTube Channel)
🎞️ Phil’s Lab (YouTube Channel)
🎞️ Embedded Systems - Jacob Sorber (YouTube Playlist)
🎞️ edX - Embedded Systems - Shape The World: Microcontroller Input/Output
🎞️ edX - Embedded Systems - Shape The World: Multi-Threaded Interfacing
🎞️ Embedded Systems, in Pyjama!
🎞️ Low Byte Productions
Arduino
如果你没有编程嵌入式系统的背景,Arduino 开发板和库是你入门和学习基础知识的最佳选择。请记住,大多数 Arduino 库是为学习目的开发的,并未优化用于工业。
另外,Arduino Core 负责大多数底层硬件操作,作为嵌入式工程师,你应该能够自己处理这些操作,或者至少清楚地理解它们的原理。如果你想成为专业的嵌入式开发者,你应该能够有效使用微控制器供应商提供和批准的行业标准 API 和 SDK,如 ARM Cortex-M 微控制器的 CMSIS、STM32 的 STM32Cube、Espressif 微控制器的 ESP-IDF 等。
🔗 Getting Started with Arduino
🎞️ All New Arduino R4 WiFi LESSONS for Absolute Beginners (YouTube Playlist)
🎞️ New Arduino Tutorials (YouTube Playlist)
🎞️ Arduino in a commercial product?
🎞️ Arduino Project to Product (YouTube Playlist)
教育网站
🔗 DeepBlueMbedded
🔗💎 Interrupt Blog by Memfault
🔗 Embedded Systems, in Pyjama!
🔗 ElectronicWings - Hardware Developers Community
🔗 Microchip University
🔗 Nordic Developer Academy
🔗 Electronics Tutorials
🔗 SparkFun Learn: Learn at SparkFun Electronics
🔗 Adafruit Learning System
🔗 STM32 World
🔗 ControllersTech
其他有用的路线图
🔗 Embedded Artistry Beginners Roadmap
🔗 Embedded Systems Skill Tree
🔗 PCB Design Skill Tree
🔗 FPGA / ASIC Engineering Roadmap
IDEs
🔗 Keil MDK & µVision
🔗 IAR Embedded Workbench
🔗 STM32CubeIDE
🔗 Microchip Studio for AVR® and SAM Devices
🔗 MPLAB® X IDE
🔗 MCUXpresso IDE
VS Code 扩展
🔗 Cortex-Debug
🔗 STM32 VS Code Extension
🔗 Espressif IDF
🔗 MCUXpresso for VS Code
PlatformIO
PlatformIO 是一个跨平台、跨架构、多框架的专业工具,适用于嵌入式系统工程师和为嵌入式产品编写应用程序的软件开发人员。
🔗 PlatformIO - A professional collaborative platform for embedded development
虽然 PlatformIO 尚未在工业和大规模项目中广泛采用,但对于个人处理小规模项目来说,它是一个优秀的选择。这是因为它极大地减少了安装框架和设置构建与调试工具的需求,使你可以专注于编程。
📚 学习资源
警告:没有必要阅读所有在这里列出的书籍、文章或观看所有视频。如果你尝试这样做,最终你会感到疲倦和失望。在合理的时间内你无法学习所有可用的内容,因为可能需要数年。重要的是学习足够多的内容以至少对所需主题有基本的理解。当然,投入更多时间学习和做项目,你的知识和专业能力会更加深厚。这里提到的一些资源仅供参考。只有在需要时才参考它们。
软技能
与其他职业类似,嵌入式工程师也需要软技能,而这些技能无法仅通过阅读或观看视频获得。这些技能是在互动和应对各种工作障碍中培养出来的。软技能的提升没有一个统一的方法。它会因个人特点而异,需要对自己优势和成长领域有自我认识。提升这些技能需要时间和努力。
📝 Soft Skills For Embedded Systems Software Developers
📝 10 Skills Every Embedded Engineer Should Have
电子学
基础数学与微积分
🎞️ Khan Academy - Calculus 1
📘👶 Calculus For Dummies - Mark Ryan
📘💎 Thomas’ Calculus
电路原理
🔗👶 Lessons in Electric Circuits (All About Circuits)
🔗👶💎 Electronics Tutorials
📘👶💎 Fundamentals of Electric Circuits - Charles K. Alexander, Matthew Sadiku
📘👶💎 Principles of Electric Circuits: Conventional Current Version - Thomas L Floyd, David M. Buchla
🎞️💎 Basic Circuit Theory I (By Prof. Razavi) (YouTube Playlist)
电子学基础
🔗👶💎 Build Electronic Circuits - Øyvind Nydal Dahl
🎞️👶 Electronic Basics - GreatScott! (YouTube Playlist)
📘👶 Make: Electronics: Learning by Discovery - Charles Platt
📘👶💎 Electronic Devices: Conventional Current Version - Thomas Floyd, David Buchla, Steven Wetterling
📘👶💎 Electronics Fundamentals: Circuits, Devices & Applications - Thomas L Floyd, David M. Buchla, Gary D. Snyder
📘👶 Practical Electronics for Inventors - Paul Scherz, Simon Monk
📘💎 The Art of Electronics - Paul Horowitz, Winfield Hill
📝 Here’s a Quick Way to Know about Major Electronic Components
📘 Encyclopedia of Electronic Components - Charles Platt
数字设计
🔗👶 Tiny Tapeout > Digital Design Guide
📘💎 Digital Design - Morris Mano, Michael Ciletti
📘👶💎 Digital Design and Computer Architecture: ARM Edition - Sarah Harris, David Harris
📘👶💎 Digital Design and Computer Architecture: RISC-V Edition - Sarah Harris, David Harris
📘👶 Digital Fundamentals - Thomas L. Floyd
计算机架构
计算机架构是嵌入式系统的支柱,管理着硬件和软件的交互。嵌入式开发者需要掌握计算机架构,以有效地设计、开发和调试嵌入式软件。对 ARM 和 RISC-V 这两种在嵌入式系统中广泛使用的指令集架构(ISA)的专业知识是嵌入式开发者的必备技能。ARM 是主导的 ISA,而 RISC-V 凭借其开源性质和灵活性正在获得关注。
📘👶💎 Computer Organization and Design: ARM Edition - David A. Patterson, John L. Hennessy
📘👶💎 Digital Design and Computer Architecture: ARM Edition - Sarah Harris, David Harris
📘👶💎 Digital Design and Computer Architecture: RISC-V Edition - Sarah Harris, David Harris
📘 Computer Organization and Embedded Systems - Carl Hamacher, Zvonko Vranesic, Safwat Zaky, Naraig Manjikian
📘 Embedded Systems Architecture - Tammy Noergaard
📘 Embedded Systems Architecture - Daniele Lacamera
📘 The Definitive Guide to ARM® Cortex®-M0 and Cortex-M0+ Processors - Joseph Yiu
📘 The Definitive Guide to ARM® Cortex®-M3 and Cortex®-M4 Processors - Joseph Yiu
🔗 Build an 8-bit computer from scratch
使用测试设备
嵌入式系统通常需要专门的测试设备来验证其功能和性能。这些设备包括万用表、示波器、逻辑分析仪、信号发生器、电源等工具,工程师可以使用它们测量信号、注入刺激并监测嵌入式系统的行为。
万用表
🎞️👶 Learn How to Use a Multimeter!
📝👶 How to Use a Multimeter
逻辑 / 协议分析仪
🎞️ Instrument Basics: Logic Analyzer
示波器
🎞️👶 What’s an OSCILLOSCOPE?
🎞️👶 How to Use an Oscilloscope
🎞️👶 How to use an oscilloscope / What is an oscilloscope / Oscilloscope tutorial
🎞️ Understanding EMI Debugging with Oscilloscopes
原型设计技能
虽然硬件设计和原型设计主要是电子硬件设计工程师的职责,但嵌入式软件工程师了解这些概念也大有裨益。这方面的知识在嵌入式系统调试过程中,识别和解决与硬件相关的问题时非常重要。掌握硬件原理,嵌入式软件工程师可以有效地定位问题的根本原因,从而更迅速、更高效地进行故障排除。
面包板搭建
面包板搭建是一种动手原型设计电路的方法,提供了一个多功能的平台用于实验和电路设计。嵌入式系统通常使用面包板,因为它们易于使用、灵活且具有成本效益。通过在面包板上连接组件,嵌入式系统开发者可以快速测试和完善他们的设计,无需永久焊接。这使得快速迭代和高效调试成为可能,使面包板成为嵌入式系统开发中的宝贵工具。
🎞️👶 Everything You Need to Know about Breadboards
🎞️👶 How to Use a Breadboard
硬件设计基础
🎞️👶💎 Hardware Design - Phil’s Lab (YouTube Playlist)
🎞️ Electronic Circuit Design - IFE - TU Graz (YouTube Playlist)
🎞️ Microcontroller-Based Hardware Design With Altium Designer (YouTube Playlist)
PCB 设计 / EMC
🎞️💎 Altium Academy YouTube Channel
🎞️💎 Robert Feranec YouTube Channel
🎞️👶 Altium Tutorials for Beginners - Robert Feranec (YouTube Playlist)
🎞️👶 Create PCBs for Rapid Prototyping - DigiKey (YouTube Playlist)
🎞️👶💎 PCB Design for Beginners - Altium Academy (YouTube Playlist)
🎞️ How to Make a Raspberry Pi Compute Module 4 Carrier Board - DigiKey (YouTube Playlist)
🎞️💎 How To Learn PCB Design (My Thoughts, Journey, and Resources) - Phil’s Lab #87
🎞️👶 KiCad 6 STM32 PCB Design Full Tutorial - Phil’s Lab #65
🎞️👶 Intro to KiCad - DigiKey (YouTube Playlist)
🎞️💎 PCB Design for EMI & SI - Phil’s Lab #64
🎞️💎 PCB Design for Advanced Users (YouTube Playlist)
🎞️💎 PCB Knowledge [PCB Production Tips By PCBWay] (YouTube Playlist)
🎞️💎 9 Simple Tricks to Improve EMC / EMI on Your Boards - Practical examples (with Min Zhang)
🎞️💎 Many EMC Tips to Help You Design Better PCB Boards (with Keith Armstrong)
🔗 LearnEMC - EMC Resources
🔗 A Better Way to Build PCBs - Flux AI
焊接 / 返工
🎞️👶 How To Solder - Electronics with Becky Stern | Digi-Key Electronics
🎞️👶 HOW TO SOLDER! (Beginner’s Guide)
🎞️👶 Soldering Crash Course: Basic Techniques, Tips and Advice!
🎞️ How to Solder Through-Hole Components - Another Teaching Moment | DigiKey Electronics
🎞️ How to Solder QFN MLF Package by Hand (Using a Hot Air Rework Station) | Digi-Key Electronics
🎞️ From Solderless Breadboard to Soldered Circuit - Electronics with Becky Stern | Digi-Key Electronics
FPGA 开发
FPGA(现场可编程门阵列)是可以配置以执行各种数字逻辑功能的专用集成电路。它们广泛应用于嵌入式系统,以实现高性能、灵活性和成本效益。FPGA 设计师使用硬件描述语言(HDL)来创建直接映射到 FPGA 架构的定制电路。由于 FPGA 工程和验证与嵌入式软件开发有显著不同,它在嵌入式系统中是一个专门的领域。
🔗 FPGA / ASIC Engineering Roadmap
📝 What are FPGAs?
📝 FPGA vs. Microcontroller: How to choose the right one for your project
🎞️👶 Introduction to FPGA (YouTube Playlist)
🔗👶 FPGA Fundamentals - Nandland
🎞️💎 Coursera – FPGA Design for Embedded Systems Specialization
📘💎 A Hands-On Guide to Designing Embedded Systems - Adam Taylor, Dan Binnun, Saket Srivastava
编程基础
掌握编程基础和软件开发原则是成功进行嵌入式设计的关键。嵌入式系统需要高效的代码、优化的数据管理、可复用的设计模式以及有效的内存管理,以便在资源受限的环境中正常运行。嵌入式开发人员必须拥有这些核心概念的坚实基础,才能创建可靠且高性能的嵌入式系统。
算法和数据结构
📘👶💎 Grokking Algorithms - Aditya Y. Bhargava
📘💎 Introduction to Algorithms - Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest and Clifford Stein
🔗 Collection of various algorithms in mathematics, machine learning, computer science, physics, etc implemented in C for educational purposes
🎞️ Udemy – Embedded Systems State Machines & Data Structures
🔗 Data Structures in C
🎞️ Data Structures - Full Course Using C and C++
🔗 Hello Algo
设计模式
📝 Practical Design Patterns: Opaque Pointers and Objects in C
📘💎 Design Patterns for Embedded Systems in C - Bruce Powel Douglass
📘💎 Making Embedded Systems: Design Patterns for Great Software - Elecia White
状态机
📝 Programming embedded systems the easy way – with state machines
🎞️💎 State Machines (YouTube Playlist)
🎞️💎 Event-Driven Programming (YouTube Playlist)
🎞️💎 Udemy - Embedded System Design using UML State Machines
📝 “Input-Driven” vs. Event-Driven State Machines
📝 State Machines for Event-Driven Systems
内存管理
🎞️ Understanding the C runtime memory model
🎞️ Pointers and dynamic memory - stack vs heap
🎞️ Dynamic Memory Allocation | C Programming Tutorial
🎞️ Dynamic memory allocation in C - malloc calloc realloc free
📝 What is Memory Leak in C/C++? How can we avoid?
📝 Understanding Memory Management in Rust
📝 Memory Management in Python
编程语言
低级语言如 C 和汇编语言提供直接的硬件访问,使得资源受限的嵌入式系统能够进行高效的代码优化。系统级语言如 C++ 和 Rust 为复杂的嵌入式应用程序提供了更高的抽象层次,而 Python 则因其简单性常用于测试嵌入式系统。
C
🎞️👶 Microchip University - Syntax And Structure of C - Simply C
🎞️💎 Microchip University - Advanced C Programming
🎞️💎 Microchip University - Advanced Embedded C Tips, Tricks, and Cautions
🎞️💎 Microchip University - C Programming: Linked List Data Structures
🎞️💎 Microchip University - C Programming Callbacks
🎞️👶 C Programming for Beginners | Full Course
🎞️ C Programming Tutorials (YouTube Playlist)
📘💎 The C Programming Language - Brian W. Kernighan, Dennis M. Ritchie
🔗👶 C by Example
📘 C How to Program - Paul Deitel, Harvey Deitel
📘 Effective C - An Introduction to Professional C Programming - Robert C. Seacord
🔗 Embedded C Coding Standard
🔗 newlib C Library Documentation
🔗 The GNU C Library (glibc)
📝 From Zero to main(): Bare metal C
📝 From Zero to main(): Bootstrapping libc with Newlib
C++
📝 Modern C++ in Embedded Development: (Don’t Fear) The ++
📝 C++ On Embedded Systems
🎞️👶 C++ Tutorial for Beginners - Full Course
🎞️ C++ by The Cherno (YouTube Playlist)
📘💎 Real-Time C++: Efficient Object-Oriented and Template Microcontroller Programming - Christopher Kormanyos
📘 Effective Modern C++ - Scott Meyers
汇编
📝👶 Introduction to ARM Assembly Basics
🎞️ Udemy – ARM GNU Assembly Programming From Ground Up
🎞️ Assembly Language Programming with ARM – Full Tutorial for Beginners
📝 How to Use Inline Assembly Language in C Code
Python
📝 Python for embedded systems testing
📝👶 The Python Handbook – Learn Python for Beginners
🔗💎 Real Python: Python Tutorials
📘👶💎 Python Crash Course - Eric Matthes
MicroPython
🔗 MicroPython - Python for microcontrollers
🔗 MicroPython 101 | Arduino Documentation
🔗 CircuitPython
📝 The Pros and Cons of Designing Embedded Systems with MicroPython
📝 Programming the ESP32 with MicroPython
Rust
📝 5 roadblocks to Rust adoption in embedded systems
🔗 The Embedded Rust Book
🎞️ The Future of Programming: Rust (YouTube Playlist)
🔗 Community Rust support projects for STM32 microcontrollers
🔗 Rust on ESP Community
📝 Rust on STM32: Getting started
📝 From Zero to main(): Bare metal Rust
📝 Writing an OS in Rust - Philipp Oppermann’s blog
📝 Kernel Driver with Rust in 2022
🔗 Rustlings - Small exercises to get you used to reading and writing Rust code!
Zig
📝 Testing Zig for embedded development
🔗 Zig Embedded Group
🔗 MicroZig - Unified abstraction layer and HAL for several microcontrollers
📝 Zig Bare Metal Programming on STM32F103 — Booting up
微控制器
微控制器是集成电路(IC),将微处理器、内存和输入 / 输出(I/O)外设集成在单个芯片上。它们设计用于嵌入式应用,用于在各种行业中控制设备,包括汽车、工业、消费电子和医疗保健。
一些流行的微控制器系列包括 AVR、PIC、STM32、MSP430、nRF 和 ESP32。选择合适的微控制器需要评估应用需求、处理能力、内存需求和输入 / 输出能力。此外,还需考虑易用性、成本、可靠性、可用性和未来扩展性。
📝 What Is a Microcontroller? The Defining Characteristics and Architecture of a Common Component
📝 How to Choose the Right Microcontroller for Your Application
📝 How to Read a Microcontroller Datasheet: Introduction and First Steps
📘👶 Make: AVR Programming - Elliot Williams
🎞️👶💎 NewbieHack - Microcontroller Tutorial - A Beginners Guide (AVR)
🎞️👶 Getting Started with STM32 and Nucleo (YouTube Playlist)
📘💎 Mastering STM32 - Carmine Noviello
📘💎 Developing IoT Projects with ESP32 - Vedat Ozan Oner
🎞️👶 Intro to Raspberry Pi Pico and RP2040 (YouTube Playlist)
🔗 Getting started with STM32: STM32 step-by-step
🎞️ Getting Started With AVR (YouTube Playlist)
🎞️ Fundamentals of Microcontrollers - Arduino bare-metal breakdown (YouTube Playlist)
🎞️ Bare Metal Embedded Programming: Theory and Practice Using STM32 (YouTube Playlist)
📘 Beginning STM32: Developing with FreeRTOS, libopencm3 and GCC - Warren Gay
🎞️ Udemy – Microcontroller Embedded C Programming: Absolute Beginners
🎞️ Udemy – Embedded Systems STM32 Low-Layer APIs(LL) Driver Development
🎞️ Udemy – Embedded Systems STM32 HAL APIs Driver Development
📘 Embedded System Design with ARM Cortex-M Microcontrollers: Applications with C, C++ and MicroPython - Cem Ünsalan, Hüseyin Deniz Gürhan, Mehmet Erkin Yücel
📘💎 Embedded Systems Design using the MSP430FR2355 LaunchPad - Brock J. LaMeres
📘💎 Building Embedded Systems: Programmable Hardware - Changyi Gu
🔗 Awesome Embedded: A curated list of awesome embedded programming
GPIO
🎞️ Tutorial 5: Peripheral 1 - General purpose Input Output (GPIO) Configuration in STM32
模数转换 ADC
🎞️ How Do ADCs Work? - The Learning Circuit
🎞️ Tutorial 13: ADC in STM32F4
🎞️ Tutorial 14: ADC by Polling
数模转换 DAC
🎞️ How Do DACs Work? - The Learning Circuit
🎞️ DAC in STM32 || Sine wave || HAL || CubeIDE
定时器 / 计数器
📝 Introduction to Microcontroller Timers: Periodic Timers
📝 AVR Timer programming
🎞️ STM32 TIMERS (YouTube Playlist)
脉宽调制 PWM
🎞️ What is PWM?
📝 Pulse-width Modulation (PWM) Timers in Microcontrollers
🎞️ STM32 Guide #3: PWM + Timers
实时时钟 RTC
📝 Real Time Clocks (RTCs) in Microcontroller Timers
看门狗 Watchdog
📝 A Guide to Watchdog Timers for Embedded Systems
📝 Watchdog Timers in Microcontrollers
🎞️ The Watchdog Timer on Arduino
🎞️ WATCHDOGS in STM32 || IWDG and WWDG || CubeIDE
中断 Interrupts
🎞️ Polling/Interrupt/DMA differences explained easily
🎞️ Level Up Your Arduino Code: External Interrupts
🎞️ Tutorial 10: Peripheral 2 - Nested Vector Interrupt controller (NVIC) in STM32
🎞️ Tutorial 11: LAB - External Interrupt ( EXTI ) Interfacing in STM32 using STM32CUBEMX
🎞️ Tutorial 12: Interrupt Priorities in STM32
直接内存访问 DMA
🎞️ Introduction to Direct Memory Access (DMA)
🎞️ STM32 DMA PT 1
🎞️ STM32 DMA PT 2
🎞️ Getting Started With STM32 & Nucleo Part 4: Working with ADC and DMA - Maker.io
🎞️ STM32 UART DMA and IDLE LINE || Receive unknown length DATA
时钟管理
📝 Clock Configuration in STM32
🎞️ STM32: Change clock speed via registers
🎞️ #1. Intro to STM32F4 Register Based Programming || Clock Setup || LED Blinking || NO HAL
🎞️ Tutorial 8: MCU Clocks configuration in STM32 using STM32CUBEMX
🎞️ Clock sources and PLL in ARM Cortex M4
电源管理
🎞️ SLEEP Mode in STM32F103 || CubeIDE || Low Power Mode || Current Consumption
🎞️ STOP MODE in STM32 || CubeIDE || Low Power Mode
Bootloader / DFU 设备固件更新
📝 Basics to Developing Bootloader for Arduino
📝 From Zero to main(): How to Write a Bootloader from Scratch
🎞️ How to Create a Super Simple Bootloader
🎞️ Blinky To Bootloader: Bare Metal Programming Series (YouTube Playlist)
📝 Simple AVR Bootloader tutorial
🎞️💎 Udemy – STM32Fx Microcontroller Custom Bootloader Development
📝💎 Device Firmware Update Cookbook
接口、协议与通信技术
嵌入式系统通常通过接口和协议与其他设备或外部系统进行通信。接口提供物理连接,协议定义数据交换规则。选择取决于具体应用需求,包括带宽、距离、安全性和功耗。
基础协议
🎞️👶 Understanding Serial Protocols
📝👶 Understanding and Selecting in 2024: I2C, SPI, UART Explained
🎞️ PROTOCOLS: UART - I2C - SPI - Serial communications #001
UART
🎞️👶 Understanding UART
🎞️ how does UART work??? (explained clearly)
🎞️ Basics of UART Communication | UART Frame Structure | RS 232 Basics | Part1
🎞️ Understanding UART Communication Programming | UART Peripherals | Part 2
🎞️ The RS-232 protocol
I2C
🎞️👶 Understanding I2C
📝 I2C in a Nutshell
🎞️ STM32 I2C SLAVE (YouTube Playlist)
SPI
🎞️👶 Understanding SPI
🎞️ SPI: The serial peripheral interface
🎞️ Getting Started with STM32 and Nucleo Part 5: How to Use SPI | Digi-Key Electronics
SDIO
📝 SDIO Protocol
📝 Interface SD CARD with SDIO in STM32
🔗 SDIO Card Slave Driver - ESP32 - Technical Documents
I3C
🎞️ What is I3C®?
🔗 MIPI I3C & MIPI I3C Basic
📝 I3C Protocol: Understanding and Debug
🎞️ MIPI I3C Basic - The next generation sensor interface enabling low-power IoT applications
1-Wire
🎞️ 1-Wire® Technology Overview
数字音频协议
I2S
📝 Introduction to the I2S Interface
🎞️ Building a Digital Music Player with I2S?! What is I2S! EB#45
🔗 UM11732 - I2S bus specification
PCM
🔗 HUAWEI LGA Module - PCM Audio Design Guide
📝 PCM Terminology and Concepts
显示与相机协议
MIPI CSI-2
🔗 MIPI Camera Serial Interface 2
🎞️ Tutorial: MIPI CSI-2
🔗 AN13573 - i.MX 8/RT MIPI DSI/CSI-2
MIPI DSI
🔗 MIPI Display Serial Interface
🔗 AN4860 - Introduction to DSI host on STM32 MCUs and MPUs
HDMI
🎞️ TI Precision Labs - Video Interface: What are HDMI & Dual-Mode DisplayPort?
🎞️ HDMI 2.1 & TMDS Crash Course - ENMU EET 457 - Presentation
无线通信协议
Bluetooth / BLE
🎞️👶💎 Microchip University - First Steps into Bluetooth Low Energy (BLE)
📝 Bluetooth Basics
📝 Bluetooth Low Energy: A Primer
📝 A Practical Guide to BLE Throughput
🎞️ SparkFun According to Pete #49 - How Bluetooth Works
🔗 Bluetooth Low Energy Fundamentals - Nordic Semiconductor
🔗 Bluetooth Overview - ESP-IDF Programming Guide
Wi-Fi
🎞️ 802.11 How WiFi Works - Wireless Networks | Computer Networks Ep. 7.3 | Kurose & Ross
🎞️ 802.11 Frame Analysis
🔗 Wi-Fi Driver - ESP-IDF Programming Guide
📝 ESP32 Set an Access Point (AP) using ESP-IDF
📝 ESP32 ESP-IDF Connect with WiFi – Station Mode Example
LoRa / LoRaWAN
📝 The Arduino Guide to LoRa® and LoRaWAN®
🔗💎 The Things Fundamentals on LoRaWAN!
📝 What are LoRa® and LoRaWAN®?
🎞️ #112 LoRa / LoRaWAN De-Mystified / Tutorial
🔗 ESP32 with LoRa using Arduino IDE – Getting Started
Zigbee
🎞️ What is ZIGBEE And How It Works?
🎞️ How to take advantage of Zigbee and Bluetooth LE 5.2 on STM32WB wireless MCUs - Webinar Replay
Thread
🔗 OpenThread - An open-source implementation of Thread®
🎞️ What is Thread? Low-power IoT Networking for Smart Home Devices | Digi-Key Electronics
🔗 OpenThread - ESP-IDF Programming Guide
Matter
🎞️ What is Matter? Unifying IoT Devices for the Smart Home | Digi-Key Electronics
工业通信协议
Modbus
🎞️ What is Modbus and How does it Work?
🎞️ How does Modbus Communication Protocol Work?
🎞️ MODBUS STM32 (YouTube Playlist)
RS485
🎞️ What is RS485 and How it’s used in Industrial Control Systems?
🎞️ What is RS-485?
EtherCAT
🎞️ Microchip University - An Introduction to EtherCAT®, EtherCAT P and the Microchip LAN925x family of Slave Controllers
CoAP & MQTT
🎞️ #144 Internet Protocols: CoAP vs MQTT, Network Sniffing, and preparation for IKEA Tradfri Hacking
🎞️ MQTT vs. CoAP | Comparison of IoT Protocols
🎞️ Simple ESP32 IoT Sensor Node Tutorial: WiFi Enabled MQTT Sensor Data Node
🔗 Cellular IoT Fundamentals - Nordic Semiconductor
高速协议
以太网 Ethernet
🎞️👶 Microchip University - Ethernet Fundamentals
📝 How the Ethernet Protocol Works – A Complete Guide
🎞️ What is an Ethernet PHY?
🎞️ The Data Link Layer, MAC Addressing, and the Ethernet Frame
🎞️ Microchip University - Serializer/Deserializer (SerDes) Basics for Your Next Microchip Ethernet PHY Design
🎞️ Microchip University - Ethernet Switch Fundamentals
USB
🎞️👶 Microchip University - Introduction to USB 2.0
🎞️👶 Microchip University - USB 3 Fundamentals
🎞️ Training - USB 101 - Introduction to USB
🔗 USB 101: An Introduction to Universal Serial Bus 2.0
🎞️ How does a USB keyboard work?
🎞️ How does USB device discovery work?
🎞️ MOOC - STM32 USB training (YouTube Playlist)
🎞️ Microchip University - USB2 Hub Fundamentals
PCIe
🎞️ What is PCIe?
🎞️ PCIe QuickLearn (YouTube Playlist)
🎞️ PCIe Protocol (YouTube Playlist)
汽车通信协议
CAN
🎞️👶 Microchip University - CAN and CAN FD Protocol and Physical Layer Basics
📝👶 CAN bus in 2024: Operation, Advantages and Recent Developments
🎞️👶 CAN Bus: Serial Communication - How It Works?
🎞️👶 CAN Bus: A Beginners Guide Part 1
🎞️👶 CAN Bus: A Beginners Guide Part 2
🎞️💎 Microchip University - Designing and Implementing a CAN FD Network
🎞️ Improving my electric longboard with a CAN Bus! What can the CAN Bus do? EB#44
🎞️ CAN Bus, OBD2 & J1939 Explained (YouTube Playlist)
🎞️ J1939 Explained - A Simple Intro [v2.0 | 2021]
🎞️ Unified Diagnostic Services (UDS) Explained - A Simple Intro [2022]
网络协议 / 套接字编程
🎞️ Networking Fundamentals - Practical Networking (YouTube Playlist)
🎞️ TCP vs UDP - Explaining Facts and Debunking Myths - TCP Masterclass
🎞️ TCP - 12 simple ideas to explain the Transmission Control Protocol
🎞️ UDP doesn’t suck! It’s the BEST L4 protocol for THESE types of applications…
🎞️ Networking tutorial - Ben Eater (YouTube Playlist)
📘💎 Hands-On Network Programming with C - Lewis Van Winkle
📘💎 Network Algorithmics - George Varghese, Jun Xu
🔗 tcpdump & libpcap libraries
🔗 lwIP - A Lightweight TCP/IP stack
🔗 lwIP (ESP-IDF)
🔗 Developing applications on STM32Cube with LwIP TCP/IP stack
蜂窝通信
GSM / LTE
🎞️ STM32 : Internet Of Things With 4G LTE Modem (YouTube Playlist)
LTE-M & NB-IoT
🔗 Cellular IoT Fundamentals - Nordic Semiconductor
存储技术与文件系统
嵌入式系统根据性能、成本、功耗和耐用性等因素,使用易失(SRAM、DRAM、PSRAM)和非易失(闪存、EEPROM、FRAM)存储器来存储和访问数据。
📝 Memory Options for Embedded Systems: How to Select the Right Memory Configuration
Flash Memory
📝 NAND and eMMC: All You Need to Know About Flash Memory
NOR / NAND
🎞️ QSPI in STM32 || Write and Read || N25Q
🎞️ QSPI in STM32 || Boot from EXT Memory || XIP || N25Q
🎞️ Flash Memory in Embedded Linux Systems
eMMC
🎞️ What is a eMMC? Intro, Comparing to Other Storage, and Upgrading. SSD, M.2
SD 卡
🎞️ Interfacing with an SD Card
EEPROM
🎞️ Using EEPROM with Arduino - Internal & External
SRAM / DRAM
📝 SRAM vs DRAM: Difference Between SRAM & DRAM Explained
🎞️ What is SRAM?
🎞️ SDRAM Hardware & Firmware Tutorial (STM32) - Phil’s Lab #80
🎞️ SDRAM in STM32 || MT48LC4
文件系统
文件系统是在存储设备(如硬盘驱动器、闪存驱动器或固态驱动器)上组织数据的一种方式。它提供了一种存储、访问和管理文件的方法,文件是可以单独访问的数据集合。嵌入式系统中的文件系统通常是轻量级的,并且针对效率进行了优化,考虑到了嵌入式设备的有限资源和特定需求。与桌面或服务器文件系统相比,它们通常使用更简单的文件结构和数据结构。
📝 Flash filesystems
📝 Block filesystems
📝 Understanding the UBI File System in Embedded Devices
📝 UBI File System
📝 JFFS : The Journalling Flash File System
📝 Preventing Filesystem Corruption In Embedded Linux
🔗 LittleFS - A high-integrity embedded file system
🔗 SPIFS - Wear-leveled SPI flash file system for embedded devices
🔗 EEPROM File System (EEFS)
硬件仿真 / 模拟
嵌入式系统开发通常涉及在实际硬件部署之前模拟或仿真硬件环境,以测试和调试软件。仿真工具创建硬件系统的虚拟模型,而模拟工具则使用真实的硬件组件复制实际的硬件行为。这些工具提供了多种优势,包括减少开发时间、降低硬件成本和提高软件可靠性。
🔗👶 Wokwi - Online ESP32, STM32, Arduino Simulator
🔗👶 SimulIDE Circuit Simulator
QEMU
🔗 QEMU’s documentation
📝 Running AVR code in QEMU - A quick-start guide to accelerate AVR firmware development
📝 QEMU Simulation - Blinky - STM32F767ZI Full Stack
📝 Emulating a Raspberry Pi in QEMU
Renode
🔗 Renode - GitHub Repo
🔗 Renode - Documentation
🔗 Renode - Official Tutorials
📝 Cortex-M MCU Emulation with Renode
📝 A simple guide to get started on renode
🎞️ Using CI-based workflow with Renode in bringing TensorFlow Lite to Zephyr
传感器与执行器
传感器与执行器是嵌入式系统的眼睛和手。它们负责收集环境信息并基于这些信息采取行动。传感器将温度、光或声音等物理现象转换为嵌入式系统可以处理的电信号。而执行器则将电信号转换为物理动作,例如控制电机速度或开关阀门。
🎞️💎 Coursera - Embedding Sensors and Motors Specialization
传感器
📝 Calibrating Sensors
📝 DHT11 vs DHT22 vs LM35 vs DS18B20 vs BME280 vs BMP180
🎞️ Getting Started With STM32 and Nucleo Part 2: How to Use I2C to Read Temperature Sensor TMP102
🎞️ GPS Module and STM32 || NEO 6M || Get coordinates, Date, Time, Speed, etc.
🎞️ Interface MPU6050/GY-521 with STM32 || LCD 20x4 || CubeMx || HAL || SW4STM
📝 Arduino with PIR Motion Sensor
📝 Complete Guide for Ultrasonic Sensor HC-SR04 with Arduino
🎞️ Electronic Basics #15: Temperature Measurement (Part 1) || NTC, PT100, Wheatstone Bridge
执行器
📝 Adafruit Motor Selection Guide
🎞️ DC Motor Speed Controller PWM With Potentiometer Using STM32
📝 All About Stepper Motors
📝 Using Servos With CircuitPython and Arduino
🎞️ Electronic Basics #25: Servos and how to use them
🎞️ Electronic Basics #24: Stepper Motors and how to use them
🎞️ Electronic Basics #18: DC & Brushless DC Motor + ESC
数字信号处理 DSP
数字信号处理(DSP)是处理数字信号的工程学分支。它广泛应用于嵌入式系统、通信系统和多媒体系统中。DSP算法通常使用专用集成电路(ASIC)或现场可编程门阵列(FPGA)在硬件中实现。
DSP 基础与滤波器设计
📘💎 The Scientist and Engineer’s Guide to Digital Signal Processing - Steven W. Smith
🎞️ FIR Filter Design and Software Implementation - Phil’s Lab #17
🎞️ IIR Filters - Theory and Implementation (STM32) - Phil’s Lab #32
🎞️ Digital Signal Processing (ECSE-4530) Lectures, Fall 2014 (YouTube Playlist)
🎞️ Udemy – Digital Signal Processing (DSP) From Ground Up in C
📘 Real-Time Digital Signal Processing: Fundamentals, Implementations and Applications - Sen M. Kuo, Bob H. Lee, Wenshun Tian
📘 Real-Time Digital Signal Processing from MATLAB to C with the TMS320C6x DSPs - Thad B. Welch, Cameron H.G. Wright, Michael G. Morrow
📘 Schaum’s Outline of Signals and Systems - Hwei P. Hsu
📘💎 Digital Signal Processing - John G. Proakis, Dimitris K. Manolakis
离散傅里叶变换 / 快速傅里叶变换 (FFT)
🎞️ Discrete Fourier Transform - Simple Step by Step
🎞️ The Fast Fourier Transform (FFT): Most Ingenious Algorithm Ever?
🎞️ The FFT Algorithm - Simple Step by Step
🎞️ STM32 Fast Fourier Transform (CMSIS DSP FFT) - Phil’s Lab #111
控制理论
🎞️ Understanding Control Systems (YouTube Playlist)
🎞️ Control Systems - CircuitBread (YouTube Playlist)
🎞️💎 Brian Douglas’ Control Systems Lectures (YouTube Channel)
📘💎 Control Systems Engineering - Norman S. Nise
📘💎 Modern Control Systems - Richard C. Dorf, Robert H. Bishop
PID 控制器
🎞️👶 What is a PID Controller? | DigiKey
🎞️👶 How to Tune a PID Controller for an Inverted Pendulum | DigiKey
🎞️ PID Controller Explained
🎞️ Understanding PID Control (YouTube Playlist)
🎞️ PID Controller Implementation in Software - Phil’s Lab #6
MATLAB / Simulink
🎞️ MATLAB Tutorials: Getting Started with MATLAB (YouTube Playlist)
🎞️ Getting Started with Simulink (YouTube Playlist)
🎞️ Udemy – MATLAB/SIMULINK Bible|Go From Zero to Hero!
操作系统
嵌入式系统可以使用操作系统(OS)编程,或者直接在硬件上编程,即裸机编程。每种方法都有其优点和缺点。嵌入式操作系统在硬件和应用代码之间提供了一个抽象层,提供资源管理、任务调度、错误处理和通信能力等优势。然而,它们增加了开销,可能不适合内存受限的应用。
操作系统基础
📝👶 Putting the “You” in CPU
📘👶 The little book about OS development
📘👶 Operating Systems: From 0 to 1
📘💎 Operating Systems: Three Easy Pieces - Remzi H Arpaci-Dusseau, Andrea C Arpaci-Dusseau
📘💎 Modern Operating Systems - Andrew S. Tanenbaum, Herbert Bos
📝 Writing an OS in Rust - Philipp Oppermann’s blog
🔗 Operating System development tutorials in Rust on the Raspberry Pi
实时操作系统
实时操作系统(RTOS)是为满足严格时间期限而设计的专用操作系统。它们用于对时间要求苛刻的嵌入式系统中,如航空电子设备、机器人和医疗设备。RTOS 提供了一个确定性的环境,使任务能够以可预测的时间执行。这确保了关键任务即使在中断和其他干扰的情况下也能按时执行。
RTOS 基础
📝 Bare-metal and RTOS Based Embedded Systems
📝 RTOS vs. Bare Metal: Navigating Performance, Complexity, and Efficiency
📝 The Pros and Cons of RTOS vs Bare Metal: Which Will You Choose?
📝 FreeRTOS vs Linux for Embedded Systems
🔗 Real-Time Systems Concepts
🔗 RTOS Fundamentals
📝 A Simple Scheduler via an Interrupt-driven Actor Model
📝 ARM Cortex-M RTOS Context Switching
🎞️ RTOS (YouTube Playlist)
🎞️ Beyond the RTOS (YouTube Playlist)
FreeRTOS
🔗 FreeRTOS - Market leading RTOS
🎞️👶 Introduction to RTOS (YouTube Playlist)
📘💎 Mastering the FreeRTOS Real Time Kernel - a Hands On Tutorial Guide
🎞️👶 Microchip University - FreeRTOS Simplified: A Beginner’s Guide to Develop and Debug FreeRTOS Applications
🎞️ Getting Started With STM32 and Nucleo Part 3: FreeRTOS - How To Run Multiple Threads w/ CMSIS-RTOS
📘 Hands-On RTOS with Microcontrollers: Building real-time embedded systems using FreeRTOS, STM32 MCUs, and SEGGER debug tools - Brian Amos
📘 Beginning STM32: Developing with FreeRTOS, libopencm3 and GCC - Warren Gay
🔗 SafeRTOS - Safety Critical Real-Time OS
Zephyr
🔗 Zephyr® Project
🔗 Zephyr: Tutorial for Beginners
📝 Why We Moved from FreeRTOS to Zephyr RTOS
🔗 nRF Connect SDK
🎞️ ESP32 on Zephyr OS (YouTube Playlist)
μC/OS / Micriμm OS
🔗 Micriμm OS
🔗 µC/OS-III Documentation
📘 µC/OS-III Books
📘💎 µC/OS-II Documentation (Previously published as a book titled “MicroC/OS-II: The Real-Time Kernel”)
NuttX
🔗 NuttX - The Apache Software Foundation
🔗 NuttX Documentation
🎞️ Getting Started to NuttX (YouTube Playlist)
RT-Thread
🔗 RT-Thread | An Open Source Embedded Real-time Operating System
🔗 RT-Thread document center
🎞️ RT-Thread Beginners Guide (YouTube Playlist)
Mbed OS
🔗 Mbed OS
🔗 Mbed OS Documentation
QNX
🔗 BlackBerry QNX: Embedded OS, Support, and Services
🔗 QNX Product Documentation
VxWorks
🔗 VxWorks | Industry Leading RTOS for Embedded Systems
🔗 VxWorks Documentation
🎞️ VxWORKS-RTOS - Kumar M (YouTube Playlist)
Azure RTOS (ThreadX)
🔗 Azure RTOS - Making embedded IoT development and connectivity easy
🔗 Microsoft Azure RTOS documentation
🔗 Azure RTOS ThreadX
嵌入式 Linux
嵌入式 Linux 是针对嵌入式系统定制的专用 Linux 操作系统。它旨在运行于资源受限的设备上,如内存、处理能力和功耗有限的设备。
📝 What Is Embedded Linux?
📝 FreeRTOS vs Linux for Embedded Systems
🎞️👶 Introduction to Embedded Linux (YouTube Playlist)
📝 Mastering Embedded Linux Series - George Hilliard’s blog
📘💎 Mastering Embedded Linux Programming - Chris Simmonds
🎞️💎 Coursera - Advanced Embedded Linux Development Specialization
🔗 Linux From Scratch - step-by-step instructions for building your own custom Linux system
🔗 Automotive Grade Linux (AGL)
🔗 Real Time Linux and PREEMPT_RT Patch
🔗 Android Open Source Project
🔗 Android Automotive
Linux 内核
📘👶 Linux Kernel Development - Robert Love
📘💎 The Linux Programming Interface - Michael Kerrisk
📘 How Linux Works - Brian Ward
Linux 设备驱动程序
📝👶 Writing a Simple Linux Kernel Module
📘💎 Linux Device Drivers - Jonathan Corbet, Alessandro Rubini, Greg Kroah-Hartman
📘 The Linux Kernel Module Programming Guide
📘 Mastering Linux Device Driver Development - John Madieu
📝 Kernel Driver with Rust in 2022
U-Boot
🔗 The U-Boot Documentation
🔗 Barebox
Buildroot
🔗 Buildroot Documentation
🎞️ Introduction to Embedded Linux Part 1 - Buildroot | Digi-Key Electronics
📝 Building Tiny Raspberry Pi Linux Images With Buildroot
Yocto
🔗 Yocto Project Quick Build
🔗💎 Yocto Project Documentation
🎞️ Introduction to Embedded Linux Part 2 - Yocto Project | Digi-Key Electronics
📝 Build Linux Image for Raspberry Pi board using Yocto Project
🎞️ Yocto Project Tutorial Series (Basic to Advance) (YouTube Playlist)
🎞️ Udemy – Embedded Linux using Yocto
📘💎 Embedded Linux Systems with the Yocto Project - Rudolf J.Streif
📘 Embedded Linux Development using Yocto Project Cookbook - Alex Gonzalez
📘 Bootlin Embedded Linux, Kernel, drivers, Yocto, Buildroot and Graphics Training
多线程与并行处理
📝 Threading/Concurrency vs Parallelism
📝 Multi-threading and Parallel Programming
📝 Multitasking vs Multithreading vs Multiprocessing
📘💎 Programming with POSIX Threads - David Butenhof
📘 C++ Concurrency in Action - Anthony Williams
高性能计算 HPC
🔗 Parallel Programming and Performance Optimization With OpenMP
🎞️ Introduction to OpenMP - Tim Mattson (Intel) (YouTube Playlist)
🔗 OpenCL Tutorials
🔗 CUDA C++ Programming Guide
进程间通信 IPC
📝 Inter Process Communication (IPC)
📝 What Is Inter-Process Communication In Linux?
🎞️ Udemy – Linux Inter Process Communication (IPC) from Scratch in C
🎞️ Udemy – Multi-Threading and IPC with Qt 5 C++
📝 D-Bus Tutorial
Qt 框架
🔗 Qt Documentation
调试
调试嵌入式系统涉及识别和解决软件缺陷和硬件故障。使用的技术包括静态代码分析、动态分析、仿真和模拟、在电路调试以及硬件调试。
📝 Using Asserts in Embedded Systems
JTAG / SWD
JTAG 和 SWD(串行线调试)是两种常用的嵌入式系统调试和编程接口协议。JTAG 是一种更通用的协议,适用于调试和编程更多类型的设备,而 SWD 则是专为 ARM 微控制器设计的更简单且紧凑的协议。
📝 A Deep Dive into ARM Cortex-M Debug Interfaces
🔗 Guide: Connecting your debugger
🎞️ STM32 + SWD + ST-Link + CubeIDE | Debugging on Custom Hardware Tutorial - Phil’s Lab #4
📝 Diving into JTAG protocol. Part 1 — Overview
📝 Diving into JTAG protocol. Part 2 — Debugging
📝 Diving into JTAG protocol. Part 3 — Boundary Scan
GDB
GDB(GNU 调试器)是一款功能强大且多用途的调试器,支持源代码级和机器级调试。它支持多种编程语言,包括 C、C++、Objective-C、Java 和 Rust。GDB 是一款被广泛使用的免费开源软件工具。
📝 Advanced GDB Usage
📝 How do breakpoints even work?
🔗 GNU GDB Debugger Command Cheat Sheet
🔗 gdbgui - A browser-based frontend to gdb (gnu debugger)
🎞️ everyone needs to stop using print debugging (do THIS instead)
🎞️ GDB is REALLY easy! Find Bugs in Your Code with Only A Few Commands
📝 Introduction to ARM Semihosting
OpenOCD
OpenOCD(开放片上调试器)是一款开源软件工具,为嵌入式系统的调试和编程提供了强大且多功能的平台。它作为硬件调试适配器(HDA)与调试器(如 GDB)之间的接口,使开发人员能够与目标微控制器或微处理器进行交互。OpenOCD 支持多种硬件平台,并提供全面的硬件调试、编程和边界扫描测试功能。
🔗 OpenOCD - GitHub repository
🎞️ This Is 100% How You Should Be Debugging | How to Use OpenOCD to Debug Embedded Software with GDB
构建系统
构建系统自动化地将源代码编译和链接为可执行程序。它们是软件开发中的重要工具,可以帮助提高构建过程的效率和一致性。常用的构建系统包括 Make 和 CMake。
编译器 / GCC
GCC(GNU 编译器套件)是一个免费开源的编译系统,能够编译多种编程语言的程序,包括 C、C++、Objective-C、Fortran、Ada 和 Go。由于其开源性质、成熟度、稳定性、可移植性、性能和庞大的社区支持,GCC 在嵌入式系统开发中非常受欢迎。另一方面,像 Keil 和 IAR 这样的专有编译器提供工具链支持、目标特定优化和客户支持,可能在特定项目中更受青睐。
📝 GCC and Make - Compiling, Linking and Building C/C++ Applications
📝 The Best and Worst GCC Compiler Flags For Embedded
📝 From Zero to main(): Demystifying Firmware Linker Scripts
📝 Bare Metal - From zero to blink
🔗 Keil MDK & µVision
🔗 IAR Embedded Workbench
Make / CMake
CMake 和 Make 都是用于构建软件应用的工具。CMake 是一个生成 Makefile 的元构建系统,这些 Makefile 随后由 Make 用于构建软件。CMake 比 Make 更通用且跨平台,它在现代软件开发中正变得越来越受欢迎。
📝 A Shallow Dive into GNU Make
🎞️ Building STM32 projects from scratch with cross platform tools like Make, CMake and arm-gcc compiler toolchain (YouTube Playlist)
🔗 CMake Tutorial
🎞️ How to CMake Good (YouTube Playlist)
📝👶 The most thoroughly commented embedded CMakeLists file
Bash 脚本
Bash 脚本在嵌入式系统开发中是一个强大的工具,可以使开发人员自动化重复任务、处理复杂配置以及有效管理嵌入式系统的环境。Bash 脚本是针对 Linux 的工具,未在 Windows 中本机集成,但可以通过 Windows 子系统 Linux(WSL)访问。
🔗 Bash scripting cheatsheet
🎞️ Bash Scripting Tutorial for Beginners
Docker
Docker 容器提供了一种一致且隔离的环境来构建软件应用。这有助于提高构建的可重现性并减少错误风险。Docker 还使共享构建环境更加容易,从而为开发人员节省时间和精力。
🔗 Docker Docs
🔗 Docker Cheat Sheet
📝👶 Docker for Dummies
🎞️ Introduction to Docker for the Embedded Developer
🎞️ Intro to CI/CD Part 1: Getting Started with Docker | Digi-Key Electronics
📝 A Modern C Development Environment
软件开发生命周期(SDLC)模型
软件开发生命周期(SDLC)模型为软件开发提供了一种结构化的方法,指导从规划到部署和维护的整个过程。这些模型提供了组织、管理和执行软件项目的框架,确保开发过程的一致性和高效性。
📝 What is the software development life cycle?
📝 Embedded Product Development Life Cycle: Four Main Steps
敏捷 / SCRUM
📝 Does agile work with embedded software?
📝 Scrum for embedded software: Good – but for reasons other than what your manager thinks
📝 What Is Scrum: A Guide to the Most Popular Agile Framework
📝 An agile guide to scrum meetings
📝 What is scaled agile framework? (SAFe)
🔗 Jira - Issue & Project Tracking Software
V-Model
📝 What is the V model for software development
📝 V Model In Software Engineering: Ultimate Guideline
版本控制
版本控制系统是管理代码和其他数字资产更改的基本工具。它们跟踪随时间的变化,使开发人员可以恢复到先前版本、有效协作并识别潜在冲突。流行的版本控制系统包括 Git、Mercurial 和 Subversion。
Git
🎞️👶 Git Tutorial for Beginners: Learn Git in 1 Hour
🎞️ Git for Professionals Tutorial - Tools & Concepts for Mastering Version Control with Git
SVN
🔗 Apache® Subversion®
测试
测试是嵌入式系统开发过程的核心部分,确保系统的质量、可靠性和安全性。它涉及从单元测试到系统测试的各种技术,用于验证软件和硬件组件的功能和性能。
TDD 测试驱动开发
📘💎 Test Driven Development for Embedded C - James Grenning
📝 Testing: Unit VS Integration VS Regression VS Acceptance
📝 Firmware Testing with Renode and GitHub Actions
📝 Balancing Test Coverage vs. Overhead
单元测试
📝 Embedded C/C++ Unit Testing Basics
📝 Embedded C/C++ Unit Testing with Mocks
🔗 Unit Testing for C (especially Embedded Software)
🔗 GoogleTest - Google Testing and Mocking Framework
🔗 Catch2 - A modern, C++-native, test framework for unit-tests
🔗 pytest-embedded
📝 Introduction to testing ESP32 code with Pytest
📘 Unit Testing Principles, Practices, and Patterns - Vladimir Khorikov
集成测试
📝 Hardware CI Arena
📝 Exclave: Hardware Testing in Mass Production, Made Easier
📝 Regression Testing of Embedded Systems
CI/CD
持续集成(CI)和持续交付(CD)是自动化构建、测试和部署软件的开发实践。CI/CD 流水线旨在确保软件更改能够快速且可靠地部署。
🎞️ Intro to CI/CD Part 1: Getting Started with Docker | Digi-Key Electronics
🎞️ Intro to CI/CD Part 2: Getting Started with GitHub Actions | Digi-Key Electronics
📝 How to Build a Continuous Integration and Delivery Process for Embedded Software
📝 A guide to continuous delivery in embedded development
🎞️ Continuous Delivery for Embedded Systems • Mike Long • GOTO 2015
📝 Continuous Integration & Continuous Delivery for Embedded Systems (Whitepaper)
📝 What is DevOps in an Embedded Device Company?
🎞️💎 CI/CD Tutorials (YouTube Playlist)
SIL / HIL 测试
软件在环(SIL)和硬件在环(HIL)测试是嵌入式系统开发中用于验证软件功能和性能的两种关键技术。这些测试方法使用软件模型或硬件仿真器模拟嵌入式系统的真实环境。
📝 Hardware-in-Loop and Software-in-Loop Testing
🎞️ Embedded CI/CD with HIL Testing (YouTube Playlist)
标准与认证
嵌入式系统开发需要遵循各种标准与认证,这些标准和认证作为确保系统质量、安全性和可靠性的指南和基准。这些标准通常由行业机构制定和维护,例如国际电工委员会(IEC)和汽车工程师学会(SAE)。
📝 Intro to Embedded Development: Styles and Standards
📝 Safety Standards and Certifications for Embedded Systems Development
🎞️ Microchip University - An Introduction To The ISA/IEC 62443 Standard
🎞️ Exploring EMC Basics & Standards
功能安全
🎞️👶 Microchip University - Introduction to Functional Safety
🎞️ Udemy – Functional Safety According to ISO 26262 - Crash Course
📝 A Guide to MISRA C Coding Standards - MISRA C and MISRA C++
📝 A Firmware Development Standard by Jack Ganssle
📝 Safety-critical Embedded systems: How to prepare for software development
📝 DO-178C - Software Considerations in Airborne Systems and Equipment Certification
嵌入式安全
由于资源限制和设备本身的特性,嵌入式系统中的安全性特别具有挑战性。嵌入式系统通常运行在小型、低功耗的微控制器上,内存和处理能力有限。这使得实现与传统计算平台相同级别的安全性变得困难。此外,嵌入式系统通常难以获得更新和补丁,使其更容易受到已知漏洞的攻击。
📝 Embedded Systems Security and TrustZone
硬件破解
学习硬件破解有助于安全专业人员了解嵌入式系统如何被攻破,并制定有效的防御措施以防止网络攻击。这些知识增强了嵌入式设备抵御攻击的能力。
📘💎 Practical Hardware Pentesting - Jean-Georges Valle
🎞️ Hardware Hacking Tutorial (YouTube Playlist)
📘💎 The Hardware Hacking Handbook: Breaking Embedded Security with Hardware Attacks - Jasper van Woudenberg, Colin O’Flynn
加密技术
🎞️👶 Microchip University - Cryptography Primer
🎞️ Hashing, Hashing Algorithms, and Collisions - Cryptography - Practical TLS
🎞️ Data Integrity - How Hashing is used to ensure data isn’t modified - HMAC - Cryptography
🎞️ Encryption - Symmetric Encryption vs Asymmetric Encryption - Cryptography - Practical TLS
🎞️ Public and Private Keys - Signatures & Key Exchanges - Cryptography - Practical TLS
🎞️ Understanding AES Encryption Mechanics: BMPS
📘💎 Understanding Cryptography: A Textbook for Students and Practitioners - Christof Paar, Jan Pelzl
📘💎 Handbook of Applied Cryptography - Alfred J. Menezes, Paul C. van Oorschot, Scott A. Vanstone
📘 Serious Cryptography: A Practical Introduction to Modern Encryption - Jean-Philippe Aumasson
🎞️ MOOC - Security Part2: Basics of cryptography (YouTube Playlist)
🎞️ MOOC - Security Part3 : STM32 security features (YouTube Playlist)
📝 Introduction to encryption for embedded Linux developers
📝 A hands-on approach to symmetric-key encryption
📝 Asymmetric-Key Encryption and Digital Signatures in Practice
安全启动与安全固件更新
📝 AVR231: AES Bootloader
🎞️ Blinky To Bootloader: Bare Metal Programming Series (YouTube Playlist)
🎞️ MOOC - Security Part4 : STM32 security in practice (YouTube Playlist)
🎞️ MOOC - Security Part5 : How to define your security needs (YouTube Playlist)
🎞️ MOOC - Security Part6: STM32 security ecosystem, from theory to practice (YouTube Playlist)
🎞️ TPM (Trusted Platform Module) - Computerphile
🎞️ Securing Embedded Linux Systems with TPM 2.0 - Philip Tricca, Intel
📝 TPM: Basic applications to embedded devices
📝 OTA for Embedded Linux Devices: A practical introduction
📝 Introduction to Embedded Linux Security - part 1
📝 Introduction to Embedded Linux Security - part 2
嵌入式图形用户界面
图形用户界面(GUI)已成为现代嵌入式系统不可或缺的一部分,提供了一种用户友好且直观的设备交互方式。设计有效的嵌入式系统 GUI 需要仔细考虑资源限制、用户体验和实时性能等因素。
🔗 U8glib library for monochrome displays, version 2
🔗 LVGL
🔗 TouchGFX
🎞️ Introduction to Qt / QML (YouTube Playlist)
物联网
物联网(IoT)指的是由互联设备组成的网络,这些设备收集并与其他设备或云端交换数据。嵌入式系统通常是 IoT 设备的“大脑”,负责管理数据收集、处理和通信任务。嵌入式系统设计成在有限的功率和资源下运行,非常适合 IoT 应用。
🎞️👶💎 Microchip University - Design Considerations For Your First IoT Project
增量 OTA 固件更新
📝 Saving bandwidth with delta firmware updates
📝 Delta Over-The-Air Device Firmware Update
📝 FreeRTOS Delta Over-the-Air Updates
🔗 ESP Delta OTA
边缘 AI
边缘 AI 指设备能够自行执行机器学习任务,而无需将数据发送到中央服务器。这可以通过将小型、专用的AI模型直接嵌入设备中来实现。TinyML 是边缘 AI 的一个子集,专注于为计算能力非常有限的设备(如微控制器和传感器)开发这些模型。
🎞️ Udemy – Getting Started with Embedded AI | Edge AI
🎞️ Intro to Edge AI: Machine Learning + IoT – Maker.io Tutorial | Digi-Key Electronics
AI & ML 基础
📝 A beginner’s guide to artificial intelligence and machine learning
📝👶 Introduction to Machine Learning for Coders!
📝 Machine Learning Crash Course with TensorFlow APIs - Google
TensorFlow Lite
🎞️ Getting Started with TensorFlow and Keras – Maker.io | Digi-Key Electronics
🎞️ Intro to TensorFlow Lite Part 1: Wake Word Feature Extraction – Maker.io | Digi-Key Electronics
🎞️ Intro to TensorFlow Lite Part 2: Speech Recognition Model Training – Maker.io | Digi-Key Electronics
TinyML
🎞️👶 Intro to TinyML Part 1: Training a Neural Network for Arduino in TensorFlow | Digi-Key Electronics
🎞️👶 Intro to TinyML Part 2: Deploying a TensorFlow Lite Model to Arduino | Digi-Key Electronics
🎞️ Coursera - Introduction to Embedded Machine Learning
🎞️ TinyML: Getting Started with TensorFlow Lite for Microcontrollers | Digi-Key Electronics
🎞️ TinyML: Getting Started with STM32 X-CUBE-AI | Digi-Key Electronics
🎞️ edX - Fundamentals of TinyML
🎞️ edX - Applications of TinyML
🎞️ edX - Deploying TinyML
🎞️ edX - MLOps for Scaling TinyML
📘 TinyML: Machine Learning with TensorFlow Lite on Arduino and Ultra-Low-Power Microcontrollers - Pete Warden, Daniel Situnayake
AUTOSAR 架构
AUTOSAR,即汽车开放系统架构,是全球汽车软件开发的行业标准。这是一种软件架构,为开发和集成车辆电子控制单元(ECU)中的软件组件提供了一个标准化平台。这使来自不同制造商的不同 ECU 够无缝地通信和协同工作。
🔗 AUTOSAR Standards
🎞️ AUTOSAR Basics | AUTOSAR Tutorial | Architecture | Automotive
🎞️ Introduction to AUTOSAR
🎞️ Udemy - Autosar Architecture (Learn from Scratch with Demo)
历史
起初,这只是我的个人阅读清单,但随着清单逐渐变得越来越大,我想为什么不与他人分享呢?于是我对当前嵌入式工程职位的招聘信息进行了研究,选择了最常见的技能并将它们包含在一个路线图中。为了使路线图更全面,我还添加了一些基本技能,最终构成了你现在看到的内容。
创建这个路线图的想法来自 vazeri / Embedded-Engineering-RoadMap-2018,它设计得很好但有一些缺陷且多年未更新。我借鉴了这个想法,改变了路线图的结构并尝试改进它。初始成果可以在 m3y54m / Embedded-Engineering-Roadmap-Archived 访问,该项目现已存档。早期版本的路线图是使用 Balsamiq Wireframes 创建的,这种工具不适合此类图表。因此,我决定改用 Microsoft Visio 并重新绘制了整个图表。
版权
本作品采用 知识共享署名 - 相同方式共享 4.0 国际许可协议 进行许可,这意味着你可以在以下条款下分享或改编本作品:
署名 — 你必须给出适当的署名,提供许可协议链接,并说明是否对作品进行了修改。你可以以合理的方式进行,但不可暗示许可人认可你或你的使用。
相同方式共享 — 如果你再混合、转换或基于本作品进行创作,必须在相同的许可协议下分发你的贡献作品。
致谢
特别感谢 Twitter 上伊朗嵌入式工程师社区的朋友们和 r/embedded 子版块的成员们,他们的建议帮助改进了这个路线图。
贡献
如果你认为这个路线图可以以任何方式改进,或者你知道一些可以添加的良好学习资源,请提出问题或请求合并(pull request)。我将频繁维护和更新此仓库。
源文件是使用 Microsoft Visio 以 .vsdx 格式创建的,并包含在此仓库中以供你贡献。如果你没有 Microsoft Visio 或你想使用免费软件,你可以使用 draw.io,它能够导入和导出 .vsdx 文件。