[译] 嵌入式工程学习路线图

作者 Leehyon HNG | 19915 字, 40 分钟 | 0 评论 | 2024-09-08 | 栏目 notes

embedded, learning, roadmap, translation

本文档是一份面向嵌入式工程师的学习路线图,由 Meysam Parvizi 编写,系统整理了从入门到进阶的学习方向及优质资源。

Original: https://github.com/m3y54m/Embedded-Engineering-Roadmap


本路线图旨在帮助有志于从事嵌入式工程师/开发人员职业的初学者,同时也帮助当前从业者拓展技能。

嵌入式工程需要对硬件功能有扎实的理解,以及软件开发 和编程技能。如果您真的想从事这个职业,您必须具有高度的动力和热情。正如那句名言所说:“硬件是很难的!“但不要惊慌,要对您在这个激动人心的旅程中可能遇到的挑战保持耐心。通过投入足够的时间和精力进行实践和项目开发,您很快就会发现自己成为一名真正的嵌入式工程师!😀

❓ 什么是嵌入式系统?

▶️ ISO/IEC/IEEE 24765 标准:

计算机系统是更大系统的一部分,并执行该系统的某些要求。例如,用于飞机或快速交通系统的计算机系统。

嵌入式系统的硬件和软件通常是为特定功能最小化优化的。嵌入式系统至少包括一个微控制器、微处理器或数字信号处理器。嵌入式系统设计用于优化可靠性、成本、尺寸和功耗,以满足应用需求。

▶️ “Making Embedded Systems” 书籍:

嵌入式系统是一种专门为其应用而构建的计算机化系统

▶️ “Computer Organization and Embedded Systems” 书籍:

使用计算机控制来实现特定目的物理系统,而不是用于通用计算,这种系统称为嵌入式系统。

▶️ Analog Devices 词汇表:

嵌入式系统是一种计算机(通常是微控制器或微处理器)作为系统组成部分而包含在内的系统。

通常,计算机对用户相对不可见,没有明显的应用程序、文件或操作系统。具有不可见嵌入式系统的产品示例包括运行微波炉的控制器或现代汽车的发动机控制系统。

▶️ 嵌入式系统词汇表:

计算机硬件和软件以及可能附加的机械或其他部件的组合,设计用于执行专用功能

在某些情况下,嵌入式系统是更大系统或产品的一部分,例如汽车中的防抱死制动系统。

🗺️ 路线图

嵌入式系统工程路线图

嵌入式系统工程路线图分为三个基础领域:软件硬件软技能

虽然在嵌入式系统中硬件和软件的交叉很普遍,但具体的职位名称往往强调其中一个方面。例如,“嵌入式软件工程师/开发人员”、“固件工程师/开发人员"和"嵌入式 Linux 工程师/开发人员"等角色主要专注于软件开发。相反,“嵌入式硬件工程师"和"硬件设计工程师"等职位主要处理硬件设计和电子。此外,还有"嵌入式系统工程师"这样的角色,需要对硬件和软件都有全面的理解。

重要的是要注意,嵌入式行业中的每个公司对给定职位可能有独特的要求。因此,根据您的职业志向调整您的重点至关重要。如果您寻求嵌入式软件职位,请优先考虑路线图中列出的软件相关技能。相反,如果您对嵌入式硬件工作感兴趣,请专注于硬件技能,并在电子学习上投入更多时间。

本路线图为典型的"嵌入式系统工程师"角色提供了全面的指导。通过深入了解软件和硬件方面,您可以培养在这动态领域发展所需的必要技能。但是,如果您对软件或硬件有明确的偏好,您可以相应地调整学习路径。

🔗 有关此路线图背后历史的更多信息,请阅读这篇文章:嵌入式系统路线图:弥合差距

[!NOTE] 请记住,个人软件和硬件技能的重要性可能因公司要求和职位角色的具体要求而异。

[!TIP] 为了区分学习资源的类型及其内容质量,在每个项目前使用了特定符号。

资源类型:

  • 📘 :书籍
  • 🎞️ :视频
  • 📝 :撰写内容、文章和博客文章
  • 🔗 :不属于上述类别的其他链接

内容质量符号:

  • 👶 :易于理解和适合初学者的资源。如果您对某个主题没有先验知识,请参考这些资源。
  • 💎 :众所周知的参考资料,具有真正无价的综合内容。如果您想加深对某个主题的理解,请参考这些资源。

