您的位置:首页 > 其它

知乎关于嵌入式若干问题的回复整理(转载)

2014-01-20 16:12 369 查看
Q:自动化专业的本科学生,单片机、PLC、嵌入式,哪个的发展前景更好?A1:嵌入式是一个大概念,可以说单片机的知识是嵌入式的一个子集。软件层次上,可以简单分为驱动,系统,应用这3块。基于的硬件至少包括MCU,DSP,SOC等一般说来,搞过几年单片机的人,对MCU+驱动+简单系统+简单应用熟,但对操作系统和复杂应用不熟。碰到说自己搞嵌入式的人,就鱼龙杂混(仅仅搞过单片机),要详细问才能判断水平。对于学生来说,如果看到招聘的职位,嵌入式可以学习和发展的想象空间大,但是很有可能做的事情和桌面开发差别不大(应用层),见到内行了都不好意思说自己搞嵌入式的;单片机能学到的东西是有保障的,
但想象空间固定些。嵌入式/单片机领域里,学电子,通信,计算机,软件出身的比较扎堆。PLC我自己没有经历过不好说。不过有一个前同事本科学机械出身,一开始是搞PLC。因为感觉PLC门槛不够高,读了电子的研,再工作3年干的都是单片机。现在他正在学嵌入式操作系统,工资现在是2W多一个月。我认为工资和人的靠谱程度成正比,学什么派别属于次要因素。

  A2:PLC应当不至于作为一个发展前景考虑吧,我觉得PLC确实应用很广泛,但是门槛比较低,并且要求熟知所要应用的行业,只可以作为技能之一吧。套用我同事的一句话LC只可糊口,不可养家。

  A3:从易到难

  1. 应用支持,PLC设备调试方向2. 自动化设备相关的应用软件开发或者硬件开发3. 自动化设备相关的算法开发4. 自动化设备相关的系统平台开发

  Q:单片机、ARM、嵌入式开发、Android底层开发有什么关系?

  A1:应邀回答:单片机和android基本没有什么联系,那只是你的一个本科专业课而已;目前比较火的是移动互联网和云,移动互联网里面有app开发(java、C),html5开发(html+css+javascript),语言只是工具,更重要的是创意和坚持,但在你没有足够的行业经验和创意之前,还是先把工具学好;如果换个思维,目前比较火的都是大家看得到的,等你花大量精力学了很多比较火的行业知识和技巧,准备大干一场的时候,下一个潮流又要来了,所以还是踏踏实实先把内功练好(内功就是计算机整体知识架构);很多时候机遇和运气对成功也占很大的成分,,,

  A2:谢邀!我是从51单片机开始学习的,电赛之后因为国项的原因就直接转向ARM-LINUX-嵌入式的学习。从我目前的见识来看:单片机是个系统(比如:51、AVR、PLC...),其中包含了去除了输入输出之外的运算器、控制器、存储器,我们用程序可以非常直观的控制引脚电平的高低。ARM就像@白峰所说的,就是个高级点的单片机,但是它和单片机有个本质的区别,单片机是个系统,而ARM是个微处理器(仅包含了运算器、控制器,并不包含存储器)(类似的有MIPS,PowerPC...),如果我们用的话就需要给其加上存储器。在应用方面,可以当做高级单片机直接使用,但为了高效的管理资源(软硬)以及扩展的方面,通常给其运行操作系统,这样就把所有的硬件包装起来,不是很方面直接控制硬件,这里就有了驱动工程师的事情(为上层操作系统提供统一的接口)!嵌入式广义上来说包含一切和电子有关系的device,目前来看像DSP、FPGA、ARM都是嵌入式的范畴,但是通常我们提到嵌入式,很多和微处理器操作系统打交道!工作方面:有关嵌入式的硬件工程师、驱动工程师、系统工程师、当然还有顶层的应用工程师!对于Android系统,虽其属于Linux,而且我也时常瞎搞,但对其编程方面不甚了解,所以不便谈论!但我想学习Android系统和学习Linux系统基本上一样的,可以先搞一搞Linux,把它玩熟,我想对Android也会很快上手,因为我看过Android中各个目录,发现和Linux基本一致,毕竟Android继承于Linux...

  A3:单片机是ARM的基础,或者说ARM就是复杂一点的单片机。Android的底层是Linux,而Linux开发一般包括驱动开发、内核开发、模块开发、应用开发等,所以Android底层开发可以说等同于Linux开发,只是受到具体硬件的限制。嵌入式开发包括的面很广:硬件、软件等等,其中Linux开发算是嵌入式开发的一部分基础。要学Android底层开发,可以从Linux开发方面入手。如果觉得内容过多,可以研究一下busybox或uboot或uCOS,基本的操作系统原理知识是需要的。只有单片机基础,对于搞Android开发还是不太容易,需要增加硬件驱动方面的经验就业方面:本科毕业的话,可以找一些测试、产品、销售方面的职位,如果想做开发,就得继续读个研究生(大部分本科生不具备良好的嵌入式开发技能)。

  A4:android手机都采用arm架构的cpu,搞移植的时候需要懂点arm汇编。android驱动层HAL和linux嵌入式驱动没什么区别。android底层还是用C写的,应用层使用dex虚拟机运行java程序。

  Q:和从事互联网行业相比,做嵌入式开发有潜力吗?

  A1:这是个很有意思的问题,说两个看法:1. 两者没有可比性。 打个比方,互联网开发像砍大树,嵌入式系统开发像雕豆腐,方法工具技艺都完全不同。 这两个行业做好了都有潜力。2. 两者有联系,但还未融合。嵌入式系统越来越多地具有联网能力,多个嵌入式产品之间通过网络通讯和协调,甚至有些嵌入式产品能直接作为WebSite访问。但是,这两部分的开发到目前为止还是会有不同的团队负责。如果你问这个问题是想择业,建议你考虑一下自己的兴趣和性格:喜欢讨论复杂的架构,喜欢华丽的UI,喜欢研究软件开发最新的方法论,特别喜欢对软件做抽象和封装的,建议去做互联网行业;性格比较细腻,比较喜欢关注细节,喜欢对一件事物的完全掌控感,在一件看得见摸得着的会按照你的意图动作的东西上能得到更多成就感的,建议去做嵌入式开发。

  A2:单纯从开发的角度来说,工作能力都会经历一个从生到熟的过程。如果你是一个新手,可能你会更关注你在两个领域中在不远的未来,比如说三五年之后的发展,或者把“潜力”理解成你的职业规划以及变成熟手之后的工作机会。对互联网领域了解的不是那么深,说说嵌入式领域的工作机会。从事嵌入式开发按普通的水平,从新人做到能独当一面至少需要1到2年的时间。它需要你从完整的项目中获取经验,要了解和学习的东西很多也很杂,换句话说,除非是在一些分工很明确的地方比如说外企,否则一招鲜的情况并不吃香。从资料的完整程度,软件的架构,源码的可读性,网络平台的交流来说,它并不是一个成熟度很高、资源很完备的平台,需要开发人员去积极的探索,并耐心的关注每一个细节以及它们之间的关系。正因为如此,经验便显得很重要,往往在很多公司的研发团队里,成为技术核心都是具有三五年以上嵌入式开发经验的工程师,而团队的负责人也往往都是从无数个项目中锻炼出来的,对全局和局部都把握的很出色的人担当。嵌入式开发对硬件平台具有高依赖性,在目前看来,统一软件开发平台或是工作流程并不现实。对于不同领域的产品需求,需要由不同的硬件方案厂商去支持,而由于产品本身的特点对硬件及软件的要求(如性能、功耗的指标),需要开发人员去选择合适的软件平台,从操作系统到上层的应用程序。因此从计算机技术角度考虑,对开发人员的技术要求更关住计算机组成,操作系统内核,俗称底层开发。从开发语言来说,C和汇编是关键点;从开发环境来说,一般更偏向于轻量级的开发工具。但对于未来的发展,随着越来越多的产品及应用的需求,软件应该会有一个整合的过程,将会有一些更完善的集成开发环境供开发人员使用。A3:我认为绝大部分的嵌入式应用对性能要求的要求远低于对功能的要求,因此未来硬件速度高度发展之后,整合嵌入式软件和传统软件开发流程是完全可能的,例如使用FPGA可以替代很多外设,从而减轻了底层开发的异构性。在摩尔定律的影响下,嵌入式系统也完全可以采用通用架构,底层代码的可重用性将大大增强,嵌入式概念范畴中的“定制”性将不复存在。

  Q:嵌入式学习规划???

  A:一、嵌入式系统的概念着重理解“嵌入”的概念主要从三个方面上来理解。1、从硬件上,将基于CPU的处围器件,整合到CPU芯片内部,比如早期基于X86体系结构下的计算机,CPU只是有运算器和累加器的功能,一切芯片要造外部桥路来扩展实现,象串口之类的都是靠外部的16C550/2的串口控制器芯片实现,而目前的这种串口控制器芯片早已集成到CPU内部,还有PC机有显卡,而多数嵌入式处理器都带有LCD控制器,但其种意义上就相当于显卡。比较高端的ARM类Intel Xscale架构下的IXP网络处理器CPU内部集成PCI控制器(可配成支持4个PCI从设备或配成自身为CPI从设备);还集成3个NPE网络处理器引擎,其中两个对应于两个MAC地址,
