赞
踩
嵌入式系统是一种将软件和硬件紧密结合的技术。在我们投身嵌入式行业时,首先需要认识到,无论我们是专注于软件开发还是硬件开发,最终的目标都是为了更好的工作和职业发展。
根据企业的规模和需求,大公司更倾向于将职责分得更细,例如软件分为:驱动、应用和系统,有的还会有中间件;而小公司则希望你能够掌握更全面的技能,即一个人能够胜任多个职位的工作。
曾经有人对稚晖君所具有的技能做了总结,他的技能包括:
电子基础、电子元器件选型、电路原理图设计、高速电路 PCB 设计、电子元器件焊接技术、电路板调试、启动程序 UBOOT 裁剪移植、Linux 内核裁剪移植、文件系统、底层驱动程序(C语言、ARM 架构汇编、Linux 内核架构)、上层应用程序(C++、Qt、JAVA、Python等,深度学习,机器学习,OpenCV,神经网络,自然语言处理)、静态博客服务器搭建、高等数学、线性代数、概率论、离散数学、3D 建模、3D 打印、雕刻机、视频拍摄后期制作、防脱发技术等。
这些技能中有哪些是我们作为嵌入式工程师必须掌握的?它们的学习路线又是怎样的?
嵌入式的技能等级分为初级、中级和高级;但从工作内容上可以先分为两个方向:软件和硬件。在本文中,我们将探讨嵌入式软件工程师的学习路径,包括技能等级的划分和各方向的学习重点,以及如何根据个人的兴趣和职业规划来选择合适的学习路径。
在嵌入式软件工作的分类方法是多元和多样的。在这里,我们将简要介绍几种主要的分类方式:
1) 根据代码面向的对象 ,嵌入式软件工作可以大致分为三大类:
2) 从硬件使用的操作系统角度来分类 ,我们可以将其分为以下几类:
在招聘网站上,你会发现有多种与嵌入式相关的工作岗位描述,例如:
通过了解嵌入式软件工作的这些分类,你可以更清晰地理解每个岗位的具体职责和要求。
接下来,我们就进入正题,说一下嵌入式工程师需要具备的开发技能,以及学习梯度。
在你着手学习嵌入式系统之前,首要任务是确立坚实的编程语言基础。
这一过程不仅仅涉及学习语法和编程技巧,更包括培养编程思维和逻辑分析能力。这个阶段为你建立了坚实的技术根基,为进一步的学习和发展奠定了基础。
同时随着学习的深入,除了C语言,你最好也有需要学 C++、Python、汇编。
书籍:《C程序设计语言》、《数据结构与算法分析--C语言描述》
网站:54笨鸟(一个提供 C/ C++学习资源的网站,可以帮助你查漏补缺)
一旦你掌握了编程语言的基础,接下来的学习重点将是嵌入式 CPU 和开发平台的相关知识。
在这个阶段,你将学习如何使用C语言来控制硬件,并深入理解硬件的工作原理。此外,现在以及未来,RISC-V 架构正在逐渐崭露头角,并有望在某些领域取代 ARM。因此,我强烈建议你早日开始学习 RISC-V,以跟上这一潮流。
这个阶段的学习将为你提供更深入的硬件编程技能,这对于嵌入式系统开发至关重要。此外,了解不同的处理器架构也将有助于你在未来选择最合适的工具和平台,以满足不同项目的需求。
书籍:《ARM嵌入式系统开发--软件设计与优化》、《STM32 HAL库开发实战指南--基于野火F4系列开发板》
进入这一阶段,你已经具备了一定的基础知识和实践经验。现在是时候开始学习更高级的概念和技术,以帮助你成为一名中级嵌入式工程师。
在你有了裸机编程的经验,在工作和学习中,你可以会发现:大部分的物联网芯片、模块都是在使用 RTOS 的,比如:
这么多的 RTOS,我们是否需要每个都去学一遍?其实不需要,这个阶段,你可以开始学习 RTOS 的基本概念和原理。掌握了这些,就万变不离其宗了。
以下是你需要掌握的核心要点:
在 RTOS 的基础上,你可以进一步学习 Linux 系统的构建和管理。
以下是你需要掌握的核心要点:
书籍:《RT-Thread内核实现与应用开发实战指南》、《构建嵌入式Linux核心软件系统实战》
当你准备进阶学习嵌入式 Linux 系统开发时,你需要熟悉 Linux 环境下的开发工具和技术。
以下是你需要掌握的核心要点:
VI 使用的书籍推荐《简明 VIM 练级攻略》陈皓 (R.I.P)
Makefile 使用的书籍推荐《跟我一起写Makefile》陈皓(R.I.P)
Linux基础入门:C语言中文网
随着你对 Linux 环境和工具的深入了解和熟悉,你即将步入一个新的学习阶段,专注于 Linux 环境下高效的应用程序开发。这一阶段的学习内容是多元化的,涵盖了多进程、多线程、网络编程、GUI 设计以及数据库编程等多个重要领域。
在当前的技术背景下,Linux 开发主要集中在应用开发领域,这是因为应用场景丰富多样,同时也存在着大量的需求。此时,你正处于一个知识融汇和实践的阶段,你所学到的前面的各种知识将在这里得到综合应用和实践。
例如,你可能需要设计一个系统,该系统能够接收外部数据,并通过 GUI 实时显示这些数据。
在这个过程中,你可能需要利用多进程或多线程通信技术来实现数据的实时传输和处理。同时,你还需要掌握如何将这些数据存储到数据库中,以便记录和跟踪系统的状态和变化
书籍:《UNIX环境高级编程》、《Unix网络编程》。
在你掌握了 Linux 应用程序开发的技术后,你可以进一步学习 Linux 设备驱动程序的开发。这一阶段的学习将涵盖底层硬件控制和驱动开发的核心技术。
实际上,在这里我想分享一些个人关于驱动开发和内核开发的职业道路的见解。
因为很多嵌入式的同学都是从裸机单片机这个阶段,进阶到 Linux 的,所以理所当然的认为,比起应用开发学习的内容,驱动开发可能会更容易些。虽然网络上有大量的资源和机会可以探索这些领域,但如果你不是在芯片原厂工作,这条路径可能对个人技术的提升有一定的限制。
事实上,除非你是在芯片原厂从事开发工作,否则你可能会发现,无论你的技术水平提高到什么程度,最终达到的高度和见识甚至都可能无法与原厂的 FAE 相媲美。原厂的开发和 FAE 通常具有更丰富的经验和更深入的理解,他们的知识储备和见识往往是通过长期累积和实践得来的。
因此,当你考虑职业发展和技术提升时,也许可以思考如何找到一个能够充分发挥你技能和知识的平台,同时也能为你提供更多学习和成长的机会。
当然了解驱动开发和内核开发仍然是重要的,因为在某些情况下,特别是在小型公司或初创公司,可能会要求你具备多方面的技能。对这些领域的了解不仅可以帮助你胜任工作,还可以提高你对嵌入式 Linux 开发的全面理解,从而更好地应对不同的工作需求。
这种多面性有助于你更好地适应不同的工作环境和项目,为你的职业生涯增加更多的机会和灵活性。
书籍:《Linux设备驱动程序》、《嵌入式Linux驱动开发教程》。
经过前面的学习和准备,你现在已经具备了嵌入式开发的基本技能。现在,你已经进入到项目实践阶段,这是一个验证和展示你所学知识应用能力及解决实际开发问题能力的时期。你可以选择从多个方向进行实践,包括但不限于物联网、机器人、音视频和 AI 方向。
额外提示,在项目实践过程中,你将遇到许多之前未曾接触过的传感器、操作系统和技术。例如:
在这个阶段,你可能会遇到很多从未听说过的概念和技术,这可能会让你感到不适或困惑。但请记住,知识可以分为两类:一类是你已经知道的,另一类是你知道在哪里可以找到答案和资源。在面对未知时,不要害怕寻求帮助和使用各种资源来扩展你的知识库。
在嵌入式工程师的成长道路上,我们需要的不仅仅是技术的积累和深化,更需要一个开放和探索的心态。正如稚晖君所言:
我们不能局限于自己的专业领域,而应该积极探索和学习新的技术和领域。同时,也要学会正确地利用各种资源和工具,提高我们解决问题的能力。我们所追求的不仅仅是技能的掌握,更是一种以问题为导向的学习方式。我们要学会在实践中不断寻找问题,然后再通过自学来寻找解决问题的方法和答案。只有这样,我们才能在嵌入式的世界里不断进步和成长,最终成为一名真正的专家。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。