当前位置:主页 > 查看内容

1.嵌入式学习路线和方法

发布时间:2021-09-12 00:00| 位朋友查看

简介:嵌入式工程师成长之路 系列文章 总目录 系列文章总目录 希望本是无所谓有无所谓无的这正如脚下的路其实地上本没有路走的人多了也便成了路 原创不易文章会持续更新欢迎微信扫码关注公众号 承接 小程序 / 嵌入式 / PC端 项目开发欢迎添加笔者微信18166056253 1……
嵌入式工程师成长之路 系列文章 总目录
系列文章总目录
希望本是无所谓有,无所谓无的,这正如脚下的路,其实地上本没有路,走的人多了,也便成了路
原创不易,文章会持续更新,欢迎微信扫码关注公众号
承接 小程序 / 嵌入式 / PC端项目开发,欢迎添加笔者微信18166056253

在这里插入图片描述

1.嵌入式领域

嵌入式是用来做产品或做控制系统的一类技术的总称。把嵌入式看成一个行业我觉得是不对的,你可以说智能电视是一个行业,无人机是一个行业,他们都使用了嵌入式技术。

整个领域如下图所示:
在这里插入图片描述

英国有一家芯片设计公司,名字叫arm。arm这家公司很特别,它只设计芯片,不生产芯片。我们把arm设计输出的东西叫芯片内核。它是整个领域最上游的公司

把嵌入式领域比作房地产建筑行业。
(1)arm公司就是建筑设计师,并且这些设计师能力非常强。他们只设计图纸。

(2)ic设计公司就是房地产公司,房地产公司也有自己的设计师。但这些设计师是把arm公司设计的图纸买过来,进行二次开发。并且针对自己的房地产项目的侧重点,对图纸进行不同的修改。

譬如,如果是刚需项目,那就把房屋面积整体改小,改到100平左右;如果是酒店房地产项目,那就把房间改大;如果是别墅房地产项目,那就把楼层高度加高。

也就是ic公司把arm公司设计的芯片设计图纸买来之后,针对自己所定位的行业来设计适合该行业的芯片。我们也把这类公司称为SoC芯片原厂

譬如意法半导体,他们拿到arm公司的图纸之后,针对微控制领域的特点,设计出了非常受欢迎的stm32芯片。譬如华为海思半导体,他们拿到arm公司的图纸之后,针对路由器等通信领域,设计出对应的芯片。

这些公司也仅仅是对图纸进行二次开发,这些公司输出的东西还是图纸。因为他们自身没有把图纸变为芯片的能力。华为找到台湾的台积电晶圆代工厂,让他们帮忙根据海思设计的图纸把芯片加工出来。

就好比建筑设计师没有建房子的能力,他们把建筑图纸设计出来之后,需要找专门的施工队,让他们按照建筑图纸来施工建房子。

(3)产品公司就非常多了。
譬如无人机公司,很多四旋翼无人机公司使用意法半导体的stm32来做无人机的主控。譬如oppo手机用高通的芯片来做手机。譬如小米公司用amlogic的芯片来做智能电视。

(4)方案公司
有公司就是自己做无人机,自己研发,自己找代工厂生产,打上自己公司的logo对外销售。这类就是产品公司,但如果产品公司不想自己研发,譬如人手不够,知识储备不够,那这些产品公司就会去找方案公司,俗称外包公司,帮忙研发产品,产品研发好之后,再贴产品公司的logo。

有些大的工业设计公司也会承包产品方案的设计,工业设计的首要工作是帮客户设计产品结构;如果该设计公司有供应链和开模方面的经验,有些创业公司也会把所有东西都包给设计公司,这里的设计公司其实也担任了一个方案公司的角色。

2.cpu架构和择业

arm针对目前的市场,设计了三种不同的架构。
(1)针对于微控制器领域,设计出了cortex-M架构,譬如意法半导体拿到这个cpu架构图纸,在此基础上设计出了stm32;飞思卡尔也拿到这个cpu架构图纸,在此基础上设计出了k60。基于这种架构设计出来的cpu主要是对标以前的51单片机,也俗称MCU,微控制器。

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架构的授权之后,开始设计针对智能电视行业专用的SoC,譬如将音视频编解码硬件模块集成到SoC内部,将自家wifi芯片集成到SoC内部。图纸设计好之后,会首先在一台芯片模拟器上预演,也就是看看芯片设计是否有问题。怎么预演呢?这就是软件团队的工作了。软件团队有bootloader团队(uboot团队),linux内核团队,Linux驱动团队,Android团队。

bootloader团队会首先把移植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年了,加上学校的那几年,估计已经在嵌入式领域折腾七八年了,你已经是大神了。

在这里插入图片描述
文章也会第一时间发布在微信公众号,希望能给个支持扫码关注,从0到1开始学习嵌入式,也祝各位前程似锦。

;原文链接:https://blog.csdn.net/qq_29083043/article/details/115918947
本站部分内容转载于网络,版权归原作者所有,转载之目的在于传播更多优秀技术内容,如有侵权请联系QQ/微信:153890879删除,谢谢!
上一篇:【Codeforces Round #716 (Div. 2) 】Codeforces-1514 下一篇:没有了

推荐图文


随机推荐