可用于网关交换用,而另外一个NPE网络处理器引擎支持DSL,只要外面再加个PHY芯片即可以实现DSL上网功能。IXP系列最高主频可以达到1.8G,支持2G内存,1G×10或10G×1的以太网口或Febre channel的光通道。IXP系列应该是目标基于ARM体系统结构下由intel进行整合后成Xscale内核的最高的处理器了。  2、从软件上讲,就是在定制操作系统内核里将应用一并选入,编译后将内核下载到ROM中。而在定制操作系统内核时所选择的应用程序组 件就是完成了软件的“嵌入”。  3、把软件内核或应用文件系统等东西烧到嵌入式系统硬件平台中的ROM中就实现了一个真正的“嵌入”。  以上的定义是我在6、7年前给嵌入式系统下自话侧重于理解型的定义,书上的定义也有很多,但在这个领域范围内,谁都不敢说自己的定义是十分确切的,包括那些专家学者们,历为毕竟嵌入式系统是计算机范畴下的一门综合性学科二、嵌入式系统的分层与专业的分类。  嵌入式系统分为4层,硬件层、驱动层、操作系统层和应用层。  1、硬件层,是整个嵌入式系统的根本,如果现在单片机及接口这块很熟悉,并且能用C和汇编语言来编程的话,从嵌入式系统的硬件层走起来相对容易,硬件层也是驱动层的基础,一个优秀的驱动工程师是要能够看懂硬件的电路图和自行完成CPLD的逻辑设计的,同时还要对操作系统内核及其调度性相当的熟悉的。但硬件平台是基础,增值还要靠软件。  硬件层比较适合于,电子、通信、自动化、机电一体、信息工程类专业的人来搞,需要掌握的专业基础知识有,单片机原理及接口技术、微机原理及接口技术、C语言。  2、
驱动层,这部分比较难,驱动工程师不仅要能看懂电路图还要能对操作系统内核十分的精通,以便其所写的驱动程序在系统调用时,不会独占操作系统时间片,而导 至其它任务不能动行,不懂操作系统内核架构和实时调度性,没有良好的驱动编写风格,按大多数书上所说添加的驱动的方式,很多人都能做到,但可能连个初级的 驱动工程师的水平都达不到,这样所写的驱动在应用调用时就如同windows下我们打开一个程序运行后,再打开一个程序时,要不就是中断以前的程序,要不 就是等上一会才能运行后来打开的程序。想做个好的驱动人员没有三、四年功底,操作系统内核不研究上几编,不是太容易成功的,但其工资在嵌入式系统四层中可
是最高的。  驱动层比较适合于电子、通信、自动化、机电一体、信息工程类专业尤其是计算机偏体系结构类专业的人来搞,除硬件层所具备的基础学科外,还要对数据结构与算法、操作系统原理、编译原理都要十分精通了解。  3、操作系统层,对于操作系统层目前可能只能说是简单的移植,而很少有人来自已写操作系统,或者写出缺胳膊少腿的操作系统来,这部分工作大都由驱动工程师来完成。操作系统是负责系统任务的调试、磁盘和文件的管理,而嵌入式系统的实时性十分重要。据说,XP操作系统是微软投入300人用两年时间才搞定的,总时工时是600人年,中科院软件所自己的女娲Hopen操作系统估计也得花遇几百人年才能搞定。因此这部分工作相对来讲没有太大意义。  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协议的应用层开发,或是基于嵌入式网络数据库的开发等等。  对
于初学者来讲,要量力而行,不要认为驱动层工资高就把它当成方向了,要结合自身特点,嵌入式系统四个层面上那个层面上来讲都是有高人存在,当然高人也对应 的高工资。 四、开发系统选择。  很多ARM初学者都希望有一套自己能用的系统,但他们住住会产生一种错误认识就是认为处理器版本越高、性能越高越好,就象很多人认为ARM11比ARM9好, 我想对于初学者在此方面以此入门还应该理智,开发系统的选择最终要看自己往嵌入式系统的那个方向上走,是做驱动开发还是应用,还是做嵌入式系统硬件层设计 与板级测试。但这个东西自学,有十分大的困难,不是几个月或半年
或是一年二年能搞定的事。  在某种意义上请,ARM9与11的差别就是在某些功能指令集上丰富了些,主频提高一些而已,就比如286和386。对于用户来讲可能觉查不到什么,只能是感觉速度有些快而已。 五、如何看待培训。  对于培训来讲,是花钱来买时间,很多工程师都喜欢自己学,认为培训不值,这也是有 可能的,纯为赚钱的培训当然不会太有价值,但对于实力型的培训他们可能就亏大了,有这样一笔帐不知他们算过没有,如果一个一周的培训,能带给他们自学两年 后才能掌握的知识,在培训完后他们用三个月到半年时间消化培训内容,这样他会省约至少一年半的时间来学其它的或重新站在另一个高度上工作,那么他将最迟一
年后会拿到他两年后水平所对应的工资,就是在工资与水平对应的关系上比同批人缩短一年,每月按最少1千计,再减去培训费用至少多1.0万,同时也省了一年 时间,不管是休闲也好,再继续提高也好,总之是跑到了队伍的前面了。  另一层面上讲,对于新人的培训相当于他们为自己提前买了份失业保险,有师傅会带领他们入道,我今年暑假时班里最年轻的一个学生是大二的,今年才上大三,这学期才刚学单片机,但现在ARM方面的编程工作已经搞得有声有色了,再过一年多毕业,他还会失业。

  Q:现在学嵌入式开发技术会不会太晚了?前景怎么样?

  A1:我做过一段时间的嵌入式开发,我来说说我的认识。1.学技术不像学艺术,只要坚持,任何时候学都不晚。2.随着设备的智能化、微型化、网络化,嵌入式技术应用非常广泛,手机就是典型的嵌入式设备。嵌入式技术的掌握比其他技术要困难,所以嵌入式工程师的收入比其他工程师要高。3.电子、通信、计算机、自动控制等专业的学生都可以把嵌入式作为自己的发展方向,所以是不是有嵌入式专业无所谓。由于嵌入式开发的门槛相对较高,对学习者的学习能力、动手能力、系统分析和设计能力等要求较高。

  A2:我补充如下:1.认清嵌入式设备的本质嵌入式设备的本质就是一台专用的、微型计算机,所以就像计算机一样由三个层次的东西组成:1)硬件,包括cpu(如Arm)、存储(如flash)、I/O(显示模块、通讯模块、视音频模块、I/O控制电路等)。2)系统级软件,主要是OS和I/O软件如LCD、蓝牙、wifi、CDMA、声音等子系统。3)应用软件,如基于ios的应用开发,基于android的应用开发,基于linux的应用开2.选定学习方向对于学习嵌入式来说,以上三个层次技术都了解一下是有好处的,但每层次都同时深入学习既增加学习难度也无必要,因为一个嵌入式设备肯定是由不同的人分工协作完成的,每个人精通某一层次上的技术就行了。3.创建学习环境如果能加入到老师的项目里,那是比较理想的。还有就是组队参加各种比赛。如果自学,我的体会是:1)对于想学硬件的,从学8位单片机入手,然后再学ARM、DSP、FPGA等比较容易。2)对于想做系统级软件,从研究linux内核开始,可以买块ARM开发板来辅助学习。3)学应用软件开发相对容易一些,网上资料也更丰富,有一个手机或开发板就可学习了

  A3:单纯的所谓的嵌入式其实只要动动手就能知道流程的,外面的所谓的嵌入式培训也就是做这个事情的,更重要的是其中的原理和基础知识(好的培训公司,应该教授整个知识体系,而非某几种语言或工具)。嵌入式从本质上讲是计算机,所以学好计算机的软硬件对嵌入式是很有帮助的。苹果常常提的后pc时代,炒的很火物联网,都是嵌入式技术的应用,可以说嵌入式很是很有前途的,而且在将来,关于pc还是嵌入式设备的区分将会慢慢淡化,window 8不是支持arm了吗,嵌入式的概念会慢慢模糊,但是其本质是不变的。所以在学校的时候注重基础,弄懂基本原理,再自己动手实践下,做一些小项目,参加一些电子大赛,对以后工作是很有帮助的。

  ps:我现在工作做的事情,和我在学校自己玩arm开发板做的事情,差不多。多亏了有学校学习嵌入式的经验,现在工作起来很顺手。Q:自动化专业的本科学生,单片机、PLC、嵌入式,哪个的发展前景更好?A1:嵌入式是一个大概念,可以说单片机的知识是嵌入式的一个子集。软件层次上,可以简单分为驱动,系统,应用这3块。基于的硬件至少包括MCU,DSP,SOC等一般说来,搞过几年单片机的人,对MCU+驱动+简单系统+简单应用熟,但对操作系统和复杂应用不熟。碰到说自己搞嵌入式的人,就鱼龙杂混(仅仅搞过单片机),要详细问才能判断水平。对于学生来说,如果看到招聘的职位,嵌入式可以学习和发展的想象空间大,但是很有可能做的事情和桌面开发差别不大(应用层),见到内行了都不好意思说自己搞嵌入式的;单片机能学到的东西是有保障的,
