单片机开发工程师简历

进入嵌入式行业,舍不得来(转)

我觉得2007年海通的分析(好像)不错:

“海通教育总经理曲刚先生表示,市场需要的嵌入式人才必须具备C语言编程经验、嵌入式操作系统(主要包括嵌入式Linux、WinCE或Symbian)经验、内核裁剪经验和驱动开发经验,如高级嵌入式软件开发工程师。相关岗位要求为:具备丰富的嵌入式多任务软件系统分析设计能力,能够独立完成项目系统解决方案,解决系统故障和问题,精通C语言应用开发,具有良好的编程习惯和风格,良好的文档技能和习惯,熟悉项目管理流程。曲老师还指出,良好的英语阅读能力和较强的学习能力是从事该领域工作的基础,而精通嵌入式操作系统(掌握嵌入式Linux、WinCE、Symbian)会让求职者更有价值。

目前这方面的人国内外都很稀缺。一方面,非专业的IT人员很难切入这个领域,因为这个领域的进入门槛很高,不仅要了解底层的软件(如操作系统级、驱动程序级软件),还要对软件的专业水平有更高的要求(嵌入式系统在软件设计上要求更高的时空效率),还要了解硬件的工作原理。另一方面,由于这一领域相对较新,目前发展太快,许多软硬件技术(如ARM处理器、嵌入式操作系统、MPEG技术、无线通信协议等。)已经很久没有出现了,所以很难找到能掌握这些新技术的人。

嵌入式人才稀缺,价值自然高。现在很多公司都把硬件设计包给了专门的硬件公司,稍微复杂一点的硬件都给了台湾省或者国外的公司设计;至于软件,大量的嵌入式公司自己开发。比如对于日本公司来说,由于国内人力成本高,很多日本嵌入式软件开发公司将项目外包给国内的公司,越来越多的国内公司从事嵌入式软件开发。近年来,我国对嵌入式软件人才的需求成倍增长,仅北京市场对嵌入式软件开发人员的需求就超过了5万人,而且还在不断增长。

嵌入式人才的工作环境和发展前景也有优势。曲老师告诉记者:“嵌入式工作有两个好处:一是工作强度比较低。对于开发企业应用软件的IT企业来说,这个用户的系统完成了,还得是下一个用户的,而且每个用户的需求和完成时间都不一样,所以开发人员往往是疲惫和重复的;制造嵌入式系统的公司有自己的产品计划,按照自己的节奏行事。他们开发的产品通常是通用的,不会因为客户不同而修改。一个产品型号开发出来后,往往会有很长一段自由充电和休息的时间。第二,职业发展比较顺利。从事企业应用软件的人,工作范围广,项目变化大。日常积累难以产生质变,容易出现职业瓶颈。那些搞嵌入式软件的,都是涉及那些专业技术的,时间长了会越来越有经验。”

以上都是针对求职的。对于个人整体发展来说,如果你想创业,想做自己的产品,那么嵌入式软件是个不错的想法。嵌入式软件不会像应用软件那么容易被盗版,开发专利产品一年要花十几万。

你要有专业基础才能入行,那么应该如何快速成长为嵌入式人才呢?曲老师指出,嵌入式系统领域门槛高,并不适合所有人。嵌入式开发人员不仅要懂底层软件,对软件的专业水平也有更高的要求。进入嵌入式系统开发领域,他们首先要有一定的C语言基础,然后尝试参加一些相关的培训课程,之后才能找到项目实践的机会,增加项目经验。"

还有网友的宝贵意见:

“第二,嵌入式系统的层次化和专业化分类。

嵌入式系统分为四层:硬件层、驱动层、操作系统层和应用层。

1,硬件层,是整个嵌入式系统的基础。如果现在对微控制器和接口比较熟悉,可以用C和汇编语言编程,那么从嵌入式系统的硬件层走起来相对容易,硬件层也是驱动层的基础。一个优秀的驱动工程师应该能够自己理解硬件电路图并完成CPLD的逻辑设计,同时对操作系统内核及其调度也相当熟悉。但硬件平台是基础,增值靠软件。

硬件层比较适合电子、通信、自动化、机电一体化、信息工程专业的人。需要掌握的基础专业知识是单片机原理与接口技术,微型计算机原理与接口技术,C语言。