[!IMPORTANT] 本仓库不隶属于任何内容创建者、出版商或组织,也不以任何方式获得其财务支持。我们不认可或推荐任何特定的付费资源。免费和付费资源都已包含在内,以提供一系列选项,让您选择最适合您需求和偏好的内容。

😕 不知道从哪里开始!

如果您被路线图中大量的主题感到不知所措,您并不孤单。在深入之前,让我们通过一些简单的入门项目来轻松入门。学习嵌入式系统工程需要时间和精力。如果您没有立即理解某些内容,请不要气馁。不断练习,您最终会达到目标。

⚒️ 项目

从事实践项目是学习最有效的方法。而不是仅仅依赖书籍或文章的理论知识。开展项目可以获得实践学习经验。即使是一个看似简单的项目,也有可能教给您比漫无目的阅读数小时更多的东西。当您在真实项目的理解问题上遇到困难时,您可以参考书籍、文章和课程。

不要试图立即构建一个复杂的项目。从小型、易管理的项目开始,让您熟悉这个领域。

🔎 搜索和提问!

使用搜索引擎找到您问题的答案。

如果您使用搜索引擎找不到您要查找的内容,AI 聊天机器人也可以提供帮助。请注意,AI 在某些情况下可能会提供错误的答案。最好使用更可靠的参考资料来确认任何答案。

如果您对仅依赖 AI 建议有顾虑,您也可以向真人提问:

✳️ 职业发展

作为嵌入式系统工程师,及时了解行业趋势、最佳实践和新技术以推进您的职业发展至关重要。以下是一些帮助您实现职业目标的资源:

🎥 课程和 YouTube 内容

您可能听说过 YouTube 是一所大学。确实如此 - YouTube 上有大量关于嵌入式系统的宝贵免费内容。您还可以通过 Coursera 和 EdX 找到一些优秀的免费课程。此外,Udemy 提供一些高质量的付费课程选项。

🕹️ Arduino

如果您没有任何嵌入式系统编程背景,Arduino 板和库是您开始和学习基础知识的最佳选择。请记住,大多数 Arduino 库是为学习目的而开发的,未针对行业使用进行优化。

此外,Arduino Core 处理了大部分低级硬件相关操作,作为嵌入式工程师,您应该能够自己处理这些操作,或者至少对其有清晰的了解。如果您想成为专业的嵌入式开发人员,您应该能够有效地使用微控制器供应商提供和批准的行业标准 API 和 SDK,例如用于 ARM Cortex-M 微控制器的 CMSIS、用于 STM32 的 STM32Cube、用于 Espressif 微控制器的 ESP-IDF 等。

👨‍🏫 教育网站

🗺️ 其他有用的路线图

🛠️ IDE

👨‍💻 VS Code 扩展

🐜 PlatformIO

PlatformIO 是一个跨平台、跨架构、多框架的专业工具,面向嵌入式系统工程师和为嵌入式产品编写应用程序的软件开发人员。

PlatformIO 在工业和大型项目中尚未被广泛采用,然而,对于从事小型项目的个人来说,它是一个极好的选择。因为它大大减少了对安装框架和设置构建及调试工具的需求,让您能够专注于编程。

📚 学习资源

[!WARNING] 您不需要阅读这里的所有书籍、文章或观看所有视频。如果您尝试这样做,最终会感到疲惫和失望。您无法在合理的时间内学习完这里提供的所有内容,因为这可能需要数年时间。重要的是学习足够的知识以对所需主题至少有一个基本的了解。当然,您投入学习和做项目的时间越多,您的知识和专业知识就会越深厚。

这里提到的一些资源只会用作参考资料。仅在需要时参考它们。

✳️ 软技能

与其他职业一样,嵌入式工程师需要软技能,这些技能不能仅通过阅读或观看视频获得。这些技能通过互动和处理各种工作障碍来培养。提高软技能不是一种一刀切的方法。它会因个人的特质而异,需要自我意识了解自己的优势和成长领域。提高这些技能需要时间和精力。

✳️ 电子学

🔵 基础微积分

🔵 电路原理

🔵 电子学基础

🔵 数字设计

🔵 计算机架构

