- nicehost
-
大家好,我是一名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,毕竟,驱动一定是需要稳定成熟的,不能让你随意改动。
- max笔记
-
我当年也是自学的嵌入式,个人感觉,难的是入门,之后就和所有其他行业一样了,靠积累。
我有Linux基础(用了一年linux系统),所以关注的也是linux嵌入式。最开始我看过书,看过文章,但是真正入门是看的视频,这个方法最快,也最直观。我看的是韦东山老师的视频,只看了第一期。
当你对嵌入式有了一个概念以后就会发现嵌入式后期分很多方向,全方向发展的话耗时太长,所以就要选择方向了。比如驱动,比如应用,比如硬件,比如安卓等等方向。一般来说入门嵌入式以后选择软件应用和安卓方向的比较多(比如在下),以后牛逼了还可以转底层,搞驱动(这个薪水普遍不错:D)。
有了方向以后就是自己多注意收集知识了,深层的很少有系统的教程的。工作中遇到的每个问题都是财富,解决了,水平就提升了。
总体来说我的经历是自学入门,达到可以找工作的水平(4000块那种)三个月到半年。认真工作两年以后你就是小高手了(工作别混日子,真的),五年专家,十年大师。
现在自学嵌入式难不难自己看吧,和小马过河一样,这个问题因人而异。
- 马老四
-
学习嵌入式系统,首先应该明确什么是嵌入式系统,否则费力去学,却不知所学为何物,岂不惘然?嵌入式系统的定义很多,这也是困扰嵌入式系统学习的一个因素。笔者根据自己开发和教学过程中的理解,以及对各种嵌入式系统的应用进行总结,提出了嵌入式系统的简单定义:嵌入式系统是嵌入式计算机系统的简称,这个定义突出嵌入式计算机系统和普通计算机系统的共性。下表列出了嵌入式系统的一些典型的应用:
智能机器人(S D R 4,火星登陆车)
娱乐和消费电子(Gameboy Advance,SonyPSP)
网络通信产品(Smartphone)
军用设备(军用PDA )
汽车(车载导航,自动驾驶,娱乐系统)
智能仪器(虚拟仪器)
安全防护(防火,防盗)
环境保护(探空气球)
银行和商业消费(ATM)
以火星登陆车为例来分析一下嵌入式系统的定义。火星登陆车虽然听起来感觉在技术上有些高不可测,但是本质就是嵌入式计算机系统的应用,其核心就是一个计算机系统,而这个计算机系统的组成同传统的计算机系统在本质上没有什么差别。两者的显著不同之处就在于,用于火星登陆车的计算机系统被安装到了火星登陆车上。当然,一个计算机系统能够被安装在火星登陆车上,是需要进行很多特殊设计的。但是从本质上讲,嵌入式系统的核心概念还在计算机系统。嵌入式系统学习的重点也在计算机系统上。一方面,学习者需要牢固掌握计算机系统本身的概念,更重要的是学习嵌入系统的开发过程同传统计算机系统开发过程的差别。这里需要指出的是,很多学习者本来就没有从事过完整计算机系统的开发,高校的教学是以程序设计为中心的,计算机系统的构成,操作系统的原理,编程语言等课程都是为了能够让学生更好的使用计算机系统进行程序设计,在现有的计算平台上来设计实现各种应用,学生一般没有机会学习一个完整的计算机系统是如何构建,并亲身参与到构建的每一个过程。而对于嵌入式系统而言,从事平台开发的人就是要亲自去开发出一个完整的计算机系统,这个过程包括
需求分析、
2 硬件设计
3 驱动程序
4 Bootloader & BSP (板级支持包)
5 操作系统的移植
6 应用程序的开发
7 性能检查
嵌入式系统教学的目的就是教会学生如何根据需求去建立满足某种特殊行业需求的嵌入式计算机系统。让学生学会如何构件硬件平台,进行硬件设计,选择能够满足应用要求的最佳的嵌入式操作系统,并完成Bootloader,BSP和驱动程序的编写,移植,调试等过程。为了满足行业需求,最终要在所建立的系统上编写调试相应的应用程序,并进行性能的测试和检查。
- 北境漫步
-
数电模电当时学习之前上过的课是电路,交叉是高等教育出版社的《电路》,作者是邱关源。嗯,看样子你没上过这方面的专业课吗,莫非是跨专业吗。
看你说想自学嵌入式开发,貌似没有一点基础。那的确是先要从简单的51开始入手,的确搞这方面的开发需要一点的硬件基础,可以看得懂人家画的板子的工作原理。这就需要模电和数电的知识,虽然一般这方面的开发只需要高低电平以及一点的三极管工作原理等等,还包括看得懂数据手册。如果你不是画板子,我劝你不需要太深入了解硬件结构比如工作电流,电压的大小,板子的布线等等。你只需要知道工作原理就行。
当然如果你要深入的话,那51是不够的起码到arm端,这样才可以跑系统,但是到了系统级别,那不是简单的裸驱开发了,要学的东西更多,但愿你是计算机专业出身。
一般的公司很少有像你1,2步那样做的,电路一般不要你设计,你需要实现功能就行,软硬都通吃的毕竟不多,大公司也不多的。要知道一块板子的模拟部分光一个电源就可以让你学习一生了。
劝你慢慢来吧,起步的慢点,以后就容易的多了。
以上都是个人建议,谢谢
- S笔记
-
C语言是嵌入式最重要的基础知识,主要把C语言学好,但是掌握了它并不代表你的基础已经很好了,嵌入式学习相关的入门基础主要是这些:
一是程序设计的基础,例如:基本的编程语言基础,至少对数据类型、程序的结构及流程控制等最基本的内容要相当清楚,所以建议恶补一下C语言,推荐谭浩强的C语言程序设计,好好看一下,呵呵!另外有不少同学都问到数据结构的基础,我一直认为数据结构和算法的学习是帮助形成程序设计逻辑思维的很好训练方式,对于程序员的长期专业素养的提高一定有好处,所以建议即使已经在嵌入式行业中工作之后也应该多补充一些相关的知识。许多在学校没有学过数据结构的同学往往认为这部分非常枯燥、难学。而实际上如果你能明白研究计算机存储和数据组织方式的意义,就一定能够充分体会到数据结构的价值和魅力。一旦兴趣有了,一切就会迎刃而解,呵呵!
二是操作系统工作原理,这部分往往是非计算机专业的同学在学校时没有接触过的。而由于嵌入式软件设计相关的多任务环境、模块间的同步与通信协同、驱动设计等往往都需要有对操作系统工作机制的了解和掌握作为基础,因此建议没有系统学习过的同学,找一本相关的操作系统工作原理书籍认真看一下(不用特厚、特专业、特内核的,先以普及知识为主,呵呵!)。
三是基本的硬件基础,由于嵌入式Linux开发往往是ARM+Linux路线,所以为了能够在后续学习过程中很好地掌握主流嵌入式微处理器的结构与原理(例如:ARM9),就需要对硬件工作原理有初步的了解和掌握,建议看一下诸如计算机组成原理、体系结构等相关的专业书籍。
要深入学习你可以尝试以下路线:
(1) C语言是所有编程语言中的强者,单片机、DSP、类似ARM的种种芯片的编程都可以用C语言搞定),因此必须非常熟练的掌握。
推荐书籍:《The C Programming Language》 这本经典的教材是老外写的,也有中译版本。
(2) 操作系统原理,是必需的,如果你是计算机专业毕业那也就无所谓了,如果是非计算机专业的就必须找一本比较浅显的计算机原理书籍看一看,把啥叫“进程”“线程”“系统调度”等等基本问题搞清楚。
(3)Linux操作系统就是用C语言编写的,所以你也应该先学习下Linux方面的编程,只有你会应用了,才能近一步去了解其内核的精髓。
推荐书籍:《UNIX环境高级编程》(第2版)
(4) 了解ARM的架构,原理,以及其汇编指令,我们在嵌入式开发中,一般很少去写汇编,但是最起码的要求是能够看懂arm汇编。
(5) 系统移植的时候,就需要你从最下层的bootloader开始,然后内核移植,文件系统移植等。而移植这部分对硬件的依赖是非常大的,其配置步骤也相对复杂,也没有太多详细资料。
(6) 驱动开发
linux驱动程序设计既是个极富有挑战性的领域,又是一个博大精深的内容。
linux驱动程序设计本质是属于linux内核编程范畴的,因而是对linux内核和内核编程是有要求的。在学习前你要想了解linux内核的组成,因为每一部分要详细研究的话足够可以扩展成一本厚书。
以上只不过是大概的框架,在实际的开发中还会涉及很多东西,比如:交叉编译、makefile、shell脚本等等,所以说学习嵌入式的周期较长,门槛较高,自学的话更是需要较强的学习能力和专业功底。只要能坚持下来一定会取得成功!
至于后面的几个问题,我的回答是ARM,Linux和C语言,推荐你参考华清远见近期推出的2009-2010中国嵌入式开发从业人员调查报告,上面有很详细的解释和说明。
华清远见的嵌入式专业教材比较专业,也很出名,高校图书馆以及外面书店都有卖,你可以去网上搜一下,买本看看,华清远见的网站和技术论坛上面也有很多嵌入式学习资料和视频可以下载,而且更新的速度也很快,LZ没事可以去转转,相信对你会有帮助