蒹霞苍苍白露为霜
分类: 嵌入式
2015-05-14 15:00:59
嵌入式职业规划
在职工作已近两年了,接触了很多产品、很多技术与很多领域,生活中的一些事情也让我有所反思,于是我在戒除LOL游戏之后,决定多花点时间在这个领域给自己做一次规划。
作者:乐百事
始于:--2013.4.10
在决定写这份沉长的规划之前,我特意浏览了一些前辈对这个行业的比较透彻的分析,并从中借鉴以丰富内容,下面开始我的开场白吧!
我们大家都不是含着金钥匙出生的富二代,因此,我们的一切成就需要自己的努力,这里面有痛苦,有彷徨,有挫折,我们是否能够咬牙坚持下去?
选择嵌入式行业之前,希望理性对待,IT业已经不是曾经的泡沫经济时代了,如果你不是那块料,那么在你还没有进入这行之前,请三思,因为竞争对手各个都身怀绝技。如果你已经选择了嵌入式这个行业,那么你必需玩命的学习!
好了,很显然我已经决定这一行了,那么就让我来分析一下嵌入式,然后再做一个合理的职业规划。
对于一个公司来说,拳头部门是他的产品与研发部门,这两个支撑着整个公司的核心,没有产品没有平台谈其他的都没有任何意义。至于收益部门,肯定是销售和市场这两个部门,不管在哪个公司,只要你有成熟的产品,这两个部门的精英们就会想尽一切办法将其变为收益;再次是售前售后支持部门,一个好的产品并不是卖出去就算成功了,更重要的是客户的良好反馈,百年老店靠的是什么——口碑!
由此可见,在公司之间的市场搏击中,拳头的实力是多么的重要。那么嵌入式究竟是个什么样的行业呢,从事又需要什么样的资质呢?
嵌入式是软硬结合的东西,嵌入式开发又分为两类,这两类各有特点,需要的资质又有不同:
一类是学电子工程、通信工程等偏硬件专业出身的人,主要是搞硬件设计,有时要开发一些与硬件关系最密切的最底层软件,如BootLoader和最初级的硬件驱动程序等,他们的优势是对硬件原理非常清楚,不足是他们更擅长定义各种硬件接口,但对复杂软件系统往往力不从心。
一类是学软件、计算机专业出身的人,主要从事嵌入式操作系统和应用软件的开发。嵌入式设备的增值很大程度上取决于嵌入式软件,这占了嵌入式系统的最主要工作,因为很多公司都知道,嵌入式产品的差异很大程度在软件上,所以都将硬件设计外包给了专门的硬件公司。
个人认为驱动上对软硬件的差别不是很明显,尤其是基于操作系统的嵌入式平台下,所以我认为还有一种选择,就是搞软件的人去了解数字电路,入门简单一些,加之软件的基础可以写出不错的底层硬件驱动程序。这点只是个人见解,比较高端的驱动,涉及时序等内容,还是需要比较深厚的电路知识的。
嵌入式开发已经划分了两大类,再渗透一点的了解下去,又有很多的方向,单从操作系统来说就大有文章。
第一类:传统经典的RTOS,例如Vxworks、pSOS、QNX、Nucleus操作系统,这类操作系统实时性很强(据说可在1ms内响应外部事件请求),并且内核可极微(据说最小可8K),可靠性较高等特点。但Vxworks因价格很高,所以一些小公司或小产品中往往用不起。
第二类:嵌入式Linux操作系统,性能虽然比不上RTOS,不过现在熟悉linux的人越来越多了,加上免费开源的优势,linux操作系统也越做越好了,目前比较受中低端市场的欢迎。
第三类:WindowsCE嵌入式操作系统,Microsoft果然是厉害,WinCE出来只有几年时间,但目前已占据了很大市场份额,特别是在显示仪表等界面要求较高的场合,因为我们长期windows的使用习惯与市场相关开发人员的积累,原来的VC用户很容易上手WinCE操作系统,加上微软强大的技术支持,WinCE的快速开发难度要低于Linux。
说点个人看法,Linux免费开源的好处可想而知,各国政府也在大力推Linux系统,以前在嵌入式平台上Linux是叫的最响但还是WinCE实际用的更多,不过随着时间的推移,人才的培养,Linux开发人员也不断得到积累,嵌入式开发也变得普遍起来。
嵌入式开发仅从系统的不同就又划分了几条选择方向,可见嵌入式开发空缺需要多少种不同的人来填补,嵌入式还不单单能从系统上划分开来,因为没有操作系统,嵌入式依旧是嵌入式,而系统已经不可能跑的起来了,这就是硬件的魅力,软件即是驱动,驱动即是软件。
第一类:ARM,其良好的移植性可以有效的缩短应用程序开发与测试的时间,也降低了研发费用。ARM具有比较强的事务管理功能,可以用来跑界面以及应用程序等,其优势主要体现在控制方面。如果不跑操作系统的话还可以做高性能的单片机来裸跑,不过这也就失去了它界面与应用程序移植方面的优势。
第二类:DSP,主要是用来计算的,比如进行加密解密、调制解调等,优势是强大的数据处理能力和较高的运行速度。
第三类:FPGA,可以毫不夸张的讲,FPGA能完成任何数字器件的功能,上至高性能CPU,下至简单的74电路,都可以用FPGA来实现。使用FPGA来开发数字电路,可以大大缩短设计时间,减少PCB面积,提高系统的可靠性。当电路有少量改动时,更能显示出FPGA的优势,其现场编程能力可以延长产品在市场上的寿命,而这种能力可以用来进行系统升级或除错,通俗的说就是不需要重新制板就能升级硬件电路。
因为我对DSP没有什么研究和见解,在此就不谈了,我从各个方面着重了解ARM和FPGA的优劣,下面做一些详细的分析,并作为职业规划的一个参考吧。
ARM领域抉择之操作系统:主要是上面提到的三大类操作系统,需要花功夫了解内核,了解系统的执行过程等,不同的系统就有不同的驱动开发框架。
ARM领域抉择之软件硬件:软件需要掌握应用层的程序开发,目前C++用的比较普遍,而且要擅长界面开发,不管是QT还是Java,不擅长界面处理的软件开发工程师没有什么竞争优势(这是我个人的一点见解)。再说说硬件,设计电路,绘制电路板,或者系统移植兼驱动开发。这些都属于硬件的范畴,你掌握多少决定了你的价值。
FPGA领域抉择之芯片系列:这种选择主要是来自于芯片供应商,现在的供应商有XILINX、TI、ALTERA公司等,不同厂家的芯片都需要厂家提供的开发软件,例如ALTERA的QuartusII和NIOS(暂时就用过这个,只能举这一个例子了,惭愧中)。FPGA属于硬件范畴,没有软件的用武之地,VHDL和VerilogHDL也属于硬件开发语言,个人觉得上手简单一些,不过开发难度大,门槛要求也比较高,不仅要设计电路,而且要能够绘制不低于四层板的PCB,更要对时序了如指掌,这样才能有上升空间。
两个领域看上去都有鱼与熊掌不可兼得的样子,不过仔细分析一下,FPGA的开发软件无非就是开发工具,软件之间都是有很多共性的,而且上手软件远比上手操作系统要简单容易的多,所以选择FPGA应该在FPGA领域涵盖的面更广一点,直白了说就是,精通了FPGA就能够从事几乎所有有关FPGA的工作。而选择ARM,只能在ARM领域找自己精通的操作系统的工作。
仿佛已经分出胜负了,其实不然,再好的东西如果没有用武之地也是白搭,那么FPGA的用途与局限性又有哪些呢?
最明显的一个不同,ARM有庞大的软件支持,而FPGA偏向于硬件开发,也许有人会说上面不是提到“强大的FPGA可以完成任何数字器件的功能,包括高性能的CPU”么,那么我想说,用FPGA包装的ARM功耗变大了,性能拉下了,成本变高了,什么样的公司会用?也许还会有人问,用FPGA包装成ARM不是多了一个硬件升级的功能了么,这样不就延长了产品在市场上的寿命么,这个想法听上去不错,不过硬件升级也是要投入不少人力成本的,所以暂时很少公司优先考虑它。如果我开公司的话,一定向消费者承诺“保证消费者所使用的设备可以通过技术支持免费升级硬件性能”,(这是题外话,乘天还没黑我也做做梦,呵呵),言归正传,FPGA的自身特点使乐道于软件编程的人望而却步,让一些想做低成本中低端电子产品创业的人也另寻其他。我也承认ARM开发更适合创业,尤其是掌握了驱动和软件之后,因为硬件设计可以外包嘛。
未完待续!