但想象空间固定些。嵌入式/单片机领域里,学电子,通信,计算机,软件出身的比较扎堆。PLC我自己没有经历过不好说。不过有一个前同事本科学机械出身,一开始是搞PLC。因为感觉PLC门槛不够高,读了电子的研,再工作3年干的都是单片机。现在他正在学嵌入式操作系统,工资现在是2W多一个月。我认为工资和人的靠谱程度成正比,学什么派别属于次要因素。

  A2:PLC应当不至于作为一个发展前景考虑吧,我觉得PLC确实应用很广泛,但是门槛比较低,并且要求熟知所要应用的行业,只可以作为技能之一吧。套用我同事的一句话LC只可糊口,不可养家。

  A3:从易到难

  1. 应用支持,PLC设备调试方向2. 自动化设备相关的应用软件开发或者硬件开发3. 自动化设备相关的算法开发4. 自动化设备相关的系统平台开发

  Q:单片机、ARM、嵌入式开发、Android底层开发有什么关系?

  A1:应邀回答:单片机和android基本没有什么联系,那只是你的一个本科专业课而已;目前比较火的是移动互联网和云,移动互联网里面有app开发(java、C),html5开发(html+css+javascript),语言只是工具,更重要的是创意和坚持,但在你没有足够的行业经验和创意之前,还是先把工具学好;如果换个思维,目前比较火的都是大家看得到的,等你花大量精力学了很多比较火的行业知识和技巧,准备大干一场的时候,下一个潮流又要来了,所以还是踏踏实实先把内功练好(内功就是计算机整体知识架构);很多时候机遇和运气对成功也占很大的成分,,,

  A2:谢邀!我是从51单片机开始学习的,电赛之后因为国项的原因就直接转向ARM-LINUX-嵌入式的学习。从我目前的见识来看:单片机是个系统(比如:51、AVR、PLC...),其中包含了去除了输入输出之外的运算器、控制器、存储器,我们用程序可以非常直观的控制引脚电平的高低。ARM就像@白峰所说的,就是个高级点的单片机,但是它和单片机有个本质的区别,单片机是个系统,而ARM是个微处理器(仅包含了运算器、控制器,并不包含存储器)(类似的有MIPS,PowerPC...),如果我们用的话就需要给其加上存储器。在应用方面,可以当做高级单片机直接使用,但为了高效的管理资源(软硬)以及扩展的方面,通常给其运行操作系统,这样就把所有的硬件包装起来,不是很方面直接控制硬件,这里就有了驱动工程师的事情(为上层操作系统提供统一的接口)!嵌入式广义上来说包含一切和电子有关系的device,目前来看像DSP、FPGA、ARM都是嵌入式的范畴,但是通常我们提到嵌入式,很多和微处理器操作系统打交道!工作方面:有关嵌入式的硬件工程师、驱动工程师、系统工程师、当然还有顶层的应用工程师!对于Android系统,虽其属于Linux,而且我也时常瞎搞,但对其编程方面不甚了解,所以不便谈论!但我想学习Android系统和学习Linux系统基本上一样的,可以先搞一搞Linux,把它玩熟,我想对Android也会很快上手,因为我看过Android中各个目录,发现和Linux基本一致,毕竟Android继承于Linux...

  A3:单片机是ARM的基础,或者说ARM就是复杂一点的单片机。Android的底层是Linux,而Linux开发一般包括驱动开发、内核开发、模块开发、应用开发等,所以Android底层开发可以说等同于Linux开发,只是受到具体硬件的限制。嵌入式开发包括的面很广:硬件、软件等等,其中Linux开发算是嵌入式开发的一部分基础。要学Android底层开发,可以从Linux开发方面入手。如果觉得内容过多,可以研究一下busybox或uboot或uCOS,基本的操作系统原理知识是需要的。只有单片机基础,对于搞Android开发还是不太容易,需要增加硬件驱动方面的经验就业方面:本科毕业的话,可以找一些测试、产品、销售方面的职位,如果想做开发,就得继续读个研究生(大部分本科生不具备良好的嵌入式开发技能)。

  A4:android手机都采用arm架构的cpu,搞移植的时候需要懂点arm汇编。android驱动层HAL和linux嵌入式驱动没什么区别。android底层还是用C写的,应用层使用dex虚拟机运行java程序。

  Q:和从事互联网行业相比,做嵌入式开发有潜力吗?

  A1:这是个很有意思的问题,说两个看法:1. 两者没有可比性。 打个比方,互联网开发像砍大树,嵌入式系统开发像雕豆腐,方法工具技艺都完全不同。 这两个行业做好了都有潜力。2. 两者有联系,但还未融合。嵌入式系统越来越多地具有联网能力,多个嵌入式产品之间通过网络通讯和协调,甚至有些嵌入式产品能直接作为WebSite访问。但是,这两部分的开发到目前为止还是会有不同的团队负责。如果你问这个问题是想择业,建议你考虑一下自己的兴趣和性格:喜欢讨论复杂的架构,喜欢华丽的UI,喜欢研究软件开发最新的方法论,特别喜欢对软件做抽象和封装的,建议去做互联网行业;性格比较细腻,比较喜欢关注细节,喜欢对一件事物的完全掌控感,在一件看得见摸得着的会按照你的意图动作的东西上能得到更多成就感的,建议去做嵌入式开发。

  A2:单纯从开发的角度来说,工作能力都会经历一个从生到熟的过程。如果你是一个新手,可能你会更关注你在两个领域中在不远的未来,比如说三五年之后的发展,或者把“潜力”理解成你的职业规划以及变成熟手之后的工作机会。对互联网领域了解的不是那么深,说说嵌入式领域的工作机会。从事嵌入式开发按普通的水平,从新人做到能独当一面至少需要1到2年的时间。它需要你从完整的项目中获取经验,要了解和学习的东西很多也很杂,换句话说,除非是在一些分工很明确的地方比如说外企,否则一招鲜的情况并不吃香。从资料的完整程度,软件的架构,源码的可读性,网络平台的交流来说,它并不是一个成熟度很高、资源很完备的平台,需要开发人员去积极的探索,并耐心的关注每一个细节以及它们之间的关系。正因为如此,经验便显得很重要,往往在很多公司的研发团队里,成为技术核心都是具有三五年以上嵌入式开发经验的工程师,而团队的负责人也往往都是从无数个项目中锻炼出来的,对全局和局部都把握的很出色的人担当。嵌入式开发对硬件平台具有高依赖性,在目前看来,统一软件开发平台或是工作流程并不现实。对于不同领域的产品需求,需要由不同的硬件方案厂商去支持,而由于产品本身的特点对硬件及软件的要求(如性能、功耗的指标),需要开发人员去选择合适的软件平台,从操作系统到上层的应用程序。因此从计算机技术角度考虑,对开发人员的技术要求更关住计算机组成,操作系统内核,俗称底层开发。从开发语言来说,C和汇编是关键点;从开发环境来说,一般更偏向于轻量级的开发工具。但对于未来的发展,随着越来越多的产品及应用的需求,软件应该会有一个整合的过程,将会有一些更完善的集成开发环境供开发人员使用。A3:我认为绝大部分的嵌入式应用对性能要求的要求远低于对功能的要求,因此未来硬件速度高度发展之后,整合嵌入式软件和传统软件开发流程是完全可能的,例如使用FPGA可以替代很多外设,从而减轻了底层开发的异构性。在摩尔定律的影响下,嵌入式系统也完全可以采用通用架构,底层代码的可重用性将大大增强,嵌入式概念范畴中的“定制”性将不复存在。

  Q:嵌入式学习规划???

  A:一、嵌入式系统的概念着重理解“嵌入”的概念主要从三个方面上来理解。1、从硬件上,将基于CPU的处围器件,整合到CPU芯片内部,比如早期基于X86体系结构下的计算机,CPU只是有运算器和累加器的功能,一切芯片要造外部桥路来扩展实现,象串口之类的都是靠外部的16C550/2的串口控制器芯片实现,而目前的这种串口控制器芯片早已集成到CPU内部,还有PC机有显卡,而多数嵌入式处理器都带有LCD控制器,但其种意义上就相当于显卡。比较高端的ARM类Intel Xscale架构下的IXP网络处理器CPU内部集成PCI控制器(可配成支持4个PCI从设备或配成自身为CPI从设备);还集成3个NPE网络处理器引擎,其中两个对应于两个MAC地址,