2、驱动层,这部分比较难,驱动工程师不仅要能看懂电路图还要对操作系统内核非常精通,这样在系统调用的时候,他写的驱动不会独占操作系统时间片,反而导致其他任务不能动,不懂操作系统内核架构和实时调度,没有好的驱动编写风格。很多人可以像大多数书里提到的那样,通过添加驱动程序来实现。但可能连一个初级驱动工程师的水平都达不到,所以这样写出来的驱动就好比我们在windows下运行完一个程序后打开它的时候,要么中断前面的程序,要么等一会儿再运行后面打开的程序。想成为一名优秀的司机,没有三四年的基本功,不学习操作系统内核的最后几个部分是不容易成功的,但是你的工资是嵌入式系统四层中最高的。

驱动层比较适合电子、通信、自动化、机电一体化、信息工程专业的人,尤其是计算机偏架构。除了硬件层所具备的基础学科外,还应该非常精通数据结构和算法、操作系统原理和编译原理。

3、操作系统层,对于目前的操作系统层来说,可能只能说是简单的移植,很少有人是从编写的操作系统中来的,或者说是没有手脚的编写操作系统。这项工作大部分是由驾驶工程师完成的。操作系统负责调试系统任务,管理磁盘和文件,嵌入式系统的实时性非常重要。据说,XP操作系统花了微软300个人两年的时间才完成,而总工作量是600人年。中科院软件所的操作系统,估计要几百年才能出来。所以这部分工作相对来说意义不大。

4.应用层相对容易。如果能调用windows下的编程接口函数,只会改变操作系统下的编译开发环境。如果Jave参与编程也是如此。嵌入式系统中涉及算法的都是由专业的算法人来处理,并不一定要归入嵌入式系统的范畴。但如果涉及到嵌入式系统下的嵌入式数据库、基于嵌入式系统的网络编程以及基于某个应用层(如SIP、H.323、Astrisk)的协议应用开发,就比较复杂和困难。

第三,目标和定位。

先有目标,再定位。

学习ARM,从硬件角度来说,一方面是学习接口电路设计,另一方面是学习C语言的汇编和板级编程。从软件角度来说,需要学习基于ARM处理器的操作系统层面的驱动和移植。这些对于初学者来说一定是很清楚的,无论是从硬件上,还是从操作系统对应用的熟悉程度上,但是不管你学的是什么,只要不是操作系统级别以上的纯API的应用编程,硬件寄存器应该是可以理解的,板级汇编和C编程应该是可以理解的。所以对于嵌入式系统的硬件层和驱动,ARM的接口电路设计,ARM的C语言和汇编语言的编程调试环境还是需要掌握的。

所以对于新手来说,要把握好方向,自己的目标是什么,想去什么层次。然后,我们将开始学习ARM相关嵌入式系统的两个实用层面:硬件层和驱动层。无论我们学好哪一门,都会很有前途。

如果要从嵌入式系统的应用层面去走,可能离ARM等系统还很远。应该重点关注嵌入式操作系统的环境应用和相应的开发工具链,比如WinCe操作系统下的EVC应用开发(类似于windows下的VC)。要想有所突破,要依靠一些音视频协议,比如VOIP领域基于SIP或H.323协议的应用层开发,或者基于嵌入式网络数据库的开发等。

对于新手来说,要量力而行,不要因为司机层工资高就以此为方向。要结合自己的特点。在那个级别,有嵌入式系统四个级别的专家,当然专家也有高薪。我在硬件层工作。以前个人所得税从我一个月工资里扣了近三千块。当然,我一方面扮演了工程师的角色,另一方面也扮演了主管和角色。我一个人干了两个职位。可能跟我PK硬件的人很少,让我拿那么多工资。

第四,开发系统选择。

很多ARM初学者都希望有一个自己能用的系统,但是生活中会有一个误区,认为处理器版本越高,性能越高越好,就像很多人觉得ARM9和ARM7好一样。我觉得新手在这方面还是要理性一点。开发系统的选择最终还是要看自己的嵌入式系统方向,是做驱动开发还是做应用,还是做嵌入式系统的硬件层设计和板级测试。如果要从操作系统层面或者应用层面去做,无论是驱动还是应用,当然处理器的性能越高越好,但是这个东西是很难自己学会的,不是几个月或者半年两年就能做好的。

从某种意义上说,拜托,ARM7和9的区别就在于在一些功能指令集上更丰富,主频更高,比如286和386。对于用户来说,可能并没有发现什么,只是觉得速度有点快。

