经常会看到网上有些文章,或者一些嵌入式工程师的岗位要求。
有的强调C语言、STM32、PCB设计,有的要求Linux内核、驱动开发、ARM架构……看着这些离谱要求,很多新手还没开始,人已经麻了。
嵌入式开发竟要学这么多,其中的STM32就够喝一壶了,还要会RTOS和Linux…真的是还没入门就想放弃了。
但是对于我们这些在行业干了很多年的工程师来说,里面大多数东西,都是不用学的。
下面,我来终结这些迷茫。
嵌入式软件开发是一个涵盖很广的概念,它可以根据芯片种类和开发技术,细分为单片机、Linux应用、Linux驱动、FPGA等多个不同方向。
很多岗位要求,并没有对这些岗位进行细分,而是统称为嵌入式工程师。
在工作的前几年,我也没经验,导致面试白跑了几次,最后达不到企业要求,以为是自己太差劲了,其实不是,而是岗位不对。
这些岗位之间,要学习的内容,也是千差万别的。
比如STM32,它隶属于单片机方向,而Linux基础指令则是Linux应用开发和驱动开发方向。
单片机工程师需要精通C语言,使用寄存器编程,调试外设时比较贴近硬件。
而Linux工程师则需要了解内核源码,开发驱动程序,基于ARM+Linux平台上做驱动开发。两个方向虽同属嵌入式,但所需技术栈是不一样的。
当然,嵌入式的细分不止于此,还有FPGA工程师,要对硬件描述语言熟悉,既懂硬件设计,又通软件编程,学历门槛更高。
对于初入行的,我的建议是,一定要先搞清自己的目标岗位所需的核心技能,再制定针对性的学习路线。
如果已经学了了STM32,学历各方面没特别优势,就先专攻单片机方向,把C语言、数据结构、常用外设和通信协议学扎实了,练几个像样的项目,为求职打好基础。
千万别贪多求全,掌握点STM32和Linux基础,到头来连基本项目都完成不了,把单片机学精,胜过东学一点西学一点。
当然,如果你不想局限于单片机开发,等找到工作后,完全可以在此基础上,慢慢过渡到Linux应用开发和驱动开发,这其实是一个很自然的进阶过程。
嵌入式的技术相通性也挺很强的,学好嵌入式的一个分支,不仅可以纵向精进,还能横向拓展,在这个领域里厚积薄发。
什么是纵向精进?
就是专注单片机开发技术栈和行业技术栈,成为某个领域的技术专家。
什么是横向扩展?
比如嵌入式Linux应用开发,虽然嵌入式Linux和裸机开发有很大不同,但你在STM32上学到的嵌入式系统基础知识,如内存管理、中断处理、多线程编程等。
在嵌入式Linux开发中同样适用,你对嵌入式系统的底层认知能帮助你更好地理解和优化Linux应用程序。
除了技术学习,我想作为过来人跟你分享一些行业感悟。
其实决定求职成败的因素有很多,除了你提到的学历、年龄、城市等客观条件,过硬的项目经验和综合素养也是不可或缺的。
最近发现,很多私聊我学单片机的小伙伴,99%的人都走了弯路,所以我花几个小时,写了一篇保姆级学习路线^ ^
单片机怎么学?保姆级学习路线(附教程+工具)https://blog.csdn.net/2401_86645590/article/details/141437874