计算机架构是嵌入式系统的支柱,管理着硬件和软件的交互。嵌入式开发人员需要掌握计算机架构才能有效地设计、开发和调试嵌入式软件。掌握 ARM 和 RISC-V(嵌入式系统中两种流行的指令集架构(ISA))的专业知识对嵌入式开发人员至关重要。ARM 是占主导地位的 ISA,而 RISC-V 的开源性和灵活性正在获得关注。

✳️ 使用测试设备

嵌入式系统通常需要专用测试设备来验证其功能和性能。这些设备包括万用表、示波器、逻辑分析仪、函数发生器、电源和其他工具,使工程师能够测量信号、注入激励并监控嵌入式系统的行为。

🔵 万用表

🔵 逻辑/协议分析仪

🔵 示波器

✳️ 原型制作技能

虽然硬件设计和原型制作主要是电子硬件设计工程师的职责,但嵌入式软件工程师也可以从对这些概念的 基本理解中受益。这些知识在嵌入式系统调试过程中识别和解决硬件相关问题时可以发挥重要作用。通过掌握硬件原理,嵌入式软件工程师可以有效地找出问题的根本原因,从而实现更快、更高效的故障排除。

🔵 面包板

面包板是一种用于原型制作的实践方法,为实验和电路设计提供了多功能平台。嵌入式系统经常使用面包板,因为它们易于使用、灵活且经济高效。通过在面包板上连接元件,嵌入式系统开发人员可以快速测试和完善他们的设计,而无需永久焊接。这允许快速迭代和高效调试,使面包板成为嵌入式系统开发中不可或缺的工具。

🔵 硬件设计基础

🔵 PCB 设计 / EMC

🔵 焊接/返修

✳️ FPGA 开发

FPGA(现场可编程门阵列)是专用集成电路,可配置为执行各种数字逻辑功能。它们广泛用于嵌入式系统中,以实现高性能、灵活性和成本效益。FPGA 设计人员使用硬件描述语言(HDL)创建直接映射到 FPGA 架构的定制电路。由于 FPGA 工程和验证与嵌入式软件开发显著不同,它在嵌入式系统中是一个专业领域。

✳️ 编程基础

掌握编程基础和软件开发原则对于成功的嵌入式设计至关重要。嵌入式系统需要高效代码、优化数据管理、可重用设计模式和有效内存管理,才能在资源受限的环境中有效运行。嵌入式开发人员必须具备这些核心概念的坚实基础,以创建可靠和高性能的嵌入式系统。

🔵 基础离散数学

🔵 算法与数据结构

🔵 设计模式

🔵 状态机

🔵 内存管理

✳️ 编程语言

C 和汇编等低级语言提供直接硬件访问,能够为资源受限的嵌入式系统实现高效代码优化。C++ 和 Rust 等系统级语言为复杂嵌入式应用提供了更高级别的抽象,而 Python 由于其简单性常用于测试嵌入式系统。

🔵 C

🔵 C++

来自 Bjarne Stroustrup(C++ 创建者)的额外资源

🔵 汇编

🔵 Python

🔶 Python 用于微控制器

🔵 Rust

🔵 Zig

✳️ 微控制器

微控制器是集成电路(IC),将微处理器、存储器和输入/输出(I/O)外设集成在单个芯片上。它们专为嵌入式应用而设计,用于控制各种行业的设备,包括汽车、工业、消费电子和医疗保健。

一些流行的微控制器系列包括 AVR、PIC、STM32、MSP430、nRF 和 ESP32。选择合适的微控制器需要评估应用需求、处理能力、内存需求和输入/输出能力。考虑易用性、成本、可靠性、可用性和未来扩展性。

🔵 GPIO

🔵 ADC

🔵 DAC

🔵 定时器/计数器

🔵 PWM(脉冲宽度调制)

🔵 RTC(实时时钟)

🔵 看门狗

🔵 中断

🔵 DMA

🔵 时钟管理

🔵 电源管理

🔵 引导加载程序 / DFU(设备固件更新)

✳️ 接口、协议与通信技术

嵌入式系统通常通过接口和协议与其他设备或外部系统通信。接口提供物理连接,协议定义数据交换规则。选择取决于应用特定需求,包括带宽、距离、安全性和功耗。

🔵 ‌基本协议