ARM7更适合想从硬件层面走的人,因为ARM7系列处理器的MMU很少,很容易控制。比如S3C44B0可以轻松关闭缓存,内部接口寄存器也很好理解。各种接口可以由硬件程序或AXD单步命令行指令控制。基于51单片机的思想,很容易理解他,把他当成32位单片机,从而消除了很多51工程师想成为嵌入式系统硬件ARM开发工程师的困惑,这样就不会被业内一个不真正懂嵌入式系统的烂公司带到操作系统层面,让他们望而却步,让行业更加缺乏这方面的人才。

嵌入式系统在硬件设计和软件驱动上都非常注重接口。选择平台还取决于处理器的外部资源。接触外部资源越多,越熟悉,未来就业成功的几率就越高。这就是招聘中提到的“相关技能”,因为一个人不可能在短短几年内接触到所有的加工商。雇主使用的处理器对我们来说可能是全新的。就拿台湾省几十家小公司生产的ARM处理器来说(市场价几千万),也是非常好用的。但是这些处理器并不通用,所以使用这些处理器的公司只能招聘有相关工作经验的人。什么是相关工作经验?硬件方面讲的是外设接口设计,软件方面讲的是操作系统中相关的接口驱动和应用开发经验。我做生意已经将近十年了。2000年ARM出现的时候,我一天就开始做ARM7,然后直接上了Xscale(这个板在ARM10-11之间)。我做了五年,招了几百多人面试。这些方面我还是深有体会的。

个人觉得三星的S3C44b0比较适合新手。为什么这么说?因为接口资源丰富,技术成熟,资料多,应该很适合初学者。如果有问题,可能很容易找人帮忙解决。因为大部分人都比较熟悉,就像51单片机一样,有N多位专家可以帮你,相关问题可以很快得到解答。不过业内认为这胳膊烂了,但对于新手来说,是好事。

所以开发系统的选择取决于自身未来的发展方向、开发板接口资源以及行业的普适性。

动词 (verb的缩写)如何看待培训?

首先说一下我自己。本人从业近十年,从国内嵌入式系统行业起步,一直走在嵌入式系统行业的最前沿。我设计过很多高端嵌入式系统平台产品,为很多公司提供过解决方案。离职前为从事VOIP的美国公司设计IP-PBX,做过项目经理、项目总监、技术总监、部门经理,积累了很多人脉,积累了多年的经验。考虑到学生就业和公司招聘不匹配,公司招不到人,学生和刚毕业的工程师不好找工作,所以我们成立了智天星科技有限公司,开展嵌入式系统的教育培训。

因为一线科研人员接触不到一线老师,国内缺乏嵌入式人才,国外大学的技术领先于行业公司,而国内的情况是行业公司的嵌入式系统技术遥遥领先于大学。为了搭建行业与高校之间的桥梁,为大学生带来先进技能,为学生打造就业竞争的王牌,为行业工程师实现自我创造的机会,我辞去了在外企年薪20多万的职位,接受嵌入式系统培训。

对于培训来说,就是花钱买时间。很多工程师喜欢自学,认为培训不值得。这也是可能的。纯粹为了赚钱的训练当然不会太值钱,但是对于力量型训练,他们可能会损失很多。不知道他们有没有算过这笔账。如果一周的培训能给他们带来两年自学就能掌握的知识,那么培训后他们会花三个月到半年的时间消化培训内容。他至少会省下一年半的时间去学习其他的东西或者重新到另一个高度工作,那么最迟两年后他会拿到与他级别相对应的工资,也就是工资与级别的关系比同组人缩短一年,每月至少1000元,扣除培训费用后至少多1000元,同时他会省下一年,不管是不是休闲,继续提高

另一方面,新人的培训相当于提前给自己买了失业保险,有师傅领着他们入道。今年暑假我们班最小的学生是大二,他今年才大三。他这学期刚学了单片机,但是现在在ARM的编程工作已经很丰富多彩了。毕业一年多会失业吗?

再者,通过培训,你可以知道很多业内普通人不知道的东西,同时也给自己找了一个高手。举个例子,两个工程师分别用S3C2410和PXA255做手持设备,两个人都干了四年,然后出去找工作,两个人的工资差别可能最多是两倍。为什么?这是行业不为一般人所知的规律。2410是民用产品,已经被业界用坏了。做产品的成本特别敏感,当然对人才成本也很敏感。PXA255是英特尔的东西。一个255的CPU可以买三个2410,一直被业界定义为贵族产品。用的公司都是大公司或者为军队服务的公司,不在乎成本。

