嵌入式该怎么学习?
今天介绍一下嵌入式系统学习过程中的一些tips。Part1 嵌入式学习的几种线路图
嵌入式学习是一个循序渐进的过程,如果是希望向嵌入式软件方向发展的话,目前最常见的是嵌入式Linux方向,关注这个方向,我认为大概分3个阶段:1、嵌入式linux上层应用,包括QT的GUI开发
2、嵌入式linux系统开发
3、嵌入式linux驱动开发嵌入式目前主要面向的几个操作系统是,LINUX,WINCE、VxWorks等等。Linux是开源免费的,而且其源代码是开放的,更加适合我们学习嵌入式。
你可以尝试以下路线:
(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脚本等等,所以说学习嵌入式的周期较长,门槛较高,自学的话更是需要较强的学习能力和专业功底。只要能坚持下来一定会取得成功!
嵌入式是一个比较大的概念,有四个分支(主要):1、微控制器(单片机为例);2、微处理器(arm为例);3、dsp(数字信号处理);4、soc(片上系统);对于我们初学者而言,首先要学习单片机,以51为代表,等你学好51之后,可以深入学习更艰难的东西;
当然,并不是说你只需要学习单片机;要想学好单片机,你还得学c语言,得学汇编,得学一大堆应用软件;等到单片机能够掌握的不错的时候又需要自己进行原理图、PCB板的设计;还得掌握系统设计的工程管理什么的;比较多。。。。
单片机还是比较简单的,等到学好之后,开始学习arm的时候,你就接触的多了,什么操作系统啊、驱动编写啊、内核移植啊、应用程序的添加啊、上位机的编写啊,,那个就多了,,不过到时候你就全知道了。。。
ARM+LINUX路线,主攻嵌入式Linux操作系统及其上应用软件开发目标:
(1)掌握主流嵌入式微处理器的结构与原理(初步定为arm9)
(2)必须掌握一个嵌入式操作系统(初步定为uclinux或linux,版本待定)
(3)必须熟悉嵌入式软件开发流程并至少做一个嵌入式软件项目。
从事嵌入式软件开发的好处是:
(1)目前国内外这方面的人都很稀缺。这一领域入门门槛较高,所以非专业IT人员很难切 入这一领域;另一方面,是因为这一领域较新,目前发展太快,大多数人无条件接触。
(2)与企业计算等应用软件不同,嵌入式领域人才的工作强度通常低一些(但收入不低)。
(3)哪天若想创业,搞自已的产品,嵌入式不像应用软件那样容易被盗版。硬件设计一般 都是请其它公司给订做(这叫“贴牌”:OEM),都是通用的硬件,我们只管设计软件就变成自己的产品了。
(4)兴趣所在,这是最主要的。
从事嵌入式软件开发的缺点是:(1)入门起点较高,所用到的技术往往都有一定难度,若软硬件基础不好,特别是操作系统级软件功底不深,则可能不适于此行。
(2)这方面的企业数量要远少于企业计算类企业。
(3)有少数公司经常要硕士以上的人搞嵌入式,主要是基于嵌入式的难度。但大多数公司也并无此要求,只要有经验即可。
(4)平台依托强,换平台比较辛苦。
兴趣的由来:
1、成功观念不同,不虚度此生,就是我的成功。
2、喜欢思考,挑战逻辑思维。
3、喜欢C语言
4、喜欢底层开发,讨厌vb类开发工具(并不是说vb不好)。
5、发展前景好,适合创业,不想自己要死了的时候还是一个工程师。
方法步骤:
1、基础知识: 目的:能看懂硬件工作原理,但重点在嵌入式软件,特别是操作系统级软件,那将是我的优势。
科目:数字电路、计算机组成原理、嵌入式微处理器结构。
汇编语言、C/C++、编译原理、离散数学。
数据结构和算法、操作系统、软件工程、网络、数据库。
方法:虽科目众多,但都是较简单的基础,且大部分已掌握。不一定全学,可根据需要选修。
thec++programminglanguage(一直没时间读)、数据结构-C2。
2、学习linux:
目的:深入掌握linux系统。
方法:使用linux—〉linxu系统编程开发—〉驱动开发和分析linux内核。先看深, 那主讲原理。看几遍后,看情景分析,对照深看,两本交叉,深是纲,情是目。剖析则是0.11版,适合学习。最后深入代码。
主攻书籍:linux内核完全剖析、unix环境高级编程、深入理解linux内核、情景分析和源代。
3、学习嵌入式linux:
目的:掌握嵌入式处理器其及系统.
方法:(1)嵌入式微处理器结构与应用:直接arm原理及汇编即可,不要重复x86。
(2)嵌入式操作系统类:ucOS/II简单,开源,可供入门。而后深入研究uClinux。
(3)必须有块开发板(arm9以上),有条件可参加培训(进步快,能认识些朋友)
主攻书籍:毛德操的《嵌入式系统》及其他arm9手册与arm汇编指令等。
4、深入学习:
A、数字图像压缩技术:主要是应掌握MPEG、mp3等编解码算法和技术。
B、通信协议及编程技术:TCP/IP协议、802.11,Bluetooth,GPRS、GSM、CDM A等。
C、网络与信息安全技术:如加密技术,数字证书CA等。
D、DSP技术:DigitalSignalProcess,DSP处理器通过硬件实现数字信号处理算 法。
说明:太多细节未说明,可根据实际情况调整。重点在于1、3,不必完全按照顺序作。对于学习c++,理由是c++不只是一种语言,一种工具,她还是一种艺术,一种文化,一种哲学理念、但不是拿来炫耀得东西。对于linux内核,学习编程,读一些优秀代码也是有必要的。
注意: 要学会举一反多,有强大的基础,很多东西简单看看就能会。想成为合格的程序员,前提是必须熟练至少一种编程语言,并具有良好的逻辑思维。一定要理论结合实践。
不要一味钻研技术,虽然挤出时间是很难做到的,但还是要留点余地去完善其他的爱好,比如宇宙,素描、机械、管理,心理学、游戏、科幻电影。还有一些不愿意做但必须要做的!
技术是通过编程编程在编程编出来的。永远不要梦想一步登天,不要做浮躁的人,不要觉得路途漫上。而是要编程编程在编程,完了在编程,在编程!等机会来了在创业(不要相信有奇迹发生,盲目创业很难成功,即便成功了发展空间也不一定很大)。
嵌入式书籍推荐:
Linux基础 1、《Linux与UnixShell编程指南》
C语言基础
1、《CPrimerPlus,5thEdition》【美】StephenPrata着
2、《TheCProgrammingLanguage,2ndEdition》【美】BrianW.KernighanDav
idM.Rithie(K&R)着
3、《AdvancedProgrammingintheUNIXEnvironment,2ndEdition》(APUE)
4、《嵌入式Linux应用程序开发详解》 Linux内核
1、《深入理解Linux内核》(第三版) 2、《Linux内核源代码情景分析》毛德操胡希明著 研发方向 1、《UNIXNetworkProgramming》(UNP) 2、《TCP/IP详解》 3、《Linux内核编程》 4、《Linux设备驱动开发》(LDD) 5、《Linux高级程序设计》杨宗德著 硬件基础 1、《ARM体系结构与编程》杜春雷着 2、S3C2410Datasheet
英语基础
1、《计算机与通信专业英语》
系统教程
1、《嵌入式系统――体系结构、编程与设计》 2、《嵌入式系统――采用公开源代码和StrongARM/Xscale处理器》毛德操胡希明 著 3、《BuildingEmbeddedLinuxSystems》
4、《嵌入式ARM系统原理与实例开发》杨宗德著
理论基础 1、《算法导论》 2、《数据结构(C语言版)》 3、《计算机组织与体系结构?性能分析》 4、《深入理解计算机系统》【美】RandalE.Bryant DavidO''Hallaron着 5、《操作系统:精髓与设计原理》 6、《编译原理》 7、《数据通信与计算机网络》 8、《数据压缩原理与应用》
C语言书籍推荐
1.TheCprogramminglanguage《C程序设计语言》
2.PointersonC《C和指针》
3.Ctrapsandpitfalls《C陷阱与缺陷》
4.ExpertCLanuage《专家C编程》
5.WritingCleanCode-----MicrosoftTechiniquesforDevelopingBug-freeCPrograms《编程精粹--Microsoft编写优质无错C程序秘诀》
6.ProgrammingEmbeddedSystemsinCandC++《嵌入式系统编程》
7.《C语言嵌入式系统编程**》
8.《高质量C++/C编程指南》林锐
尽可能多的编码,要学好C,不能只注重C本身。算法,架构方式等都很重要。 这里很多书其实是推荐而已,不必太在意,关键还是基础,才是重中之重!!!
Part2 嵌入式系统项目失败的7个隐形杀手
对工程师而言,没有什么事情比投入大量心力、汗水和泪水到一个项目,但最终却只得到一个失败的结果这件事,来得令人沮丧。对那些参与项目开发的人来说,失败确实可以增长其洞察力和经验,但所时间和心力的损失却也是毁灭性的一击。有许多理由可以让嵌入式系统的项目最终以失败收场,但有7个隐形杀手会让一个项目在不知不觉中慢慢地且不声不响地走上失败之路,任何项目的领导者或其中的成员对它们千万不可等闲视之。
#7 – 成员流动(Team turnover)
每家公司都会经历员工或承包商的流动,但关键人物太过于经常变动,可能是一个项目注定失败的领先指标。有很多原因可以说明为什么人员流动对项目会有不利的影响。第一,它会造成其他团队成员心理上的影响,而降低生产力。其次,失去关键人物可能会导致历史性和重要的信息会永远遗失,这会放缓发展的脚步。最后,替换队员需要对新的成员进行训练,并跟上团队的脚步。这是一个会使人分心的工作,会让其他成员放下手边的开发工作来教导新的成员,结果会导致开发成本的增加和延长交付时间。
#6 – 走走停停症候群
孩子被教导说,“不要喊狼来了。”这话是一个警告,不要误发假警报。这种警告有一种“进行!停止!进行!”的周期,在项目中很容易被忽略。一位经理、客户,或其他一些单位猛烈地催促他的团队,声称该项目要在某一日之前完成。开发人员因此周末加班,投注更多的心力。然后,就像这股来得很快的催促之力,突然之间却又嘎然而止。1个月后,它又再次告急。“快点,我们必须在X之前出货!” 然后同样的事情又再次发生。
项目这种走走停停一再重复的紧迫性将会对开发团队造成心理层面的影响。开发人员不再相信任何的迫切性。事实上,他们会有一种心态,开始觉得这个项目并不是一个需要认真对待的项目,它很快将再次停止,那么为什么还要投入任何的努力?
所以,不要对项目喊狼来了!
#5 - 完美主义者的态度
许多工程师都有一种完美主义者的态度。这种态度所带来的问题是,不可能开发出完美的系统,撰写出完美的代码,或者在最适当的时间推出产品。完美主义是镜花水月,如果完美主义是公司文化的一部分,它将会是产品可能会不断修正,直到公司破产倒闭的标志。
正确的心态不是完美,而是成功。为了可以成功地推出产品,什么是最低的成功标准?设下成功的标准,并在一旦达成后,立即推出产品。之后可以用启动加载器(boot-loader)来添加功能并解决那些小错误。
#4 - 加速的时间表
要迅速地开发出一个嵌入式系统,事实上,设计团队事实上要放慢脚步,这似乎违反直觉。但依据加速的时间表(accelerated timetable)工作,会因为压力和,更重要的是,有比较高的可能性会产生错误,而使得效率降低。错误将直接影响小缺陷的数量,而这些小缺陷随后又会增加测试时间和返工的时间。
另一个问题是,当开发人员都抢着和努力满足加速的时间表时,他们会图省事而走快捷方式。比如,代码没有批注及说明。像是架构图和流程图等设计文件也付之阙如。相反地,设计只留存在程序设人员的心中。放慢脚步,把事情做正确,会更快地得到最终的解决方案。
#3 – 不良的结构化软件
嵌入式软件是嵌入式系统的血液;没有了它,产品就无法运作。不良的结构化软件是一个很明确的失败征兆。嵌入式系统的系统结构需要具有灵活性,以便未来成长之用。它要有用于测试、除错和进行日志记录的空间。一个架构不佳的系统将会使得施作不良,而导致该软件错误百出而难以管理,从而注定要将它的岁月花在除错上,直至项目最终死亡为止。
#2 - 本末倒置
开发一个新产品是一种会令人兴奋的奋斗过程。其中有很多事情要做,而公司通常是急着想把产品从概念化成可以生产的产品。这种匆促的举动是极其危险的,尤其是当生产决定浮现时。
当产品的机械设计或外观和感觉被拿来推动其电气需求时,这就是一个很好的例子。在工作的电气和软件原型被验证之前,生产工具就准备好要生产了。在这种情况下,似乎总是有电路板没有检查,需要进行调整的问题。对那些匆匆忙忙、且太快就试着要把所有的事情同时拉在一起的项目,最终结果总是由于修改而落入花更长时间和更多成本的结果。
#1 - 范围潜变
每个项目都有范围潜变(scope creep),但范围潜变的程度可以是该项目是否会成功或失败的决定性因素。范围潜变最危险的一个领域是,它是暗中为害的。某天在电路板上增加了一个简单的传感器,几个月后再加一些上去,这些看起来完全无害。但他们可能是致命的。
范围潜变的最大问题是,变化通常是微小的。乍看之下,改变看起来只是短短几天的工作。但是,每次加一点点,系统的复杂性也随之增加了。复杂的系统需要更多的测试,可能也需要更多的除错。随着时间的发展,范围潜变可以将系统改变到使原来的软件体系结构和设计变得过时,或甚至变成是不正确的解决方案!最终的结果是使一个项目变得远远地超出其预算范围,实际进度落在交货日期之后,此一项目很少或几乎没有结束的迹象。
结论
在开发新的嵌入式系统,并没有确保其一定成功的保证,有很多因素会影响到项目的成功或失败。这是笔者所看到的7大项目隐形杀手。你可以从这些细微的线索判断出你的项目是否正走在一条缓慢且迈向失败的发展之路上。任何项目的领导者或其中的成员对它们千万不可等闲视之。http://www.makeru.com.cn/course/details/2961?s=69821
页:
[1]