进入嵌入式行业,勉强不来(转)
觉得海同07年的分析(好像)不错:
“海同教育总经理曲刚老师表示,市场上需要的嵌入式人才必须具备C语言编程经验、嵌入式操作系统(主要包括嵌入式Linux、WinCE或 Symbian)经验、内核裁剪经验、驱动程序开发经验,比如高级嵌入式软件开发工程师相关职位要求是:有丰富的嵌入式多任务软件系统分析和设计能力,能独立完成项目系统方案,解决系统故障和问题、精通C语言应用开发,有良好的编程习惯和风格、良好的文档编写能力和习惯、熟悉项目管理流程。曲老师还特别指出,良好的英文阅读能力及较强的学习能力是从事这一领域工作的基础,对嵌入式操作系统做到一专而多能(精通嵌入式Linux,掌握WinCE及 Symbian)更会使求职者身价倍增。
目前国内外这方面的人都很稀缺。一方面,是因为这一领域入门门槛较高,不仅要懂较底层软件(例如操作系统级、驱动程序级软件),对软件专业水平要求较高(嵌入式系统对软件设计的时间和空间效率要求较高),而且必须懂得硬件的工作原理,所以非专业 IT人员很难切入这一领域;另一方面,是因为这一领域较新,目前发展太快,很多软硬件技术出现时间不长或正在出现(如ARM处理器、嵌入式操作系统、MPEG技术、无线通信协议等),掌握这些新技术的人当然很难找。
嵌入式人才稀缺,身价自然就高。目前有很多公司将硬件设计包给了专门的硬件公司,稍复杂的硬件都交给台湾或国外公司设计;而对于软件部分,大量的嵌入式公司自己开发,比如对于日本公司来说,由于国内人力成本过高,所以日本很多嵌入式软件开发企业都把项目外包给中国的公司来完成,国内也有越来越多的企业来从事嵌入式软件开发,近几年,国内对嵌入式软件人才需求倍增,仅仅北京市场嵌入式软件开发人员的需求就已经超过了5万人,而且还在持续增长。
嵌入式人才的工作环境与发展前景也有优势。曲老师告诉记者:“从事嵌入式工作有两大优势:一是工作强度相对较低。开发企业应用软件的IT企业,这个用户的系统做完了,又得去做下一个用户的,而且每个用户的需求和完成时间都不同,开发人员往往疲于奔命,重复劳动;而做嵌入式系统的公司,都有自己的产品计划,按自己的节奏行事,所开发的产品通常是通用的,不会因客户的不同而修改,一个产品型号开发完了,往往还有较长一段空闲时间进行充电和休整。二是职业发展相对顺利,从事企业应用软件的人,工作范围广,项目变化大,日常的积累很难产生质变,容易遭遇职业瓶颈;而从事嵌入式软件的人,所涉及的专业技术范围就是那些,时间长了会越来越有经验。”
以上都是针对求职工作而言,若对于个人整体发展来说,如果想创业,做自已的产品,那么嵌入式更是一个不错的主意,嵌入式软件不会像应用软件那样容易被盗版,开发出专利产品,又何止年薪十万。
入行得有专业基础,那么,应该如何快速成长为嵌入式人才呢?曲老师指出,嵌入式系统领域门槛较高,并不适合每个人,嵌入式开发人员不仅要懂较底层软件,对软件专业水平要求较高,要进入嵌入式系统开发领域工作,首先必须具备一定的C语言基础,然后可以尝试参加一些的相关培训课程,接着可以寻找项目实践的机会,增加项目经验。“
还有网友的宝贵意见:
“二、嵌入式系统的分层与专业的分类。
嵌入式系统分为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协议的应用层开发,或是基于嵌入式网络数据库的开发等等。
对于初学者来讲,要量力而行,不要认为驱动层工资高就把它当成方向了,要结合自身特点,嵌入式系统四个层面上那个层面上来讲都是有高人存在,当然高人也对应的高工资,我是做硬件层的,以前每月工资中个人所得税要被扣上近3千大元,当然我一方面充当工程师的角色,一方面充当主管及人物的角色,两个职位我一个人干,但上班时间就那些。硬件这方面上可能与我PK的人很少了,才让我拿到那么多的工资。
四、开发系统选择。
很多ARM初学者都希望有一套自己能用的系统,但他们住住会产生一种错误认识就是认为处理器版本越高、性能越高越好,就象很多人认为ARM9与ARM7 好,我想对于初学者在此方面以此入门还应该理智,开发系统的选择最终要看自己往嵌入式系统的那个方向上走,是做驱动开发还是应用,还是做嵌入式系统硬件层设计与板级测试。如果想从操作系统层面或应用层面上走,不管是驱动还是应用,那当然处理器性能越高越好了,但这个东西自学,有十分大的困难,不是几个月或半年或是一年二年能搞定的事。
在某种意义上请,ARM7与9的差别就是在某些功能指令集上丰富了些,主频提高一些而已,就比如286和386。对于用户来讲可能觉查不到什么,只能是感觉速度有些快而已。
ARM7比较适合于那些想从硬件层面上走的人,因为ARM7系列处理器内部带MMU的很少,而且比较好控制,就比如S3C44B0来讲,可以很容易将 Cache关了,而且内部接口寄存器很容易看明白,各种接口对于用硬件程序控制或AXD单步命令行指令都可以控制起来,基于51单片机的思想很容易能把他搞懂,就当成个32位的单片机,从而消除很多51工程师想转为嵌入式系统硬件ARM开发工程师的困惑,从而不会被业界某此不是真正懂嵌入式烂公司带到操作系统层面上去 ,让他们望而失畏,让业界更加缺少这方面的人才 。
而嵌入式系统不管硬件设计还是软件驱动方面都是十分注重接口 这部分的,选择平台还要考察一个处理器的外部资源,你接触外部资源越多,越熟悉他们那你以后就业成功的机率就越高 ,这就是招聘时所说的有无“相关技能”,因为一个人不可能在短短几年内把所有的处理器都接触一遍,而招聘单位所用的处理器就可能是我们完全没有见过的,就拿台湾数十家小公司(市价几千万)的公司生产的ARM类处理器,也很好用,但这些东西通用性太差,用这些处理器的公司就只能招有相关工作经验的人了,那什么是相关工作经验,在硬件上讲的是外围接口设计 ,在软件上讲是操作系统方面相关接口驱动及应用开发经验。 我从业近十年,2000年 ARM出现,我一天始做ARM7,然后直接跑到了Xscale(这个板本在ARM10-11之间),一做就是五年,招人面试都不下数百人,在这些方面还是深有体会的。
我个人认为三星的S3C44b0对初学者来说比较合适,为什么这么说哪?因为接口资源比较丰富,技术成熟,资料较多,应该十分适合于初学者,有问题可能很容易找人帮且解决,因为大多数人都很熟悉,就如同51类的单片机,有N多位专家级的人物可以给你帮忙,相关问题得以很快解答,所然业界认为这款ARM都做用得烂了,但对于初学者来,就却是件好事。
因此开发系统的选择,要看自己的未来从来目标方向、要看开发板接口资源、还要看业界的通用性。
五、如何看待培训。
首先说说我自己,我目前从业近十年,与国内嵌入式系统行业共同起步,一直站在嵌入式系统行业前沿,设计过多款高端嵌入式系统平台产品并为众多公司提供过解决方案,离职前为从事VOIP的美资公司设计IP-PBX,历任项目经理、项目主管、技术总监、部门经理,积累众多人脉,并集多年经验所得,考虑到学生就业与公司招人的不相匹配,公司想招人招不到,而学生和刚毕业的工程师想找份工作也不太容易,于此力创知天行科技有限公司,开展嵌入式系统教育培训。
因一线的科研人员和一线的教师不相接触,导至国内嵌入式人才缺乏,国外高校的技术超前于业界公司,而国内情况是业界公司方面的嵌入式系统技术要远远领先于高校 。为架构业界与高校沟通的桥梁,把先进技能带给高校学子,为学生在就业竞争中打造一张王牌,并为业界工程师快速提升实现自我创造机遇,我就这样辞去了外企年薪20多万的职位,做嵌入式系统方面的培训了。
对于培训来讲,是花钱来买时间 ,很多工程师都喜欢自己学,认为培训不值,这也是有可能的,纯为赚钱的培训当然不会太有价值,但对于实力型的培训他们可能就亏大了,有这样一笔帐不知他们算过没有,如果一个一周的培训,能带给他们自学两年后才能掌握的知识,在培训完后他们用三个月到半年时间消化培训内容,这样,他会省约至少一年半的时间来学其它的或重新站在另一个高度上工作,那么他将最迟一年后会拿到他两年后水平所对应的工资,就是在工资与水平对应的关系上比同批人缩短一年,每月按最少1千计,再减去培训费用至少多1.0万,同时也省了一年时间,不管是休闲也好,再继续提高也好,总之是跑到了队伍的前面了。
另一层面上讲,对于新人的培训相当于他们为自己提前买了份失业保险,有师傅会带领他们入道,我今年暑假时班里最年轻的一个学生是大二的,今年才上大三,这学期才刚学单片机,但现在ARM方面的编程工作已经搞得有声有色了,再过一年多毕业,他还会失业吗?
再者通过培训,你可以知道很多业界不为常人所知的事,同时也为自己找了个师傅,就比如说,两个工程师分别用S3C2410和PXA255来做手持设备,同样两人都工作四年,再出去找工作,两人工资可能最多可相差一倍,为什么?这就是业界不为常人所知的规则,2410属于民品,被业界用烂了,做产品时成本特敏感,当然也对人才成本敏感了,PXA255是intel的东西,一个255 CPU能买三个2410,一直被业界定义为贵族产品,用的公司都是大公司或为军方服务的公司,不会在乎成本,只要把东西做好,一切都好说,但这方面做的人也少啊,因为开发系统贵啊。
对于说为自已找了个好师傅,我想是这样的,因为同级工程师间存在着某此潜在的竞争关系,有很多人不愿意把自己知道的东西教给别人,这意味着他将要失业,就是所说的教会徒弟,饿死师傅,但对于我们这些人就不存在这样的关系了,我是在嵌入式系统平台设计上走到了一定程序,目前在国内这块的技术上已经是自己很难再突破自己,因此很多东西我对大家都是OPEN的,就比如说下面那部分关于接口设计中所提到的时序接口东西,我要是不讲,却使是高级硬件工程师我想也几乎只有10%的人能知道吧。
六、成为高级嵌入式系统硬件工程师要具备的技能。
首先我声明,我是基于嵌入式系统平台级设计的,硬件这个方向我相对来讲比较有发言权,如果是其它方面所要具备的基本技能还要和我们培训中心其它专业级讲师沟通,或去网站看看***。他们的方面上我只能说是知道些,但不是太多,初级的问题也可以问我。
对于硬件来讲有几个方向,就单纯信号来分为数字和模拟,模拟比较难搞,一般需要很长的经验积累,单单一个阻值或容值的精度不够就可能使信号偏差很大。因此年轻人搞的较少,随着技术的发展,出现了模拟电路数字化,比如手机的Modem射频模块,都采用成熟的套片,而当年国际上只有两家公司有此技术,自我感觉模拟功能不太强的人,不太适合搞这个,如果真能搞定到手机的射频模块,只要达到一般程度可能月薪都在15K以上。
另一类就是数字部分了,在大方向上又可分为51/ARM的单片机类,dsp类,FPGA类,国内FPGA的工程师大多是在IC设计公司从事IP核的前端验证,这部分不搞到门级,前途不太明朗,即使做个IC前端验证工程师,也要搞上几年才能胜任。dsp硬件接口比较定型,如果不向驱动或是算法上靠拢,前途也不会太大。而ARM单片机类的内容就较多,业界产品占用量大,应用人群广,因此就业空间极大,而硬件设计最体现水平和水准的就是接口设计这块,这是各个高级硬件工程师相互PK,判定水平高低的依据。而接口设计这块最关键的是看时序,而不是简单的连接,比如PXA255处理器I2C要求速度在 100Kbps,如果把一个I2C外围器件,最高还达不到100kbps的与它相接,必然要导致设计的失败。这样的情况有很多,比如51单片机可以在总线接LCD,但为什么这种LCD就不能挂在ARM的总线上,还有ARM7总线上可以外接个Winband的SD卡控制器,但为什么这种控制器接不到ARM9 或是Xscale处理器上,这些都是问题。因此接口并不是一种简单的连接,要看时序,要看参数。一个优秀的硬件工程师应该能够在没有参考方案的前提下设计出一个在成本和性能上更加优秀的产品,靠现有的方案,也要进行适当的可行性裁剪,但不是胡乱的来,我遇到一个工程师把方案中的5V变1.8V的DC芯片,直接更换成LDO,有时就会把CPU烧上几个。前几天还有人希望我帮忙把他们以前基于 PXA255平台的手持GPS设备做下程序优化,我问了一下情况,地图是存在SD卡中的,而SD卡与PXA255的MMC控制器间采用的SPI接口,因此导致地图读取速度十分的慢,这种情况是设计中严重的缺陷,而不是程序的问题,因此我提了几条建议,让他们更新试下再说。因此想成为一个优秀的工程师,需要对系统整体性的把握和对已有电路的理解,换句话说,给你一套电路图你终究能看明白多少,看不明白80%以上的话,说明你离优秀的工程师还差得远哪。其次是电路的调试能力和审图能力,但最最基本的能力还是原理图设计PCB绘制,逻辑设计这块。这是指的硬件设计工程师,从上面的硬件设计工程师中还可以分出 ECAD工程师,就是专业的画PCB板的工程师,和EMC设计工程师,帮人家解决EMC的问题。硬件工程师再往上就是板级测试工程师,就是C语功底很好的硬件工程师,在电路板调试过程中能通过自已编写的测试程序对硬件功能进行验证。然后再交给基于操作系统级的驱动开发人员。
总之,硬件的内容很多很杂,硬件那方面练成了都会成为一个高手,我时常会给人家做下方案评估,很多高级硬件工程师设计的东西,经常被我一句话否定,因此工程师做到我这种地步,也会得罪些人,但硬件的确会有很多不为人知的东西,让很多高级硬件工程师也摸不到头脑。
那么高级硬件件工程师技术技能都要具备那些东西哪,首先要掌握EDA设计的辅助工具类如Protel\ORCAD\PowperPCB\Maplux2 \ISE、VDHL语言,要能用到这些工具画图画板做逻辑设计,再有就是接口设计审图能力,再者就是调试能力,如果能走到总体方案设计这块,那就基本上快成为资深工程师了。
硬件是要靠经验,也要靠积累的,十年磨一剑,百年磨一针。 ”
探求学习嵌入式系统的最优解
学习有捷径吗?俺认为是有的,正确的道路就是捷径。
就好象是爬山,如果有导游图,那就能找到一条最正确的路线;如果没有导游图,自己瞎琢磨,东问西问,也未必能找到最佳的路线。
有时候回首前尘,会谓叹,要是当时我这样做就好了;这也说明了人生会有一个最优解。
嵌入式系统的学习也是一样,作为电子专业或者其它专业的学生来说,想要把嵌入式系统的学习搞好,走一条成功的人生道路,那应该怎么去做呢?俺试着分析看看。
当然人生的道路很多很多,嵌入式不可能是唯一的道路,也绝对不是最好的道路;这些都是因人而异的;
如果你没有什么别的资源,俺主要指的是人脉,资金,需要靠技术吃饭,正好你学的是电子、自动化、通讯...这样跟嵌入式相关的专业,又正好喜欢技术,那么可以考虑把嵌入式当作自己的傍身之技来学习。这时寻求嵌入式系统学习的最优解就有了意义。
一、 嵌入式系统的定义
根据网络上搜索到的关于嵌入式系统的定义,结合自己对嵌入式系统的理解,把嵌入式系统定义如下:
1、 嵌入式系统简单的说就是面向特定应用设计的专用计算机系统;
2、 嵌入式系统与普通的PC或者notebook不同,嵌入式系统的外形尺寸、功耗、外部适配器等各种特征必须满足应用的要求和限制;
3、 嵌入式系统的软件包括操作系统烧录在一块电路板上;
4、 使用低功耗的X86级别的CPU,采用模块化的设计,配置了最基本的计算机周边配备而制成。这种计算机通常采用Windows操作系统;
5、 嵌入式系统的CPU可以是:4位、8位、16位、32位;
6、 嵌入式系统应用广泛,诸如:
1) 小家电
2) 汽车
3) 电梯
4) 电视
5) 录像机或者VCD、DVD
6) mp3、mp4
7) 工业控制
8) 医疗设备
9) 卫星
10) 电话
11) PDA
12) 飞行系统等等
13) ……
7、 嵌入式系统的体系结构:
1) CPU
2) RAM
3) ROM或者flash ram
4) AD
5) DA
6) 人机界面(例如按键+LED/LCD/彩色液晶显示器/)
7) I/O
8) Usart
9) USB
10) CAN
11) 以太网
12) 嵌入式的操作系统,例如:uc/os、linux、vxworks、wince、dos。。。
8、 嵌入式系统更多的表现为SoC的特点,也就是把整个系统都集成在一个芯片上,例如,ATMEL的arm7的芯片91sam7x128/256等;用户可以获得廉价而功能强大的嵌入式系统;
二、 最正确的学习道路 - 从8位mcu到canbus到ARM7
二、 最正确的学习道路 - 从8位mcu到canbus到ARM7
第一步:熟悉8位mcu
个人的看法是,学习嵌入式的技术有个脉络:8位mcu(51或者avr...)+can2.0B+arm7+arm9,学习的时候可以按照这个脉络来进行;
作为低端的嵌入式系统,选择8位mcu作为入门是比较适中的,而8位mcu中,相比pic、avr、freescale等等8位单片机来说,又以选择51核的单片机作为学习8位mcu的首选来更加合适。当然这个观点是仁者见仁智者见智;如果需要理由的话,那么也许以下这些理由可以作为参考:
1. 51上积累了大量的优秀的代码和其它资源;网络上这样的资源太多了,几乎就是不花钱的;
2. 生产51内核的单片机的厂家很多,比如:ATMEL、华邦、LG、飞利浦、STC(宏晶科技)、TI、…
3. 51单片机在细分低端市场,面向不同的行业应用,厂家推出了不同的产品,如LPC900系列,STC的12CXXXX系列;在功能、价格、功耗,体积,封装、抗干扰等方面来满足行业用户的需求;例如,现在的51单片机越来越多的集成了A/D、D/A、SPI、I2C、PWM、内部时钟、看门狗、eeprom、ISP/IAP等等,已经跟传统的ATMEL的89C51/52有了很大的差别!功能越来越强大的同时成本越来越低,而且不担心某个厂家缺货...
4. 。。。。(还在不断增加之中)
第二步:熟悉can2.0A/B,在精通51的基础上,熟悉can2.0A/B
为什么是canbus而不是modbus bus、bitbus?
CAN是德国Bosch 公司为解决现代车辆中众多的控制和数据交换问题,开发出一种CAN(Controller Area Network)现场总线通信结构。其主要特点是:
1. 8字节的短帧传送,故传输时间短、抗干扰性强;
2. 高速,最高速度可达1Mbit/s;
3. 多主方式,多主之间又可以分成是主节点和次节点;各节点均可在任意时刻主动向网络上的其他节点发送信息,不分主从,通信灵活;发送的时候总线自动仲裁主次;主节点占有优先权;
4. 可以做到全区广播、分区广播和点对点通讯;
5. Can控制器自动过滤帧号不符的帧;大大减轻了CPU的负担;
6. 具有多种错误校验方式如CRC及其他校验措施,数据出错率极低;而且在严重错误的情况下,节点会自动离线,避免影响总线上其它节点;Rs485经常是一个节点影响了总线上所有的节点;
7. 采用无损坏的仲裁技术;
作为一种技术先进、可靠性高、功能完善、成本合理的远程网络通讯控制方式,CAN总线已被广泛应用于各个行业之中。大致有以下这些行业:
1、 汽车电子
2、 自动控制
3、 智能大厦
4、 电子系统
5、 纺织
6、 智能仪表
7、 医疗系统
8、 电梯
9、 安防监控
10、 电源
11、 运动控制
12、 …等各领域中,取代了原来的落后的RS485的通讯方式。
bitbus/modbus在物理层上都是Rs485的。
第二步:熟悉ARM7,掌握ARM这个超级单片机(32位)
三、 直奔主题 - 不要穿着棉袄洗澡
学什么很重要,没有必要穿着棉袄洗澡,直奔主题,要学就学最有用的东西。
比如单片机,学什么型号?市场上的单片机,有51、AVR、PIC、freescale等不同的系列,把任何一款单片机学会了玩通了那都是很不错;
但是我个人认为还是51系列的单片机在中国使用最多,去中发问问哪款单片机出货量最大就知道啦;
据说有些大学现在还在教授Z80,在论坛上争论起来,有些人支持,有些人反对;支持的人认为这是一款很好的原型机,可以学到很多计算机的原理;
但是对于嵌入式系统的学习者,一款已经过时的技术学它做什么?难道学了不能致用是对的?
学习51不也一样能了解计算机的基础知识?而学好了51毕业出去就能生存;
大家都知道485总线要想可靠工作非专家不可,而现在canbus作为更加可靠性能更加卓越的总线技术,节点数量每年递增;可以说,51+canbus能够让你如虎添翼;
那么,是不是去学习canbus要能获得更加远大的前途而不必在485上浪费宝贵的青春?答案显然是前者。
毕业之前的大学n年+毕业设计就是为了迈出就业的第一步;第一步很重要。
人生不要有断点,一步接着一步,现在迈出的一步就是为了下一步做好准备,甚至为了比较长远的以后...
四、 把嵌入式系统分成模块学习 - 庖丁怎样解牛?
四、 把嵌入式系统分成模块学习 - 庖丁怎样解牛?
拿到一个电路设计的任务的时候,或者拿到一块完整系统的电路板的时候,怎样去分析它的系统构成呢?
作为一个电子系统,它的构成通常是:
1. 单片机最小系统
2. 配置(内存、时钟、看门狗、eeprom)
3. 开关量输入
4. 开关量输出
5. 模拟量输入
6. 模拟量输出
7. 人机界面(按键+液晶显示/LED显示)
8. 通讯接口和协议
因此设计的时候,或者分析的时候,要按照这个分类来选择。
举个例子:开关量的输入输出的扩展,有以下的方法:
1、 串口扩展
2、 并行扩展
那么,在系统设计的时候,到底是使用串行扩展还是并行扩展,就需要权衡性能和价格,而选择一种最合适的扩展方法;
在《从51初学者到电子工程师》一书中,将把这些知识点列表出来。
在这个基础上,按照这个思路,您再去构筑自己的知识体系。
其实,任何一门学问,难得就是入门;而入门,就是要有一个完整的知识体系;一开始这个知识体系仅仅是一个个点,到后来就能成为一套完整的体系,知识的网越织越密。
五、 尽可能获得更多的信息 - 站在前人的肩膀上
当您拿到一个设计任务的时候,怎么入手呢?
要把这个任务按照模块分解,再充分利用网络上的资源,找到现成的或者类似的解决方案。
试举一例:
《基于CAN总线的智能I/O读写模块》
当你拿到这个任务的时候怎么着手呢?
1、 您会想到,哦can总线是什么东西啊,不知道;不过没有关系,狗狗之;
哈哈,结果出来啦,原来是周立功先生推的can总线啊,知道知道;把周立功网站上的有关can的资料都下载下来学习;
2、 哦那原理图怎么画呢?再次狗狗之,不过这次要使用图片;嗯但是我已经知道了,还有一个can总线控制器的芯片,sja1000,那就使用这个词来搜索吧;
哈哈找到了,连89c5X+sja1000+82C250(总线收发器)都有了;哦还有一个复位电路,不过没有关系,俺可以使用stc89C5X,内置看门狗和复位电路;
3、 剩下I/O读写模块怎么办呢?
哦模块化的设计思路,想想看,老树都说了什么?
I/O有多种的扩展方法,一种是串行、一种是并行,那我需要扩展吗?算算I/O的数量,硬件还剩下哪些资源呢?
1、p0、p2被占用了
2、WR、RD也被占用了,哦仔细看看,int0也被sja1000的中断占用了;
3、p1/p3加起来是16根口线,剩下16-3(RD、WR、int0)=13个口线;
4、看门狗喂狗需要一个(如果内置看门狗的可以不要)
还剩下13个;
现在需要8入8出,超出了,那么就需要扩展
扩展有2种方法:
1、串行
2、并行
串行速度慢点,但是简单;
也可以使用并行,可以按照对ram的读写一样的方法来扩展;反正sja1000也是并行的;
串行又可以分成:
输入串行扩展;
输出串行扩展;
嗯要不就定下来,输入使用串行扩展,反正输入的开关量为了抗干扰也要使用时间片,1ms间隔扫描至少3~5次才能判断;
输入串行扩展可以使用74HC165;好像74hc166也可以,不记得了;需要2根I/O;
这样13-2=11,再减去输出的8个口线,完全够用了;还剩下3个口线;那就把串口也做出来调试和下载用;哈哈。。。
不过…开关量8入8出的信号是什么形式?
嗯通常输出输出都是干接点;
输入需要光电隔离;要使用一个隔离的Dc/DC模块;
输出7407直接驱动继电器即可;
光耦使用什么型号呢?
嗯老树说了,有TLP521-1,再找来TLP521-1的资料看了,光耦隔离的芯片也有了...
再找来7407的芯片的datasheet看了,驱动继电器的芯片的资料也有了...
再去找nais的继电器的资料看了,继电器输出也有了...
再去找接线端子的资料或者去配套市场看看,输入输出电源can接口的端子也有了...
做到这些,硬件就差不多了
......
哦还有协议,嗯使用啥协议呢?嗯好像zlg那里有一个什么iCAN的协议,可是网站上没有,怎么办呢?老办法,搜索看看,哦,老周那里有一本书讲了ican的协议,嗯去互动出版社定购一本,过2天就能送到了...
不过代码还没有,嗯再搜搜看,要不就到21ic上问问...
六、 大学阶段掌握一门傍身之技取得先手之利 - 精通一门略通其它
看刚毕业的学生的简历,到处都是熟悉的字样,比如:
……
熟练使用c51、protel;
了解ARM/ucos2/Linux
分析过ucos2内核代码。
比较了解Linux底层硬件驱动软件结构比较
做过一些嵌入式硬件驱动的设计
很熟悉网络通信知识及网络编程
……
实际上,对于企业来说,并不关心你学了多少的知识,而是关心你是否有一门比较精通的手艺,来了就能干活。
那么,该怎样去做呢?俺觉得,应该是在精通一门手艺的情况下,略通其它。
嵌入式系统本身也是多方面的,硬件软件都有,但是,要有自己的最强项,因为企业都是用你的最强项。面面俱到实际上对于在校的学生来说是不可能的。我认为,对于在校的学生,应该重点放在c语言的熟练上;一方面是因为硬件没有实际的实践,很难能拿得出手,当然实践的成本也高;当然自己动手做一个学习板还是很有必要的,也不算很难;还有就是在企业中,软件和硬件的配置基本上是1:4的情况;对于成熟产品,基本上,硬件修改的情况非常小,升级都是在软件的功能的增加和完善上。
当然去强化自己的一门技术不等于放弃其它,而是说,要有重点的学习,要学会发力,把自己的精力集中在一门技术上;
稍微大一点的企业都是有明确的分工的。
而如果能在大学学习的阶段就能熟练掌握一门技艺,或者是c语言的编程,或者是原理图和PCB,或者熟练掌握模拟电子...,那么就能很快找到嵌入式系统的开发工作,也就上道了。
七、 第一份工作很重要 – 哪怕去实验室打杂也要做跟嵌入式沾边的工作
第一份工作很重要,人生的第一步很重要,走好第一步,可以少走2~3年底的弯路;没有走好,有可能这辈子就废了;
工作了2~3年之后,用人单位看重的是你的工作经验,直接影响到您的价值能不能升值;就象微软不会招聘做物流的人去做软件,如果您做的是机械设计,当然用人单位也不会让您去做51的开发;
然而,第一份工作能不能做嵌入式开发,首先是您能不能在大学的4年内取得先手之利;先取得一些嵌入式开发的经验,比如C51的编程等等;
如果您经验也不是很丰富,一开始可以计较工资的高低,而是干了再说,哪怕是到实验室打杂;
这样也比干点别的再回过头来做嵌入式的开发要强。
八、 怎么加强自己?- 时间规划+勤奋
有一个明确的职业生涯的规划,同时要有一个达到这个目标的可以实施的准确的时间表。现在竞争这么激烈,不付出超出常人的努力在现今的中国是不可能脱颖而出的;人太多了,竞争太激烈了。企业如此,个人也是如此;当然,真正的卓越的企业或者个人,更重要的是理念,怎样去培养自己的核心竞争力!个人认为,简单的说,那就是技术专家+行业专家。
年轻人往往对职业生涯的规划迷迷茫茫;但是时间如白驹过隙一去不复返。如果说每个人的成就有大有小。善于思考是一方面,行动敏捷是一方面,抓紧时间,提高效率那则是最重要的因素之一。
九、 嵌入式系统设计的3个境界 - 熟练、熟能生巧、系统设计的思想
熟练:熟练掌握c语言、电路模块、eda工具;
熟能生巧:干活多了,从中悟出很多的技巧;干得活又快又好,这是熟能生巧;
系统设计:不满足于熟能生巧,而开始考虑,代码重复使用,代码设计的标准化、模块化;使得后来的开发能在一个标准的平台上进行;对嵌入式系统设计有了自己的独到的见解。
也还可以使用另外的标准来作为嵌入式系统设计的境界:
可靠性高:在同样的成本下,做出来的东西可靠性高于竞争对手;
可靠性高的情况下成本更低:能用比竞争对手成本更低的电路设计作出可靠性更高的产品;
在此基础之上,功能更加强大,用户使用更方便:进入到行业专家的境界了。
十、 细节决定成败 – 精心设计硬件电路
对于电子工程师而言,当拿到一个datasheet,或者一个电路图,或者设计的电路图,首先是站在前人的肩膀上,尽量不去做重复的劳动;但是,要对每一个电阻、电容在电路中的作用心里很清楚-把可有可无的器件去掉。要是您对电路中的元器件的作用还不是很清楚,举例,为什么上拉电阻是5.1K?换成1K行不行?换成10K行不行?什么是上拉?什么是强上拉?什么是弱上拉?去耦电容的作用是什么?这些都要做到清清楚楚。每一个细节构成可靠的产品;而一个细节的疏忽带来的是大量的经济的损失和声誉的丧失。
十一、 改善你的命运 - 了凡四训
十二、 寻找足够大的平台 – 寻找机会与可持续发展
十三、 学会发力 - 快、准、狠
看准嵌入式系统设计可以作为傍身之技的话,那就要:
快:下手要快,想到了就去做,赶紧去学;
准:抓住8位mcu、can总线、arm7这样的道路,不走错;
狠:用功要狠,白天黑夜,吃了吃饭睡觉时时想着;男人嘛,就是要对自己狠一点。
十四、 团队精神 – 并行处理的代名词
还有一种说法)详细定义嵌入式系统
还有一种说法)详细定义嵌入式系统
一般来说,嵌入式系统是“执行专用功能并被内部计算机控制的设备或者系统。嵌入式系统不能使用通用型计算机,而且运行的是固化的软件,用术语表示就是固件(firmware),终端用户很难或者不可能改变固件。”
有技术概念的人么理解上面的定义应该没有问题,但是对非技术领域的人们来说可能存在一些障碍。一个更简单的定义是:“嵌入式系统就是包含了用户所不知晓的计算机的设备。”
但是,甚至这个定义也需要某些解释。首先,大多数非IT人士对计算机的概念就是一个米色的贴着“Intel-Inside”标签的盒子。嵌入式计算机的发行量远远高于基于Intel-x86/Pentium的台式PC的发行量。Intel或许“inside”,但是嵌入式系统却是无处不在。
人们很少会意识到他们往往随身携带了好几个嵌入式系统——手机、手表或者智能卡都嵌有它们,而且他们在与汽车、电梯、厨房设备、电视、录像机以及娱乐系统的嵌入式系统交互时也往往对此毫无觉察。嵌入式系统在工业机器人、医药设备、电话系统、卫星、飞行系统等领域扮演了一个更为重要的角色。正是“看不见”这一个特性嵌入式计算机与通用PC计算机相区分。
嵌入式体系结构
作为一名技术人员,你可能想从体系的角度来定义嵌入式系统。尽管绝大多数嵌入式系统是用户针对特定任务而定制的,但它们一般都是由下面几个模块组成的:
一台计算机或者微控制器,字长可能是可怜的4位或者8位、16位、32位甚至是64位。
用以保存固件的ROM(非挥发性只读存储器)。
用以存程序数据的RAM(挥发性的随机访问存储器)。
连接微控制器和开关、按钮、传感器、模数转化器、控制器、LED(发光二极管)和显示器的I/O端口。
一个轻量级的嵌入式操作系统,一般是自行编写的。
专门的单片微控制器是大多数嵌入式系统的核心。通过把若干个关键的系统组成部分集成到单个芯片上,系统设计者就可以得到小而便宜、可以操作较少外围电子设备的计算机。
嵌入式系统的一般模型并不足以定义嵌入式系统本身。例如,某些嵌入式系统常常比标准PC机箱小不了多少。这类设备有:
信息查询以及销售点终端。
某些工业控制系统。
游戏控制台(例如基于x86和Windows的Xbox)。
数字录像机(例如基于Linux的TiVo)。
这些设备可能使用硬盘驱动器来保存固件,并运行各种桌面操作系统如Windows、Linux或者DOS。这并不是典型的嵌入式系统的体系结构,但是按照我的较早前的定义,它们仍可以称为嵌入式系统。
本人电路这一块学的不好,不能自己设计,编写程序这一块没问题
从事单片机 或者 嵌入式开发,还要学些什么?不懂电路行么?
既然你电路设计不好,我觉得你更应该往嵌入式软件方向发展。如果软件开发的,电路可以不懂,但是如果硬件开发的,不懂电路那你还不要走硬件开发的路线。
要学哪些知识呢?
学习嵌入式,该学习什么基本的知识呢?
首先C语言,这个是毋庸置疑的,不管是做嵌入式软件还是硬件开发的人员,对C语言的掌握这个是必需的,特别是对于以后致力于嵌入式软件开发的人,现在绝大部分都是用C语言,你说不掌握它可以吗?至于如何学习C语言,我想这些基础的知识每个人都有自己的方法,关键要去学习,看书也好,网上找些视频看也好。很多人会问,C语言要学到怎么样,我觉得这没有标准的答案。我想至少你在明白了一些基础的概念后,就该写代码了,动手才是最重要的,当你动手了,遇到问题了,再反过来学习,反过来查查课本,那时的收获就不是你死看书能得到的。
其次,应该对操作系统有所了解,这对你对硬件和软件的理解,绝对有很大的帮助。应该把系统的管理理解一下,比如进程、线程,系统如何来分配资源的,系统如何来管理硬件的,当然,不是看书就能把这些理解透,如果不是一时能理解,没关系,多看看,结合以后的项目经验,会有更好的理解的。
还有应该学习嵌入式系统,如linux或者wince下的编程,这些对以后做应用的编程很有帮助,当然,如果做手机的话,那可以学习MTK、塞班、Android等操作系统,Android是以后发展的趋势,现在很热门,Android也是基于linux系统封装的,所以建议先学习下linux。
还有,应该学习下单片机或者ARM或者MIPS,很多人说我没有单片机的经验,直接学ARM可以吗?我觉得那完全没有问题的,当然如果你学习过单片机,那最好不过了,以后学习ARM就更简单了。
最后如果你把以上的知识都有所了解后,就该去阅读阅读一些优秀的代码,比如结合arm芯片手册学习去学习下UBOOT的源代码,了解下最小的系统开发,那对你整个嵌入式开发的非常有帮助的,可以的话,还可以学习下linux的源代码,当然如果你直接阅读2.6的代码,我想你会很痛苦的,可以先看看linux 代码早期的版本,比如0.12 的代码等等,麻雀虽小,五脏俱全,如果你全看完了,那我想你就是一名很成功的嵌入式工程师。
至于上面说的知识如何学习呢?每个人都应该去找自己最好的方法,所谓的最好的方法就是最适合自己的方法。很多人看不进书,那就去看看视频吧。视频也应该要选择,不是随便看看,应该要有所选择,有所挑选。我也是这样一路走过来的,不过我这人比较懒,我看不进书,一看书我就想睡觉,所以这几年我都是看视频过来的,现在也算学有所成,但也不敢说是高手吧。
我在网上看到,有人把自己学习嵌入式的视频总结出来,嵌入式系列实践和视频教程,大家可以看看网址http://www.FASHIONWEEKDAILY.info/embedvideo.htm 我仔细看了觉得很不错,我本来也想整理下,可是奈何我自己的电脑硬盘空间才40G,没有办法,时间也是不够,心有余而力不足,我不是在帮他做广告,虽然要花钱,我觉得算不错,至少自己不用去整理和花大量的时间去找资源,当然如果网上有的下,你网速和硬盘都够的话,我建议大家自己网上下也好。想想我自己该开始学的时候,那时视频资源少之又少,我买书和买视频至少花了几千块,但是我觉得那很值,至少我现在赚回来了很多知识。
000000000000000000
第一:我想知道 51 Pic avr 它们的区别,学了51了,其它的还要学么?工作中用到的是不是有很多种型号的芯片?
学了51,可以不学其他的,都是差不多的。工作中试会遇到很多芯片,但是实际上都是差不多的。如果你真正学了一门单片机,那就够你用了,正如楼上有朋友说单片机是嵌入式中比较基础的学科,这个我是赞同的。毕竟单片机能完成的功能单一,只能跑单线程,只能完成比较单一的任务。你可以把单片机当做学习嵌入式的入门,而不应该是把它当做你以后要从事的行业,因为如果你只会单片机,我明确告诉你,你的就业范围会很窄
第二:如果从单片机向ARM过渡,需要学哪些?
其实就是学ARM的相关知识,还有操作系统,单片机和arm的最大区别在于任务,单片机只能跑单一的任务,arm可以跑操作系统,可以跑多线程。arm有自己的指令,这些都是要你来学习
51是最基本的,学了51就算是入门了,其他的就是在51的基础上扩展。像什么AD啊、捕获什么的。。你不可能那种都学到吧?有了51的基础用到哪个到时再学也来得及。
个人感觉设计硬件和程序设计得关系:硬件可以让程序变得简单、容易实现。
单片机软硬分的不是那么清晰吧,都要会点,就看你偏向哪个了。要是程序设计的话,电路方面能看懂原理图、学过数电模电(不用太好,略懂就行。。)会用示波器、信号源什么的就行。
感觉有些东西是在工作中学习的。你不能把所有的都学好在去工作吧?要不这样:你看上哪个公司了,他有什么要求你按他的学。我就是这么干的。我是大四学生也想从事单片机,参加过 大学生电子设计竞赛。。做过不少小的项目(或说是东西 — —@!)
知识是用来做出东西来的,你应聘的时候说你做过什么什么项目。。总比你说你会什么什么知识有说服力吧?
楼主想从事这方面的行业,不懂电路怎么行.........
一般嵌入式开发还需要学习了解proteil,制电路板用的,其他也没什么,具体问题碰到了再学起来也来得及,主要是电路啊LZ!!!
数字电路、模拟电路都要比较精通才行的,因为搞设计的很难找到现成可用的模块,往往要自己用基本原件搭出来。
不过也不用灰心啊,其实电路也不是很难,动手多做做,获得点成就感,慢慢培养兴趣,学起来也很快的。
祝LZ好运,事业有成啊O(∩_∩)O