我觉得给自己找了一个好老师是真的,因为同级别的工程师之间存在潜在的竞争关系,很多人不愿意把自己知道的东西教给别人,这就意味着他会失业,也就是所谓的教会学徒会饿死,但对我们来说,不存在这种关系。我在嵌入式系统平台的设计上已经到了一定的程序,在这个国产技术上我很难突破自己。所以很多东西都是对大家开放的,比如下面界面设计中提到的关于顺序界面的部分。不说的话,我就是高级硬件工程师,我想几乎只有10%的人能知道。

6.成为高级嵌入式系统硬件工程师的技巧。

首先声明,我是做嵌入式系统平台层面的设计,在硬件方向比较有发言权。如果是其他方面需要的基本功,我还得和我们培训中心的其他专业讲师交流或者去网站上看看* * *。我只能说我对他们有所了解,但不是太多。你也可以问我一些基本的问题。

至于硬件,有几个方向。简单信号分为数字信号和模拟信号。模拟很难做,通常需要很长时间的经验积累。单一的电阻或电容不够精确,可能会使信号偏差很大。所以,年轻人做的少。随着技术的发展,出现了数字模拟电路,比如手机的Modem射频模块,都采用了成熟的成套芯片。当时全球只有两家公司有这项技术,觉得自己模拟功能不强的人不适合做这个。如果他们真的能拿到手机的射频模块,只要达到一般水平,他们的月薪可能在15K以上。

另一个是数字部分,大体方向可分为51/ARM单片机、dsp和FPGA。国内FPGA工程师大多在ic设计公司从事IP核的前端验证,前途并不明朗。就算是一个IC前端验证工程师,也要好几年才能胜任。dsp的硬件接口比较定型,如果不靠近驱动或者算法,前途不会太大。而ARM单片机的内容更多,在行业内占据了大量的产品,应用范围也很广,所以就业空间很大,而接口设计是硬件设计的最大体现,是高级硬件工程师互相PK,判断水平的依据。界面设计最重要的是时序,而不是简单的连接。比如PXA255处理器的I2C速度需要100Kbps。如果一个I2C外围设备连接到它,设计将不可避免地失败。这样的情况很多。比如51单片机可以在总线上连接LCD,但是为什么这个LCD不能挂在ARM总线上,一个带Winband的SD卡控制器可以连接到ARM7总线上,但是为什么这个控制器不能连接到ARM9或者Xscale处理器上?这些都是问题。所以接口不是简单的连接,要看时机和参数。一个优秀的硬件工程师,应该能够在没有参考方案的情况下,设计出性价比更好的产品。根据现有方案,也需要进行适当可行的削减,但不是随机的。我遇到过一个工程师,在方案里把DC芯片从5V换成1.8V,直接换成LDO,有时候会烧好几个CPU。前几天有人想让我帮他们优化之前基于PXA255平台的手持GPS设备。我问了一下情况,地图存储在SD卡里,SD卡和PXA255的MMC控制器之间的SPI接口导致地图读取速度非常慢。这种情况是设计的严重缺陷,不是程序问题,所以我提了几点建议让他们更新再试。所以,想要成为一名优秀的工程师,需要把握系统的完整性,了解现有的电路。换句话说,给你一套电路图,你能看懂多少?如果80%以上不懂,说明你远不是一个优秀的工程师。其次是电路的调试能力和图纸核对能力,但最基础的能力还是原理图设计、PCB图和逻辑设计。这是指硬件设计工程师。从上面的硬件设计工程师中,我们还可以划分出ECAD工程师,也就是专业的PCB制图工程师和EMC设计工程师,帮助人们解决EMC问题。硬件工程师是板级测试工程师,也就是有很好C语言知识的硬件工程师。在电路板调试的过程中,他可以通过自己编写的测试程序来验证硬件功能。然后交给基于操作系统级别的驱动开发者。

总之,硬件的内容很杂。如果你练习它,你会成为一个大师。我经常给人做方案评估。很多高级硬件工程师设计的东西,我经常否定。所以工程师这样做会得罪一些人,但是硬件有很多不为人知的地方,让很多资深硬件工程师很不解。

那么高级硬件工程师的技术技能必须具备那些东西。首先他们要掌握EDA设计的辅助工具,比如Protel \ OrCAD \ Powperpb \ map lux 2 \ ISE、VDHL语言,还要会用这些工具画绘图板进行逻辑设计,然后就是界面设计和图纸审核的能力,然后就是调试的能力。如果他们能去做总体方案设计,基本就能成为高级工程师。

硬件靠经验和积累。十年磨一剑,百年磨一针。"