🔶 UART
🔶 I2C
🔶 SPI
🔶 SDIO
🔶 I3C
🔶 1-Wire

🔵 数字音频协议

🔶 I2S
🔶 PCM

🔵 显示和摄像头协议

🔶 SCCB
🔶 MIPI CSI-2
🔶 MIPI DSI
🔶 HDMI

🔵 无线协议

🔶 蓝牙 / BLE
🔶 Wi-Fi
🔶 LoRa / LoRaWAN
🔶 Zigbee
🔶 Thread
🔶 Matter

🔵 工业协议

🔶 Modbus
🔶 RS485
🔶 EtherCAT
🔶 CoAP 和 MQTT

🔵 高速协议

🔶 以太网
🔶 USB
🔶 PCIe

🔵 汽车协议

🔶 CAN

🔵 网络协议 / 套接字编程

🔵 蜂窝通信

🔶 GSM / LTE
🔶 LTE-M 和 NB-IoT

✳️ 存储技术与文件系统

嵌入式系统采用易失性(SRAM、DRAM、PSRAM)和非易失性(闪存、EEPROM、FRAM)存储器的组合来存储和访问数据,基于性能、成本、功耗和耐用性等因素。

🔵 闪存

🔶 NOR / NAND
🔶 eMMC
🔶 SD 卡

🔵 EEPROM

🔵 SRAM / DRAM

🔵 文件系统

文件系统是在存储设备(如硬盘、闪存驱动器或固态驱动器)上组织数据的一种方式。它提供了存储、访问和管理文件的方法,文件是可以单独访问的数据集合。嵌入式系统中的文件系统通常是轻量级的并为效率而优化,考虑到嵌入式设备的有限资源和特定要求。与桌面或服务器文件系统相比,它们通常采用更简单的文件结构和数据结构。

✳️ 硬件仿真 / 模拟

嵌入式系统开发通常涉及在将软件部署到实际硬件之前,仿真或模拟硬件环境来测试和调试软件。仿真工具创建硬件系统的虚拟模型,而仿真工具使用真实硬件组件复制实际硬件行为。这些工具提供了几个优势,包括减少开发时间、最小化硬件成本和提高软件可靠性。

🔵 QEMU

🔵 Renode

✳️ 传感器和执行器

传感器和执行器是嵌入式系统的眼睛和双手。它们负责收集有关环境的信息,并根据这些信息采取行动。传感器将物理现象(如温度,光或声音)转换为嵌入式系统可以处理的电信号。另一方面,执行器将电信号转换为物理动作,如控制电机速度或打开和关闭阀门。

🔵 传感器

🔵 执行器

✳️ 数字信号处理

数字信号处理(DSP)是处理数字信号的工程分支。它广泛应用于嵌入式系统、通信系统和多媒体系统等各种应用。DSP 算法通常使用专用集成电路(ASIC)或现场可编程门阵列(FPGA)在硬件中实现。

🔵 DSP 基础和滤波器设计

🔵 离散傅里叶变换 / FFT

✳️ 控制理论

🔵 PID 控制器

✳️ 操作系统

嵌入式系统可以使用操作系统(OS)编程,也可以直接在硬件上编程,称为裸机编程。每种方法都有其优缺点。嵌入式操作系统在硬件和应用程序代码之间提供了一层抽象,提供资源管理、任务调度、错误处理和通信能力等好处。然而,它们增加了开销,可能不适合内存受限的应用。

🔵 操作系统基础

🔵 实时操作系统

实时操作系统(RTOS)是专为满足严格的时间期限而设计的专用操作系统。它们用于时间关键型的嵌入式系统,如航空电子、机器人和医疗设备。RTOS 提供了一个确定性环境,在该环境中任务可以以可预测的时间执行。这确保了关键任务始终能及时执行,即使在存在中断和其他干扰的情况下。

🔶 RTOS 基础
🔶 FreeRTOS
🔶 Zephyr
🔶 μC/OS / Micriμm OS
🔶 NuttX
🔶 RT-Thread
🔶 Mbed OS
🔶 QNX
🔶 VxWorks
🔶 Azure RTOS (ThreadX)

🔵 嵌入式 Linux

嵌入式 Linux 是为嵌入式系统量身定制的 Linux 操作系统专用版本。它设计用于在资源受限的设备上运行,如内存、处理能力和功耗受限的设备。