可用于网关交换用,而另外一个NPE网络处理器引擎支持DSL,只要外面再加个PHY芯片即可以实现DSL上网功能。IXP系列最高主频可以达到1.8G,支持2G内存,1G×10或10G×1的以太网口或Febre channel的光通道。IXP系列应该是目标基于ARM体系统结构下由intel进行整合后成Xscale内核的最高的处理器了。  2、从软件上讲,就是在定制操作系统内核里将应用一并选入,编译后将内核下载到ROM中。而在定制操作系统内核时所选择的应用程序组 件就是完成了软件的“嵌入”。  3、把软件内核或应用文件系统等东西烧到嵌入式系统硬件平台中的ROM中就实现了一个真正的“嵌入”。  以上的定义是我在6、7年前给嵌入式系统下自话侧重于理解型的定义,书上的定义也有很多,但在这个领域范围内,谁都不敢说自己的定义是十分确切的,包括那些专家学者们,历为毕竟嵌入式系统是计算机范畴下的一门综合性学科二、嵌入式系统的分层与专业的分类。  嵌入式系统分为4层,硬件层、驱动层、操作系统层和应用层。  1、硬件层,是整个嵌入式系统的根本,如果现在单片机及接口这块很熟悉,并且能用C和汇编语言来编程的话,从嵌入式系统的硬件层走起来相对容易,硬件层也是驱动层的基础,一个优秀的驱动工程师是要能够看懂硬件的电路图和自行完成CPLD的逻辑设计的,同时还要对操作系统内核及其调度性相当的熟悉的。但硬件平台是基础,增值还要靠软件。  硬件层比较适合于,电子、通信、自动化、机电一体、信息工程类专业的人来搞,需要掌握的专业基础知识有,单片机原理及接口技术、微机原理及接口技术、C语言。  2、
驱动层,这部分比较难,驱动工程师不仅要能看懂电路图还要能对操作系统内核十分的精通,以便其所写的驱动程序在系统调用时,不会独占操作系统时间片,而导 至其它任务不能动行,不懂操作系统内核架构和实时调度性,没有良好的驱动编写风格,按大多数书上所说添加的驱动的方式,很多人都能做到,但可能连个初级的 驱动工程师的水平都达不到,这样所写的驱动在应用调用时就如同windows下我们打开一个程序运行后,再打开一个程序时,要不就是中断以前的程序,要不 就是等上一会才能运行后来打开的程序。想做个好的驱动人员没有三、四年功底,操作系统内核不研究上几编,不是太容易成功的,但其工资在嵌入式系统四层中可
是最高的。  驱动层比较适合于电子、通信、自动化、机电一体、信息工程类专业尤其是计算机偏体系结构类专业的人来搞,除硬件层所具备的基础学科外,还要对数据结构与算法、操作系统原理、编译原理都要十分精通了解。  3、操作系统层,对于操作系统层目前可能只能说是简单的移植,而很少有人来自已写操作系统,或者写出缺胳膊少腿的操作系统来,这部分工作大都由驱动工程师来完成。操作系统是负责系统任务的调试、磁盘和文件的管理,而嵌入式系统的实时性十分重要。据说,XP操作系统是微软投入300人用两年时间才搞定的,总时工时是600人年,中科院软件所自己的女娲Hopen操作系统估计也得花遇几百人年才能搞定。因此这部分工作相对来讲没有太大意义。  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协议的应用层开发,或是基于嵌入式网络数据库的开发等等。  对
于初学者来讲,要量力而行,不要认为驱动层工资高就把它当成方向了,要结合自身特点,嵌入式系统四个层面上那个层面上来讲都是有高人存在,当然高人也对应 的高工资。 四、开发系统选择。  很多ARM初学者都希望有一套自己能用的系统,但他们住住会产生一种错误认识就是认为处理器版本越高、性能越高越好,就象很多人认为ARM11比ARM9好, 我想对于初学者在此方面以此入门还应该理智,开发系统的选择最终要看自己往嵌入式系统的那个方向上走,是做驱动开发还是应用,还是做嵌入式系统硬件层设计 与板级测试。但这个东西自学,有十分大的困难,不是几个月或半年
或是一年二年能搞定的事。  在某种意义上请,ARM9与11的差别就是在某些功能指令集上丰富了些,主频提高一些而已,就比如286和386。对于用户来讲可能觉查不到什么,只能是感觉速度有些快而已。 五、如何看待培训。  对于培训来讲,是花钱来买时间,很多工程师都喜欢自己学,认为培训不值,这也是有 可能的,纯为赚钱的培训当然不会太有价值,但对于实力型的培训他们可能就亏大了,有这样一笔帐不知他们算过没有,如果一个一周的培训,能带给他们自学两年 后才能掌握的知识,在培训完后他们用三个月到半年时间消化培训内容,这样他会省约至少一年半的时间来学其它的或重新站在另一个高度上工作,那么他将最迟一
年后会拿到他两年后水平所对应的工资,就是在工资与水平对应的关系上比同批人缩短一年,每月按最少1千计,再减去培训费用至少多1.0万,同时也省了一年 时间,不管是休闲也好,再继续提高也好,总之是跑到了队伍的前面了。  另一层面上讲,对于新人的培训相当于他们为自己提前买了份失业保险,有师傅会带领他们入道,我今年暑假时班里最年轻的一个学生是大二的,今年才上大三,这学期才刚学单片机,但现在ARM方面的编程工作已经搞得有声有色了,再过一年多毕业,他还会失业。

  Q:现在学嵌入式开发技术会不会太晚了?前景怎么样?

  A1:我做过一段时间的嵌入式开发,我来说说我的认识。1.学技术不像学艺术,只要坚持,任何时候学都不晚。2.随着设备的智能化、微型化、网络化,嵌入式技术应用非常广泛,手机就是典型的嵌入式设备。嵌入式技术的掌握比其他技术要困难,所以嵌入式工程师的收入比其他工程师要高。3.电子、通信、计算机、自动控制等专业的学生都可以把嵌入式作为自己的发展方向,所以是不是有嵌入式专业无所谓。由于嵌入式开发的门槛相对较高,对学习者的学习能力、动手能力、系统分析和设计能力等要求较高。

  A2:我补充如下:1.认清嵌入式设备的本质嵌入式设备的本质就是一台专用的、微型计算机,所以就像计算机一样由三个层次的东西组成:1)硬件,包括cpu(如Arm)、存储(如flash)、I/O(显示模块、通讯模块、视音频模块、I/O控制电路等)。2)系统级软件,主要是OS和I/O软件如LCD、蓝牙、wifi、CDMA、声音等子系统。3)应用软件,如基于ios的应用开发,基于android的应用开发,基于linux的应用开2.选定学习方向对于学习嵌入式来说,以上三个层次技术都了解一下是有好处的,但每层次都同时深入学习既增加学习难度也无必要,因为一个嵌入式设备肯定是由不同的人分工协作完成的,每个人精通某一层次上的技术就行了。3.创建学习环境如果能加入到老师的项目里,那是比较理想的。还有就是组队参加各种比赛。如果自学,我的体会是:1)对于想学硬件的,从学8位单片机入手,然后再学ARM、DSP、FPGA等比较容易。2)对于想做系统级软件,从研究linux内核开始,可以买块ARM开发板来辅助学习。3)学应用软件开发相对容易一些,网上资料也更丰富,有一个手机或开发板就可学习了

  A3:单纯的所谓的嵌入式其实只要动动手就能知道流程的,外面的所谓的嵌入式培训也就是做这个事情的,更重要的是其中的原理和基础知识(好的培训公司,应该教授整个知识体系,而非某几种语言或工具)。嵌入式从本质上讲是计算机,所以学好计算机的软硬件对嵌入式是很有帮助的。苹果常常提的后pc时代,炒的很火物联网,都是嵌入式技术的应用,可以说嵌入式很是很有前途的,而且在将来,关于pc还是嵌入式设备的区分将会慢慢淡化,window 8不是支持arm了吗,嵌入式的概念会慢慢模糊,但是其本质是不变的。所以在学校的时候注重基础,弄懂基本原理,再自己动手实践下,做一些小项目,参加一些电子大赛,对以后工作是很有帮助的。

  ps:我现在工作做的事情,和我在学校自己玩arm开发板做的事情,差不多。多亏了有学校学习嵌入式的经验,现在工作起来很顺手。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: