嵌入式作为国内近几年比较火热的专业,也就是和前几年计算机专业一样。前些年计算机专业做为一个火热的专业各大高校一片热招,但由于学校师资有限、教材落后, 最后导致学生毕业后找不到工作。
近几年嵌入式又是一片火热,各大高校纷纷热招,但是部分高校设备不够齐全、师资不够,在不久几年里嵌入式专业又将重蹈计算机覆辙。现在好多在校大学生和工作人员对于嵌入式专业十分感兴趣。下面我就个人经验来说一下嵌入式的学习方法,如有不到之处请高人指点。
嵌入式的定义是以应用为中心,以计算机技术为基础,并且软硬件可定制,适用于各种应用场合,对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统。它一般由嵌入式微处理器、外围硬件设备、嵌入式操作系统以及用户的应用程序等四个部分组成,用于实现对其他设备的控制、监视或管理等功能。 嵌入式系统几乎包括了生活中的所有电器设备,如掌上 PDA 、移动计算设备、电视机顶盒、手机上网、数字电视、多媒体、汽车、微波炉、数字相机、家庭自动化系统、电梯、空调、安全系统、自动售货机、蜂窝式电话、消费电子设备、工业自动化仪表与医疗仪器等。
嵌入式系统一般指非PC系统,它包括硬件和软件两部分。硬件包括处理器/微处理器、存储器及外设器件和I/O端口、图形控制器等。软件部分包括操作系统软件(OS)(要求实时和多任务操作)和应用程序编程。有时设计人员把这两种软件组合在一起。应用程序控制着系统的运作和行为;而操作系统控制着应用程序编程与硬件的交互作用。
这时嵌入式就以计算机为基础从事相关设备的开发了,试问前些年没有做好计算机教学的学校,又何以从事嵌入式教学呢。
对于在校大学生应该C语言基础知识,光是学习谭浩强的还不够,多看一些国外的经典书籍,如,这是每位学习程序设计的人员必备知识。由于嵌入式是软件和硬件相结合的产物,所以对于操作系统和微机原理的学习也是不可缺少的,但是现在各大高校只是停留在理论知识的讲解,并没有实际上的东西,这也就导致学生不能提高兴趣,只是用于对付考试,所以学好操作系统和微机原理应该理论实际相结合。还有数据结构这一门课程是不得不提的课程,国内出名的也就是清华大学的严蔚敏的那本书了。学好这些东西这也就是相当于武侠小说中的内功的修养。
有了这些做为基础,去学习其他的一些东西就会很快的。
嵌入式分为嵌入式软件开发和嵌入式硬件开发,嵌入式的软件开发在掌握了以上东西后要如鱼得水。
下面就以万达嵌入式Linux培训的课程体系为例,个人感觉还是不错的。他是这样列的:
Linux基础、Linux应用程序开发、嵌入式Linux网络程序开发、嵌入式图形界面与数据库开发、嵌入式linux开发环境搭建、S3C2440的内部结构功能简介、BootLoader分析和移植、Linux内核移植、uCOS II 源码分析和移植、根文件系统制作、BootLoader、内核综合解析、Linux系统调试、ADS仿真调试与S3C2440硬件接口操作、ARM11接口、Linux下字符设备驱动程序、Linux下块设备驱动程序、Linux下网络设备驱动程序、LCD设备驱动、Flash设备驱动、USB驱动开发等。
要学习一个东西肯定要先学习他的操作,这就是linux基础,也就是常用的linux操作,这样的书籍太多了,找一些实用的来看就可以了。下来就是在我们先前学习的C语言的基础上学习linux上的程序开发,这门课程现在在好多学校都没有开设,对于程序开发者来说是一门很重要的课程,不过万达嵌入式是把网络程序开发和图形界面开发与数据库开发分开了,其实这些都属于linux上的应用程序开发,可能也是为了方便大家认识这一门课程吧,条理更加清楚了。这一内容是企业开发中应用最多的内容,也就是所谓的嵌入式应用层开发。有了深入的C语言基础这些内容都是很容易学会的。比较知名的书籍有已帮的的steves先生的《UNIX环境高级编程》可以说是UNIX编程“圣经,这本书一定要好好的拜读的。对于网络程序开发也是stevens先生的《UNIX网络编程》,如果你想深入的掌握的话可以看一下《TCP/IP协议三卷》。对于图形界面的开发大家可以看一下Jasmin Blanchette的《C++GUI Qt4编程(第2版)》。掌握这些基本上就可以从事应用层开发了。这些技术都是企业内部急用的内容。
由于嵌入式的开发不是在我们平时用的x86平台上用的,所以我们需要把我们所写的程序放到相应的平台上去,这时就用到了嵌入式开发环境的搭建(见上面的课程体系),开发环境的搭建主要就是交叉编译开发环境的搭建,这个东西你可以去网上去下,也可以自己动手去做,但在实际当中用的时候需要你自己动手去搭建。建议你先自己使用,然后慢慢的学着去搭建。
对于ARM9的操作,现在市场上主要是2410和2440,二个选择一个用就可以了,内容差不太多,认真的研究透一个就可以了,对于ARM11的6410的操作就先不要考虑了,在万达嵌入式的课程体系中也安装的也挺合理的,先是学习一下2410或2440再去学习6410,有了一定的基础后再去学习6410才有可能把它操作起来。对于接口的一些操作就是把ARM当做一个单片机来操作,这样的书籍可以去看一下周立功的书籍,它们对ARM说的挺多的,不过他们用不是三星的产品,但是懂了其中一个其它的操作起也就可以了。
对于2440的操作会了以后就可以去学习BootLoader的学习了,在万达嵌入式里面说的是BootLoader的,这里只是说了一个总称,这里主要有u-boot,vivi,LILO等,如果你用的是ARM你可以先自己选择一个小的BootLoader,比如vivi来学习,学会这一个了你去操作其它的都是一样的了。
对于操作系统的移植大体过程都是一样的,主要是让你做一个最小系统,方便以后驱动的学习。对于嵌入式系统移植的话这方面还真没有太多好的书籍,自己可以去网上搜一下。
对于基础知识都打好以后就可以进攻驱动程序开发,这个东西是一个比较漫长的过程,一定要静下心来,慢慢的去阅读代码,慢慢的去学习。这样的东西大家可以看一下《Linux内核源码情景分析》、《深入理解Linux内核》等书籍。在万达嵌入式的课程体系里面他们说到了好多关于驱动开发中的实例,确实是这样子,驱动开发肯定要多接触一些典型的驱动程序开发的案例,大家可以慢慢的跟着课程体系里面的东西去学习。
另外就是嵌入式的硬件的开发,主要就是所谓的FPGA、DSP、VHDL等。这些东西在大学里面基本上都会学到大家都可以去学习一下,自己试着做出来一些东西来。比如抄板子,一点一点的去划。
好了对于嵌入式的学习在这里就说这些,如果有不正之处请大家指正。
大家好,我是一名xx理工大学电子信息工程的学生,现在已经工作四年多了,可能有很多刚毕业的大学生想从事嵌入式这一方面的工作中,可是又无从下手,那么我想以我自身为例子来和大家探讨一下这个问题。
先说说我大学四年的经历吧:
大一:数电 模电 C语言
这些都是基础,必不可少了。数电,驱动的逻辑与寄存器的入门;模电,电路图以及外围电路的基础;C语言,这个没啥好说了吧!
大二:数据结构 单片机
数据结构这个没学,后来我在21ic公开课自学了一些Linux课程(主要是朱有鹏还有一些经典的基础入门教程),Linux内核就是大量的数据结构之间的嵌套的派生;单片机,这个已经是嵌入式入门的开始了,可以开始编程设计控制完成一些基本的功能了。
大三:STM32 uCOS 操作系统原理
这些东西我都已经是自学了,因为没有课程,STM32这个玩意主要是他在市场应用领域广泛,因为他性价比高嘛!21ic公开课上资源丰富,稳定,cortex M3的先驱者,学习的话,买个开发板,找个视频看起来,同时自己也要扩展性的学习编码。uCOS这个操作系统入门简单,资料丰富,完全可以自学,同时通过书籍学习阅读源码,但是当你懂得怎么用之后我建议你看RT Thread这款操作系统,非常Linux,强大的组件,只有你想不到,没有你看不到的。操作系统 这个书,我看了一小小部分,不好评价,但是已经加入我的必看书单了。
大四:ubuntu POSIX接口应用 socket等
此时,你已经真正进入嵌入式大门领域了,到了这步,或许不用我说你也有你自己的目标了。
工作之后,实话告诉你,如果你做嵌入式,大多数是跑cortex M系列的芯片,如果你希望你能上cortex A系列,那么你只是一个写应用的,如果你想在cortex A系列上做嵌入式的开发,那估计是工作几年以后得事了,驱动开发没你想象那么简单,比如一个视频开发,你要了解协议,芯片等等。不是打击你,刚毕业的很少能做得上cortex A系列的驱动开发,除非你是某芯片厂商的FAE,那么你能做的也就去看看别人代码,改改BUG,毕竟,驱动一定是需要稳定成熟的,不能让你随意改动。
学习嵌入式,需要具备什么基本的知识呢?
首先C语言,这个是毋庸置疑的,不管是做嵌入式软件还是硬件开发的人员,对C语言的掌握这个是必需的,特别是对于以后致力于嵌入式软件开发的人,现在绝大部分都是用C语言,你说不掌握它可以吗?至于如何学习C语言,我想这些基础的知识每个人都有自己的方法,关键要去学习,看书也好,网上找些视频看也好。很多人会问,C语言要学到怎么样,我觉得这没有标准的答案。我想至少你在明白了一些基础的概念后,就该写代码了,动手才是最重要的,当你动手了,遇到问题了,再反过来学习,反过来查查课本,那时的收获就不是你死看书能得到的。
其次,应该对操作系统有所了解,这对你对硬件和软件的理解,绝对有很大的帮助。在长沙英腾技术学习的时候,来自北航的罗老师经常说,学习嵌入式最好硬件软件两手抓两手都要硬。应该把系统的管理理解一下,比如进程、线程,系统如何来分配资源的,系统如何来管理硬件的,当然,不是看书就能把这些理解透,如果不是一时能理解,没关系,多看看,结合以后的项目经验,会有更好的理解的。
两种方式:一,接受培训,优点,有专专业人士指点,进步快,缺点:费用高,不一定有效,而且学习是日积月累的过程,不能一蹴而就的。而且现在做培训的好些是没有实际的东西传授的
二,自学,缺点:时间长,缺少专业人士指点,遇到问题无从解决,学习方向和目标不明确等,但如果持之以恒的学下来,成绩一定是斐然的。
一般来说学习中最好有自己的开发平台——开发板,现在业内做的比较好的有几家:飞凌,友善,立宇泰等。我就是飞凌的客户,感觉还不错,学习中遇到许多问题,他们的技术支持给了我很大的帮助。
推荐你看一下华清远见的嵌入式视频教程,去华清远见官网上看看,也有很多学习资料。
标签:嵌入式