🔶 Linux 内核
🔶 Linux 设备驱动程序
🔶 U-Boot
🔶 Buildroot
🔶 Yocto
🔶 多线程和并行处理
🔶 高性能计算 (HPC)
🔶 进程间通信 (IPC)
🔶 Qt 框架

✳️ 调试

调试嵌入式系统包括识别和解决软件缺陷和硬件故障。采用各种技术来查明问题的根本原因,如静态代码分析、动态分析、仿真和模拟、在线调试和硬件调试。

🔵 JTAG / SWD

JTAG 和 SWD(串行线调试)是两种流行的接口协议,用于调试和编程嵌入式系统。JTAG 是一种更通用的协议,可用于调试和编程更广泛的设备,而 SWD 是一种更简单、更紧凑的协议,专门为 ARM 微控制器设计。

🔵 GDB

GDB(GNU 调试器)是一个强大的多功能调试器,用于源代码级和机器级调试。它支持多种编程语言,包括 C、C++、Objective-C、Java 和 Rust。GDB 是一个免费的开源软件工具,被开发人员和研究人员广泛使用。

🔵 OpenOCD

OpenOCD(开源片上调试器)是一个开源软件工具,为调试和编程嵌入式系统提供了一个强大而通用的平台。它作为硬件调试适配器(HDA)和调试器(如 GNU 调试器(GDB))之间的接口,使开发人员能够与目标微控制器或微处理器交互。OpenOCD 支持广泛的硬件平台,并提供全面的硬件调试、编程和边界扫描测试功能集。

✳️ 构建系统

构建系统自动化将源代码编译和链接为可执行程序的过程。它们是软件开发的重要工具,可以帮助提高构建过程的效率和一致性。流行的构建系统包括 Make 和 CMake。

🔵 编译器 / GCC

GCC(GNU 编译器集合)是一个免费的开源编译器系统,可以为许多不同的编程语言编译程序,包括 C、C++、Objective-C、Fortran、Ada 和 Go。由于其开源性、成熟度、稳定性、可移植性、性能和大型社区,GCC 是嵌入式系统开发的流行选择。另一方面,Keil 和 IAR 等专有编译器提供工具链支持、特定目标优化和客户支持,可能更适合特定项目。

🔵 Make / CMake

CMake 和 Make 都是用于构建软件应用程序的工具。CMake 是一个元构建系统,生成 Makefile,然后由 Make 用于构建软件。CMake 比 Make 更通用和跨平台,正在成为现代软件开发中更流行的选择。

🔵 Bash 脚本

Bash 脚本在嵌入式系统开发中是一个强大的工具,使开发人员能够自动化重复性任务、处理复杂配置并有效地管理嵌入式系统环境。Bash 脚本是一个特定于 Linux 的工具,原生未集成到 Windows 中。但是,可以通过 Windows Subsystem for Linux (WSL) 访问它。

🔵 Docker

Docker 容器为构建软件应用程序提供了一致和隔离的环境。这可以帮助提高构建的可重复性并降低错误风险。Docker 还使共享构建环境变得更容易,可以为开发人员节省时间和精力。

✳️ 软件开发生命周期 (SDLC) 模型

软件开发生命周期(SDLC)模型为软件开发提供了结构化方法,指导从规划到部署和维护的过程。这些模型为组织、管理和执行软件项目提供了一个框架,确保一致和高效的开发过程。

🔵 敏捷 / SCRUM

🔵 V 模型(V 周期)

✳️ 版本控制系统

版本控制系统是管理代码和其他数字资产更改的基本工具。它们跟踪随时间的变化,允许开发人员回滚到以前的版本,有效协作并识别潜在冲突。流行的版本控制系统包括 Git、Mercurial 和 Subversion。

🔵 Git

🔵 SVN (Subversion)

✳️ 测试

测试是嵌入式系统开发过程不可或缺的组成部分,确保这些系统的质量、可靠性和安全性。它涉及一系列技术,从单元测试到系统测试,以验证软件和硬件组件的功能和性能。

🔵 测试驱动开发 (TDD)

🔶 单元测试
🔸 GoogleTest - Google 测试和模拟框架
🔶 集成测试

🔵 CI/CD 流水线

