嵌入式工程师成长之路 系列文章 总目录 |
---|
系列文章总目录 |
希望本是无所谓有,无所谓无的,这正如脚下的路,其实地上本没有路,走的人多了,也便成了路 |
原创不易,文章会持续更新,欢迎微信扫码关注 |
承接 小程序 / 嵌入式 / PC端项目开发,欢迎添加笔者微信18166056253 |
1.嵌入式领域
嵌入式是用来做产品或做控制系统的一类技术的总称。把嵌入式看成一个行业我觉得是不对的,你可以说智能电视是一个行业,无人机是一个行业,他们都使用了嵌入式技术。
整个领域如下图所示:
英国有一家芯片设计公司,名字叫arm。arm这家公司很特别,它只设计芯片,不生产芯片。我们把arm设计输出的东西叫芯片内核。它是整个领域最上游的公司。
把嵌入式领域比作房地产建筑行业。
(1)arm公司就是建筑设计师,并且这些设计师能力非常强。他们只设计图纸,类似的公司还有intel。
(2)ic设计公司就是房地产公司,房地产公司也有自己的设计师。但这些设计师是把arm公司设计的图纸买过来,进行二次开发。并且针对自己的房地产项目的侧重点,对图纸进行不同的修改。
譬如,如果是刚需项目,那就把房屋面积整体改小,改到100平左右;如果是酒店房地产项目,那就把房间改大;如果是别墅房地产项目,那就把楼层高度加高。
也就是ic公司把arm公司设计的芯片设计图纸买来之后,针对自己所定位的行业来设计适合该行业的芯片。我们也把这类公司称为SoC芯片原厂。
譬如意法半导体,他们拿到arm公司的图纸之后,针对微控制领域的特点,设计出了非常受欢迎的stm32芯片。譬如华为海思半导体,他们拿到arm公司的图纸之后,针对路由器等通信领域,设计出对应的芯片。
这些公司也仅仅是对图纸进行二次开发,这些公司输出的东西还是图纸。因为他们自身没有把图纸变为芯片的能力。华为找到台湾的台积电晶圆代工厂,让他们帮忙根据海思设计的图纸把芯片加工出来。
就好比建筑设计师没有建房子的能力,他们把建筑图纸设计出来之后,需要找专门的施工队,让他们按照建筑图纸来施工建房子。
(3)产品公司就非常多了。
譬如无人机公司,很多四旋翼无人机公司使用意法半导体的stm32来做无人机的主控。譬如oppo手机用高通的芯片来做手机。譬如小米公司用amlogic的芯片来做智能电视。
但stm32是通用的微处理器,也就是它可以用在绝大多数的控制系统中,譬如以前公司做过的空气净化器和给非洲人民做的智能磨面机。
(4)方案公司
有公司就是自己做无人机,智能磨面机或空气净化器的,自己研发,自己找代工厂生产,打上自己公司的logo对外销售。这类就是产品公司,但如果产品公司不想自己研发,譬如人手不够,知识储备不够,那这些产品公司就会去找方案公司,俗称外包公司,帮忙研发产品,产品研发好之后,再贴产品公司的logo。
有些大的工业设计公司也会承包产品方案的设计,工业设计的首要工作是帮客户设计产品结构;如果该设计公司有供应链和开模方面的经验,有些创业公司也会把所有东西都包给设计公司做,这里的设计公司其实也担任了一个方案公司的角色。
2.cpu架构和择业
arm针对目前的市场,设计了三种不同的架构。
(1)针对于微控制器领域,设计出了cortex-M架构,譬如意法半导体拿到这个cpu架构图纸,在此基础上设计出了stm32;飞思卡尔也拿到这个cpu架构图纸,在此基础上设计出了k60。基于这种架构设计出来的cpu主要是对标以前的51单片机。
cortex-M架构又分很多细分领域,譬如低功耗领域,cortex-M0,通用微处理器领域,cortex-M3,高性能微处理器领域,cortex-M4,除了增加了特定的功能模块和性能稍微有所提升之外,它们本质上没有区别,会一种类型,很容易就能学会其他类型的。
智能磨面机,空气净化器,3D打印机或很多的无人机都是使用这种架构的cpu做主控。如果是做这种产品,需要依次学习以下知识:
[1] C语言
[2] stm32芯片裸机编程,也就是用C语言来操作各种外设。
[3] rtos。
[4] 模拟电路设计,mcu外围电路设计。
然后自己再从0到1做一个项目,包括软件和硬件。
有以下工作岗位:
(1)stm32工程师,单片机软件工程师,嵌入式软件工程师。
(2)嵌入式硬件工程师。
大公司一般也分得比较细,有专门的嵌入式stm32软件工程师和嵌入式硬件工程师。最好的方法就是自己到前程无忧等招聘网站搜索,看看这些工作岗位需要什么样的专业技能.
这种主要是做mcu外围电路设计的,主要是mcu和模拟电路需要掌握。
这两种主要是做软件的,C语言和arm微处理器是核心。
如果你就想做无人机:
如果你就想做电机控制:
没事就到招聘网站上看看这些招聘信息,你就知道你要学什么了。
(2)针对消费类电子领域,设计出了cortex-A架构。cortex-A架构也分了有很多种类,譬如单核心cpu架构cortex-A8,四核心cpu架构cortex-A53等。三星公司拿到arm公司设计的架构图纸,设计针对智能手机行业的芯片。联发科拿到arm公司设计的架构图纸,设计针对智能电视行业的芯片。
手机、智能电视、机顶盒、智能音箱等产品比微控制领域的产品更复杂一些。这类产品一般都是直接跑linux或Android的。所以这种嵌入式行业,分工更明确,也基本是比较大的公司,小公司因为人数少,很难有这样的技术储备,很难搞定。
这种产品非常复杂,我就拿我之前从事过的智能电视行业举例吧。
xx公司(某芯片原厂)拿到arm cpu架构的授权之后,开始设计针对智能电视行业专用的SoC,譬如将音视频编解码硬件模块集成到SoC内部,将自家wifi芯片集成到SoC内部。图纸设计好之后,会首先在一台芯片模拟器上预演,也就是看看芯片设计是否有问题。怎么预演呢?这就是软件团队的工作了。软件团队有bootloader团队(uboot团队),linux内核团队,Linux驱动团队,Android团队。
boot loader团队开始移植uboot到芯片模拟器上,先把bootloader跑起来;紧接着再是linux内核团队负责把Linux跑起来,驱动团队一般也负责uboot的驱动,驱动都整好后,再是Android,一步一步得把整个系统跑起来,如果没什么大问题,就把图纸给台积电,让他们代工生产。等拿到芯片后,再在真实的芯片上把上面的步骤重新做一遍。
需要依次学习以下知识:
[1] C语言
[2] cortex-A8架构的处理器,譬如三星的s5pv210,对应的开发板厂商有:深圳九鼎或友善之臂等。对于软件工程师来说,SoC是单核的,还是多核的都不重要,对软件开发并没有什么本质区别。并且s5pv210的资料众多,更好学习。把它学会,基本可以无缝对接其他多核处理器。
[3] uboot,知道怎么用uboot的命令,知道怎么移植,如果想深入,研究一部分源码也是可以的。
[4] linux应用,主要学习linux的系统api,知道怎么调用,什么场合下使用什么。
[5] linux驱动,驱动往往是最难的,但也仅仅是一开始,知道套路后也不过如此。
还有一类工作是和Android相关的,做整个Android系统,注意,不是Android app开发,主要是Android framework开发。Android app调用Android提供的api,而这些api本身调用了linux驱动,linux驱动再通过写寄存器来操作硬件。
因为只有芯片原厂才真正最熟悉这块SoC(因为是他们自己设计的),设计这个东西的人比任何人都了解这个东西怎么使用。
所以,SoC原厂把芯片、智能电视的主板以及配套的系统软件都弄好,基本上,一开机就能正常看电视了。把这三者再卖给做产品的公司,譬如海信电视,譬如小米电视,譬如TCL电视,TCL拿到原厂给的这三个东西之后,如果需要修改,譬如重新定义电视按键的功能,可以TCL自己修改,也可以喊原厂帮忙修改。这里就涉及到了三种工作岗位了。
SoC原厂自己的linux驱动或系统工程师,SoC原厂和TCL产品公司之间的对接,需要SoC原厂的FAE和TCL公司的FAE参与,如果FAE解决不了,再喊SoC原厂的linux驱动工程师帮忙。TCL也有自己的linux驱动工程师,不过他们肯定没有原厂的驱动工程师那么了解这个芯片,所以绝大部分需要原厂的驱动工程师配合。
公司里面有几个专有名词:
(1)FAE:现场工程师。譬如产品有问题,原厂就要配自己公司的FAE去客户那里出差,解决问题,所以FAE是需要经常出差的。并且出差一般是常驻,我之前有同事在青岛海尔电视驻扎了半年,出差补贴还挺高,所以我们当时非常羡慕。如果出差解决不了问题,原厂就会让公司研发人员协助。
但如果是应届生一出来直接去做FAE,离职率也比较高,相对来说FAE侧重的是整体,对项目和产品的总体都比较了解,有点类似于小公司的产品经理,这对于就想做技术的年轻人来说,可能学不到具体的技术,所以离职率也比较高。
最好是做了几年技术之后,再去大公司做FAE,这样心里比较有底。女生做FAE的还挺多的,毕竟不用写代码,还是挺不错的。
(2)PM:项目管理/项目经理。负责协调资源以及和客户对接。
(3)RD:研发工程师。需要写代码的,需要画原理图的。需要有钻研精神,一般负责搭平台,将基础代码跑通,男生偏多。软件的话,一般是用c语言开发。
(4)AE:业务工程师。RD把整个系统跑起来之后,接下来就是AE根据客户的要求来编写产品具体的业务逻辑了。可以理解为就是做项目的,譬如做智能音箱,至于智能音箱跑的linux系统,他们可以不同管,他们只要在linux系统的基础上开发智能音箱产品本身的业务逻辑。一般是用C++开发。
做驱动最好是去SoC原厂,因为那是比较有技术含量的;但原厂不多,所以绝大部分Linux驱动的工作都是在产品公司。有些产品,譬如车机系统,往往买到原厂的芯片之后,只要Android系统或linux系统能够跑起来就行了,剩下的绝大部分车机系统本身的软件开发都是产品公司自己完成,这种公司可能配了一到两个驱动工程师,剩下的都是linux应用工程师。
linux应用这种工作岗位非常多。
工作岗位有:
Linux驱动工程师
Linux应用工程师
以上两种都是产品公司。
寒武纪和联发科都是SoC原厂,上面的是原厂的驱动工作。
在原厂做linux驱动工程师,主要是在做什么呢?
主要有四种工作内容:
(1)解决产品的bug。当然这个bug必须是和你维护的模块有关。譬如你在维护gpio按键模块,如果产品的测试人员,也就是QA,发现按键不管用了,怎么按都没反应,经过一套bug管理系统之后,这个bug就会被领导分给你,然后你只需要解决它就行了。这类工作不多,因为驱动往往很稳定,基本不会有什么bug。
(2)解决客户定制化的需求。譬如TCL有一个新需求,需要按连续按两下电视按键之后,电视机进入home界面,刚好你在维护按键模块,所以你需要写代码实现它。这类工作内容也不会非常多。
(3)由于芯片迭代,导致你维护的模块的寄存器发生了变化,这是你也需要修改代码,让这个驱动能在新的芯片上继续使用。这类工作很多,基本一个月就会迭代一次芯片,当然还包括客户一些定制化的芯片。
(4)linux系统迭代,譬如linux系统从4.9升级到5.0,如果你负责的模块刚好调用了内核的接口,譬如申请中断,申请gpio,如果这些接口刚好发生了变化,那么你也需要修改驱动代码。这类工作一般两年一次。
在原厂做linux驱动比较稳定和轻松,工作基本是双休且福利很好。
还有一些比较专的行业。譬如音视频编解码行业。一般需要学习c++和qt,然后在学习ffmpeg,opencv。
(3)针对军工领域的cortex-R架构,这种架构的cpu我也没接触过,不好妄自下笔。
3.专业术语的含义
cortex-M、cortex-A、cortex-R这些是arn公司设计的cpu内核,是最核心的东西。arm7是arm以前设计的架构,现在已经不再维护。armV7、armV8是指cpu指令集。cortex-A8采用就是arm-V7的指令集(可以理解为汇编语句)。
4,总结,嵌入式进阶路线,仅供参考
嵌入式是一个领域,不是一个行业。行业不同,具体的嵌入式知识是不一样的,但基础都是一样的。
(1)大学阶段和工作一年,如果从大二开始学习嵌入式,这里一共有4年时间,这段时间把嵌入式的基础知识好好学完,stm32,rtos,模拟电路,电路设计,arm裸机,uboot,Linux应用,linux驱动。
(2)工作后的两年左右的时间,学习行业知识:找到一个自己感兴趣的行业,因为每个行业对应的行业知识是不一样的。譬如无人机行业,需要学习直流无刷电机控制,飞控算法。譬如音视频行业,如果是做底层,linux摄像头驱动,编解码模块(但这一般只有在原厂才能真正接触);如果是做应用,就是ffmpeg,opencv这些。
每个行业所需的行业知识都是不一样的,
(3)花一到两年学习行业标准以及摸清楚你做的产品需要哪些认证。
每个产品,都不是随便就能拿到市场上去卖的,必须有相关认证。把认证,供应商上下游摸清。
如果还在学校,有很多时间,学习嵌入式就不要再纠结要不要学硬件,要不是学linux,还是只做stm32这种问题了,把你的职业生涯拉长,你会发现,学的东西越多,学东西也就越快,等后面发现自己感兴趣的行业时,在侧重去学习该行业的专业知识。
如果是转行或再次择业,嵌入式工资一般,相对于互联网行业,工资还是比较低的,并且学习内容非常多,如果没人告诉你要怎么学,要学什么,很容易陷进去而出不来,要慎重。但一旦进入该行业,由于门槛比较高,可以很好的保护你的职业生涯,并且硬件这方面的工作,从事时间越久越有价值。
所有嵌入式行业,基础知识永远都是c语言、arm的处理器以及模拟电路,其他的就要看具体所在的行业了。
这个时候你已经毕业3到4年了,加上学校的那几年,估计已经在嵌入式领域折腾七八年了,你已经是大神了。
转载:https://blog.csdn.net/qq_29083043/article/details/115918947