持续集成(CI)和持续交付(CD)是自动化构建、测试和部署软件过程的软件开发实践。CI/CD 流水线旨在确保软件更改快速且可靠地部署。

🔵 SIL / HIL 测试

软件在环(SIL)和硬件在环(HIL)测试是嵌入式系统开发中使用的两种关键技术,用于在将软件部署到真实硬件之前验证其功能和性能。这些测试方法使用软件模型或硬件仿真器模拟嵌入式系统的真实世界环境。

🔵 标准和认证

嵌入式系统开发受各种标准和认证的约束,这些标准和认证作为指南和基准,确保这些系统的质量、安全性和可靠性。这些标准通常由行业机构制定和维护,如国际电工委员会(IEC)和汽车工程师协会(SAE)。

🔶 功能安全

✳️ 嵌入式安全

嵌入式系统安全特别具有挑战性,因为资源限制和这些设备的固有性质。嵌入式系统通常在具有有限内存和处理能力的小型低功耗微控制器上运行。这使得实现与传统计算平台相同级别的安全性变得困难。此外,嵌入式系统通常对更新和补丁的访问有限,使它们更容易受到已知漏洞的影响。

🔵 硬件黑客

学习硬件黑客技术有助于安全专业人员理解嵌入式系统是如何被攻破的,从而能够设计和开发有效的防御措施来抵御网络攻击。这类知识能够显著提升嵌入式设备在面对攻击时的安全性与韧性。

🔵 密码学

🔵 安全启动和安全固件更新

✳️ 嵌入式 GUI

图形用户界面(GUI)已成为现代嵌入式系统不可或缺的组成部分,为与设备交互提供了用户友好和直观的方式。为嵌入式系统设计有效的 GUI 需要仔细考虑资源限制、用户体验和实时性能等因素。

✳️ 物联网 (IoT)

物联网(IoT)指的是互联设备的网络,这些设备收集数据并与其他设备或云交换数据。嵌入式系统通常是物联网设备的"大脑”,管理数据收集、处理和通信任务。嵌入式系统设计用于在有限的电源和资源下运行,使它们非常适合物联网应用。

🔵 差分空中固件更新

✳️ 边缘 AI

边缘 AI 指的是设备能够自行执行机器学习任务的能力,无需将数据发送到中央服务器。这可以通过使用直接嵌入设备内的小型专业 AI 模型来完成。TinyML 是边缘 AI 的一个子集,专注于为计算能力非常有限的设备(如微控制器和传感器)开发这些模型。

🔵 AI 和 ML 基础

🔵 TensorFlow Lite

🔵 TinyML

✳️ AUTOSAR 架构

AUTOSAR,即汽车开放系统架构,是一个全球性的汽车工业软件标准。它是一种软件架构,为开发 和集成车辆电子控制单元(ECU)中的软件组件提供了标准化平台。这允许来自不同制造商的不同 ECU 能够无缝通信和协作。

✳️ 附录 A:高级主题

🔵 离散数学

一门通用核心课程:这是一门对计算机科学学生以及部分数学和电气工程专业学生都至关重要的公共基础课程,其设置依据是计算机协会关于 CS/CE 教育的指南。该课程涵盖了抽象数学建模和计算理论中最为核心的内容。此外,它有助于学生建立关键的工程化思维方式,构成所有计算机科学与计算机工程领域的共同基础。然而,对于嵌入式系统工程师而言,逻辑、组合数学理论、编码理论以及计算理论是最为重要的核心科目。

学习离散数学的目标:嵌入式系统工程师应当根据自身的专业方向,最终掌握其中的大部分内容;因为离散数学解释了计算机工程的科学与理论基础。例如:用于音频/视频编码与解码以及数据传输的编码理论,用于事件控制和数据传输的自动机理论,用于数字电路设计和开关代数的逻辑理论,以及用于并发建模的 π 演算和自动机理论。

离散数学是一门多学期课程,涉及计算机科学理论数学基础的主题,包括但不限于:

历史

起初这只是我的个人阅读列表,但随着列表逐渐越来越大,我想为什么不与他人分享。所以我研究了当前嵌入式工程职位的招聘信息,选择了最常见的技能,并将它们包含在路线图中。为了使路线图更全面,我还添加了一些基本技能,最终得到了您现在看到的内容。

创建这个路线图的想法来自 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 文件。

相关文章