第一篇:嵌入式学习路线
语言基础 1.C 与 C++ A.《c reference》 B.《c++ 编程思想》 C.《effective c++》 D.《more effective c++》 E.《effective c++ stl》 2.软件设计 A.《UML 2.0 Reference》 B.《设计模式-可复用的面向对象软件的基础》 C.《重构》 D.《修改代码的艺术》 E.《面向模式的软件体系结构》卷 1,卷 2,卷 3,卷 4,卷 5 3.Linux 开发基础 A.《鸟哥的 linux 私房菜》 B.《GNU make reference》 C.《Shell 编程》 D.《unix 高级环境编程》 E.《linux kernel development》 F.《深入理解 Linux 内核》 G.《Linux 驱动程序开发》 H.《Unix 网络编程》 I.《Linux 进程间通信》 4.嵌入式开发基础 A.《ARM 体系结构》 B.《ARM 程序分析与设计》 C.《ARM 嵌入式系统基础教材》周立功 D.《嵌入式操作系统μC/OS》 E.《嵌入式 Linux 基础教材》 F.《嵌入式系统设计》 G.《嵌入式硬件设计》 H.《Qt4 图形设计与嵌入式系统开发》 I.《嵌入式系统中的实时概念》 J.《实时设计模式》 5.专业选看 A.FPGA 设计 B.《高性能嵌入式计算》 C.数字图像处理,视频编解码基础 MPEG4,H.264,AVS D.Android,iphone,symbian 开发。
第二篇:嵌入式学习路线建议
嵌入式学习是一个循序渐进的过程,如果是希望向嵌入式软件方向发展的话,目前最常见的是嵌入式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脚本等等,所以说学习嵌入式的周期较长,门槛较高,自学的话更是需要较强的学习能力和专业功底。只要能坚持下来一定会取得成功!
其实LZ可以到一些嵌入式培训机构的网站上看一下他们的课程设置,就会在脑子里有个清晰的思路,比如华清远见的官方网站,上面的嵌入式内容很丰富,嵌入式方面的信息更新也很迅速,没事可以去转转。
嵌入式是一个比较大的概念,他有四个分支,至少我只知道这四个。
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
C是一种能发挥思维极限的语言。关于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-freeCProgr ams
《编程精粹--Microsoft编写优质无错C程序秘诀》
6.ProgrammingEmbeddedSystemsinCandC++《嵌入式系统编程》
7.《C语言嵌入式系统编程**》
8.《高质量C++/C编程指南》林锐
尽可能多的编码,要学好C,不能只注重C本身。算法,架构方式等都很重要。
这里很多书其实是推荐而已,不必太在意,关键还是基础,才是重中之重!!
第三篇:嵌入式培训 嵌入式Linux学习路线
嵌入式培训 嵌入式Linux学习路线_粤嵌教育
有需求就有市场,伴随着嵌入式的应用领域越来越宽广,嵌入式工程师的缺口与日俱增,嵌入式Linux培训也迎来了良好的发展环境和机遇。嵌入式Linux凭借其系统发展的成熟度、市场应用的高份额也受到更多工程师朋友的青睐,越来越多的企业和研发机构都转向嵌入式Linux的开发和研究,众所周知,嵌入式开发在IT开发行业中一直是比较火热的职业,特别是智能硬件的发展。智能硬件从软件到硬件,每一阶段都需要开发人员拥有超强的开发能力和丰富的经验。而对于智能硬件产品来说,他们的开发都是建立在庞大的嵌入式系统生态之上的。想学习嵌入式要要怎么做呢?来看看粤嵌教育分享的嵌入式Linux学习路线:
1、基础知识: C/C++编程、数据结构和算法、操作系统、软件工程、网络、数据库等。虽科目众多,但都是较简单的基础,且大部分已掌握。
2、深入掌握Linux系统:使用Linux、Linux系统编程开发、驱动开发、分析Linux内核。可以按这样的学习顺序,由浅及深,不断的理解掌握核心内容。
3、学习嵌入式Linux: 主要是嵌入式Linux开发流程,嵌入式Linux应用开发、ARM体系架构等。建议最好就是自己买一块开发板研究,条件允许的话还是报粤嵌培训班吧,有专业人士带进步会比较快,还能认识很多行业的朋友。
4、深入学习:深入学习ARM、Linux内核驱动、Android移植驱动等重点难点内容,学习传感器开发、ZigBee开发、蓝牙开发、RFID等目前比较流行的嵌入式开发技术。
目前嵌入式就业比较热门的领域有物联网、智能家居、智能医疗、智能汽车电子、智能硬件产品开发等等,可以说嵌入式Linux无处不在。想系统学习嵌入式开发,到粤嵌进行嵌入式Linux培训,教学课程涵盖了嵌入式基础、项目分析与立项、Linux核心操作与算法、嵌入式Linux系统编程开发、嵌入式GUI系统编程开发、ARM开发、嵌入式底层驱动开发、项目优化与验收再到就业与创业指导。
第四篇:嵌入式学习的正确步骤,嵌入式 嵌入式学习路线
www.xiexiebang.com 达内教育—中国IT培训领导品牌
嵌入式学习的正确步骤,嵌入式 嵌入式学习路线
嵌入式门槛虽然较高,但也跟其他事物一样,并不是牢不可破。只要我们用心去对待,冬雪终将化去,春风定会吹来。
具体步骤如下:
1、《C语言》第二版 谭浩强;《C程序设计语言》第二版 徐宝文译 机械工业出版社
你能区分开指针数组和数组指针吗?你知道函数指针吗?
你能区分开定义一个变量时系统给它分配的空间与用malloc()函数给一个变量分配的空间有什么不一样吗?
2、《数据结构》C语言版 黄国愉、叶乃青编 清华大学出版社
你能合上书本,用C语言实现书中的单链表、双链表数据结构吗?
3、《实用C++程序设计》第二板 中国电力出版社 Steve_Oualline著
此阶段主要是学习其面向对象的编程思想,加深对C语言和数据结构的理解。
4、学习单片机,最好能找个前辈带一带。
你能用51单片机做出一样实际的东西吗?即使它再简单!
要注意加深对中断的理解。
5、学习ARM单片机。
(1)、细读《ARM微控制器基础与实战》周立工编写(注:即使你不用书中的开发板)
(2)、细读相关芯片的原版英文文档。如:arm920TE.pdf S3C2410_1.2.pdf
6、学习uCOS!操作系统。
(1)、细读《嵌入式实时操作系统uC/OS-!》第二版 召贝贝译
你能把uCOS!移植到自己的平台上吗?
(2)、能编写在uCOS!操作系统环境下运行的针对具体硬件的驱动程序
www.xiexiebang.com 达内教育—中国IT培训领导品牌
7、熟悉Linux环境,学习Linux环境编程,学习交叉编程
(1)、细读《linux命令大全.pdf》
(2)、细读《GNU Make 使用手册(中译版).pdf》
(3)、学习创建交叉编程环境.8、学习Linux操作系统。
(1)、《UNIX环境高级编程》
(2)、可以到一些好的网站下载一些比较好的书籍
(3)、细读《linux内核完全注释》
(4)、细读《understanding the linux kernel 2》
(5)、利用源代码阅读利器工具“Source Insight”进行真正的linux内核原码刨析
(6)、最后进行内核移植,并能编写在linux操作系统环境下运行的针对具体硬件的驱动程序
9、学习Linux设备驱动编写。可参考《Linux设备驱动程序》
10、复习C++,学习用QT进行图形界面编程
(1)、细读《QT编程宝典》
(2)、学会通过查看QT电子文档进行QT GUI实地编程
(3)、学习交叉编程.(其实就是把命令qmake变为tmake)
11、当然,你也可学习一下PCB的制作和设计一个自己的CPU(即软壳)
在嵌入式软件方面最重要的课程包括:
(1)嵌入式微处理器结构与应用:
这是一门嵌入式硬件基础课程,我们说过,嵌入式是软硬件结合的技术,搞嵌入式软件的人应对ARM处理器工作原理和接口技术有充分了解,包括ARM的汇编指令系统。若不了解处理器原理,怎么能控制硬件工作,怎么能写出节省内存又运行高速的最优代码(嵌入式软件设计特别讲究时空效率),怎么能写出驱动程序(驱动程序都是与硬件打交道的)?很多公司招聘嵌入式软件人员时都要求熟悉 www.xiexiebang.com 达内教育—中国IT培训领导品牌
ARM处理器,将来若同学到公司中从事嵌入式软件开发,公司都会给你一本该设备的硬件规格说明书(xxx Specification),你必须能看懂其中的内存分布和端口使用等最基本的说明(就像x86汇编一样),否则怎么设计软件。有些同学觉得嵌入式处理 器课程较枯燥,这主要是硬件课程都较抽象的原因。还有同学对ARM汇编不感兴趣,以为嵌入式开发用C语言就足够了。其实不应仅是将汇编语言当成一个程序设计语言,学汇编主要是为了掌握处理器工作原理的。一个不熟悉汇编语言的人,怎么能在该处理器写出最优的C语言代码。在嵌入式开发的一些关键部分,有时还必须写汇编,如Bootloader等(可能还包括BSP)。特别是在对速度有极高要求的场合(如DSP处理器的高速图像采集和图像解压缩),目前还会用到汇编写程序的,尽管用到的机会相对C要小得多。当你在一个嵌入式公司工作时,在查看描述原理的手册时,可能很多都是用汇编描述的,这是因为很多硬件设计人员只会写或者喜欢用汇编描述,此时你就必须看懂汇编程序,否则软硬件人员可能就无法交流。很多嵌入式职位招聘时都要求熟悉汇编。
[小知识] 目前嵌入式处理器常见的有ARM、PowerPC、MIPS、Motorola 68K、ColdFire(冷火)等,但ARM占据了绝对主流(有资料说手机中几乎90%都是ARM处理器)。ARM是一个只卖知识产权的公司,目前获得购买了ARM CPU核授权许可的大公司很多,包括Intel、Samsung、Amstel、Motorola、Philip等,他们都在ARM CPU核的基础上进行了一些外围扩展,形成自己的处理器(如Samsung S3C2410,Motorola i.MXL9328等处理器都是采用ARM 9内核,指令一级是相同的)。而众多中小公司又购买了这些处理器,设计了各种各样的开发板,如华恒等国内很多著名嵌入式公司都生产基于SamsungS3C2410的开发板,供最终用户使用或供教学实验。在ARM这个食物链上,ARM公司是大鱼,Intel、Samsung等公司是小鱼,而华恒等则是虾米,最终用户(我们这些要采购嵌入式开发板的)则是喂虾米的。Intel早期生产的是低端ARM(Strong ARM,相当于ARM 7),现在转向主要生产高端ARM(即Intel Xscale处理器,属于ARMv5家族,主要用在高端PDA上,如HP和DELL生产的PDA都采用Intel Xscale,价格较高)。目前应用最多的是ARM 7和ARM 9两类处理器。ARM 7较便宜,可跑uclinux(是一个不支持高级内存管理功能的嵌入式Linux系统统)、Vxworks、uc/os II等实时操作系统,但因处理器不带内存管理单元MMU(无内存分页和地址映射机制,所以不能使用虚拟内存),所以不能跑Windows CE,另外通用Linux中的某些内存管理功能也不能用在ARM 7上。ARM 9大都是一个带MMU功能的高端处理器,可跑WinCE或通用Linux的大多数功能。ARM7和ARM9的区别是在与体系结构上,前者是冯?诺伊曼结 构,后者是哈佛结构——指令和数据总线是分开的。以上是我的一点了解,可能有不对的地方。我们学院有十几套ARM 7开发系统(采用Samsung S3C44b0x开发板,主要用于嵌入式处理器结构、实时操作系统等课程实验用),ARM 9的系统好象也已经到了(采用的芯片我不知道也没去问),还有以前的十几套MPC860开发板(听说价格都很贵,很容易损坏),同学应爱护使用和珍惜这样 的实验机会。
(2)嵌入式操作系统类课程
www.xiexiebang.com 达内教育—中国IT培训领导品牌
除了WinCE的实时性稍差外,大多数嵌入式操作系统的实时性都很强,所以也可称为实时操作系统Real Time Operating System.从事嵌入式的人至少须掌握一个嵌入式操作系统,这在嵌入式的所有技术中是最为关键的了。目前最重要的RTOS主要包括:
第一类、传统的经典RTOS:最主要的便是Vxworks操作系统,以及其Tornado开发平台。Vxworks因出现稍早,实时性很强(据说可在1ms内响应外部事件请求),并且内核可极微(据说最小可8K),可靠性较高等,所以在北美,Vxworks占据了嵌入式系统的多半 疆山。特别是在通信设备等实时性要求较高的系统中,几乎非Vxworks莫属。Vxworks的很多概念和技术都和Linux很类似,主要是C语言开发。像Bell-alcatel、Lucent、华为等通信企业在开发产品时,Vxworks用得很多。但Vxworks因价格很高,所以一些小公司或小产品中往往用不 起。目前很多公司都在往嵌入式Linux转(听说华为目前正在这样转)。但无论如何,Vxworks在一段长时间内仍是不可动摇的。与Vxworks类似 的稍有名的实时操作系统还有pSOS、QNX、Nucleus等RTOS。
第二类、嵌入式Linux操作系统:Linux的前途除作为服务器操作系统外,最成功的便是在嵌入式领域的应用,原因当然是免费、开源、支持软件多、呼拥者众,这样嵌入式产品成本会低。Linux本身不是一个为嵌入式设计的操作系统,不是微内核的,并且实时性不强。
目前应用在嵌入式领域的Linux系统主要有两种:
一种是专为嵌入式设计的已被裁减过的Linux系统,最常用的是uClinux(不带MMU功能),目前占较大应用份额,可在ARM7上跑;另一种是跑在 ARM 9上的,一般是将Linux2.4.18内核移植在其上,可使用更多的Linux功能(当然uClinux更可跑在ARM 9上)。很多人预测,嵌入式Linux预计将占嵌入式操作系统的50%以上份额,非常重要。缺点是熟悉Linux的人太少,开发难度稍大。另外,目前我们 能发现很多教材和很多大学都以ucOS/II为教学用实时操作系统,这主要是由于ucOS/II较简单,且开源,非常适合入门者学习实时操作系统原理,但 由于ucOS/II功能有限,实用用得较少。况且熟悉了Linux开发,不仅在嵌入式领域有用,对开发Linux应用软件,对加深操作系统的认识也有帮 助,可谓一举多得。据我所知,目前Intel、Philip都在大搞ARM+LINUX的嵌入式开发,Fujitum则是在自己的处理器上大搞Linux 开发。目前在嵌入式Linux领域,以下几个方面的人特别难找,一是能将Linux移植到某个新型号的开发版上;二是能写Linux驱动程序的人;三是熟悉Linux内核裁减和优化的人。不过LINUX有一个硬伤,就是没有WINDOWS那样的友好方便美观的交互界面,不然微软帝国早就守不住了。
第三类、Windows CE嵌入式操作系统:Microsoft也看准了嵌入式的巨大市场,MS永远是最厉害的,WinCE出来只有几年时间,但目前已占据了很大市场份额,特别是在PDA、手机、显示仪表等界面要求较高或者要求快速开发的场合,WinCE目前已很流行(据说有一家卖工控机的公司板子卖得太好,以至来不及为客户裁减WinCE)。WinCE目前主要为4.2版(.NET),开发平台主要为WinCE www.xiexiebang.com 达内教育—中国IT培训领导品牌
Platform Builder,有时也用EVC环境开发一些较上层的应用,由于WinCE开发都是大家熟悉的VC++环境,所以我院学过Windows程序设计课程的同 学都不会有多大难度,这也是WinCE容易被人们接受的原因,开发环境方便快速,微软的强大技术支持,WinCE开发难度远低于嵌入式Linux。对于急于完成,不想拿嵌入式Linux冒险的开发场合,WinCE是最合适了(找嵌入式Linux的人可没那么好找的),毕竟公司不能像学生学习那样试试看,保证开发成功更重要。根据不同的侧重点,WinCE还有两个特殊版本,一个是MS PocketPC操作系统专用于PDA上(掌上电脑),另一个是MS SmartPhone操作系统用于智能手机上(带PDA功能的手机),两者也都属于WinCE平台。在PDA和手机市场上,除WinCE外,著名的PDA 嵌入式操作系统还有Palm OS(因出现很早,很有名)、Symbian等,但在WinCE的强劲冲击下,Palm和Symbian来日还能有多长?同学学过VC++后再学 WinCE,非常方便自然,通过学习WinCE同样也可了解嵌入式软件的一般开发过程,对Linux有惧怕心理的同学也很合适。很显然,嵌入式Linux 永远不可能替代WinCE,而且将来谁占份额大还很难讲,毕竟很多人更愿意接受MS的平台,就像各国政府都在大力推LINUX已好长时间,但你能看到几个 在PC机上真正使用LINUX的用户?据我观察,目前在嵌入式平台上,LINUX是叫得最响,但还是WinCE实际用得更多.嵌入式LINUX可能更多地是一些有长远产品计划的公司,为降低成本而进行长远考虑.WinCE和多媒体(如MPEG技术)是微软亚洲工程院目前做得较多的项目领域之 一,现在社会很需要精通WinCE的人。现在有WINCE的智能手机,金山词霸、WORD、EXCEL、REGEDIT等居然都有 smartphone版的,PC上的MP3、DOC等居然在download时都可被自动转换成smartphone格式,很爽的。完全可用 Windows CE自己开发一些需要的程序download到自己的手机上。现在市面销售PDA智能手机火爆,MS总是财源滚滚。
总结关于嵌入式操作系统类课程,若你觉得自己功底较深且能钻研下去,则可去学嵌入式Linux;若你觉得自己VC++功底较好且想短平快地学嵌入式开发,自学WINCE是非常好的选择。
(3)嵌入式开发的相关领域
搞嵌入式若能熟悉嵌入式应用的一些主要领域,这样的人更受企业欢迎。主要的相关领域包括:
A、数字图像压缩技术:这是嵌入式最重要最热门的应用领域之一,主要是应掌握MPEG编解码算法和技术,如DVD、MP3、PDA、高精电视、机顶盒等都涉及MPEG高速解码问题。
B、通信协议及编程技术:这包括传统的TCP/IP协议和热门的无线通信协议。首先,大多数嵌入式设备都要连入局域网或Internet,所以首先应掌握 TCP/IP协议及其编程,这是需首要掌握的基本技术;其次,无线通信是目前的大趋势,所以掌握无线通信协议及编程也是是很重要的。无线通信协议包括无线 局域网通信协议802.11系列,Bluetooth,以及移动通信(如GPRS、GSM、CDMA等)。
www.xiexiebang.com 达内教育—中国IT培训领导品牌
C、网络与信息安全技术:如加密技术,数字证书CA,以及各种网络安全设备,包括硬件防火墙,入侵检测IDS,还有防毒墙,IPS等,中国在这方面还是没有自己优势的,我们陈院长好象正在往这方面发展.D、DSP技术:DSP是Digital Signal Process数字信号处理的意思,DSP处理器通过硬件实现数字信号处理算法,如高速数据采集、压缩、解压缩、通信等。数字信号处理是电子、通信等硬件 专业的课程,对于搞软件的人若能了解一下最好。目前DSP人才较缺。如果有信号与系统、数字信号处理等课程基础,对于学习MPEG编解码原理会有很大帮助。
(4)嵌入式开发的相关硬件基础
对于软件工程专业的学生,从事嵌入式软件开发,像数字电路、计算机组成原理、嵌入式微处理器结构等硬件课程是较重要的。另外,汇编语言、C/C++ 数据结构算法、特别是操作系统等软件基础课也是十分重要的。我们的主要目地是能看懂硬件工作原理,但重点应是在嵌入式软件,特别操作系统级软件,那将是我们的优势。我们的研究生里有些是学电子、通信类专业过来的,有较好的模拟电路和单片机基础,学嵌入式非常合适。嵌入式本身就是从单片机发展过来的,只是单片机不带OS,而现在很多嵌入式应用越来越复杂,以至不得不引入嵌入式操作系统。另外,为追求更高速的信号处理速度,现在在一些速度要求较高场合,有不少公司是将一些DSP算法,如MPEG压缩解压缩算法等用硬件来实现,这就涉及到HDL数字电路设计技术及其 FPGA/IP核实现技术,这方面的人目前市场上也很缺。
第五篇:JAVA学习路线
1.JAVA学习路线
1.1 基础语法及JAVA原理
基础语法和JAVA原理是地基,地基不牢靠,犹如沙地上建摩天大厦,是相当危险的。学习JAVA也是如此,必须要有扎实的基础,你才能在J2EE、J2ME领域游刃有余。参加SCJP(SUN公司认证的JAVA程序员)考试不失为一个好方法,原因之一是为了对得起你交的1200大洋考试费,你会更努力学习,原因之二是SCJP考试能够让你把基础打得很牢靠,它要求你跟JDK一样熟悉JAVA基础知识;但是你千万不要认为考过了SCJP就有多了不起,就能够获得软件公司的青睐,就能够获取高薪,这样的想法也是很危险的。获得“真正”的SCJP只能证明你的基础还过得去,但离实际开发还有很长的一段路要走。
1.2 OO思想的领悟
掌握了基础语法和JAVA程序运行原理后,我们就可以用JAVA语言实现面向对象的思想了。面向对象,是一种方法学;是独立于语言之外的编程思想;是CBD基于组件开发的基础;属于强势技术之一。当以后因工作需要转到别的面向对象语言的时候,你会感到特别的熟悉亲切,学起来像喝凉水这么简单。
使用面向对象的思想进行开发的基本过程是:
●调查收集需求。
●建立用例模型。
●从用例模型中识别分析类及类与类之间的静态动态关系,从而建立分析模型。
●细化分析模型到设计模型。
●用具体的技术去实现。
●测试、部署、总结。
1.3 基本API的学习
进行软件开发的时候,并不是什么功能都需要我们去实现,也就是经典名言所说的“不需要重新发明轮子”。我们可以利用现成的类、组件、框架来搭建我们的应用,如SUN公司编写好了众多类实现一些底层功能,以及我们下载过来的JAR文件中包含的类,我们可以调用类中的方法来完成某些功能或继承它。那么这些类中究竟提供了哪些方法给我们使用?方法的参数个数及类型是?类的构造器需不需要参数?总不可能SUN公司的工程师打国际长途甚至飘洋过海来告诉你他编写的类该如何使用吧。他们只能提供文档给我们查看,JAVA DOC文档(参考文献4.4)就是这样的文档,它可以说是程序员与程序员交流的文档。
基本API指的是实现了一些底层功能的类,通用性较强的API,如字符串处理/输入输
出等等。我们又把它成为类库。熟悉API的方法一是多查JAVA DOC文档(参考文献4.4),二是使用JBuilder/Eclipse等IDE的代码提示功能。
1.4 特定API的学习
JAVA介入的领域很广泛,不同的领域有不同的API,没有人熟悉所有的API,对一般人而言只是熟悉工作中要用到的API。如果你做界面开发,那么你需要学习Swing/AWT/SWT等API;如果你进行网络游戏开发,你需要深入了解网络API/多媒体API/2D3D等;如果你做WEB开发,就需要熟悉Servlet等API啦。总之,需要根据工作的需要或你的兴趣发展方向去选择学习特定的API。
1.5 开发工具的用法
在学习基础语法与基本的面向对象概念时,从锻炼语言熟练程度的角度考虑,我们推荐使用的工具是Editplus/JCreator+JDK,这时候不要急于上手JBuilder/Eclipse等集成开发环境,以免过于关注IDE的强大功能而分散对JAVA技术本身的注意力。过了这一阶段你就可以开始熟悉IDE了。
程序员日常工作包括很多活动,编辑、编译及构建、调试、单元测试、版本控制、维持模型与代码同步、文档的更新等等,几乎每一项活动都有专门的工具,如果独立使用这些工具的话,你将会很痛苦,你需要在堆满工具的任务栏上不断的切换,效率很低下,也很容易出错。在JBuilder、Eclipse等IDE中已经自动集成编辑器、编译器、调试器、单元测试工具JUnit、自动构建工具ANT、版本控制工具CVS、DOC文档生成与更新等等,甚至可以把UML建模工具也集成进去,又提供了丰富的向导帮助生成框架代码,让我们的开发变得更轻松。应该说IDE发展的趋势就是集成软件开发中要用到的几乎所有工具。
从开发效率的角度考虑,使用IDE是必经之路,也是从一个学生到一个职业程序员转变的里程碑。
JAVA开发使用的IDE主要有Eclipse、JBuilder、JDeveloper、NetBeans等几种;而Eclipse、JBuilder占有的市场份额是最大的。JBuilder在近几年来一直是JAVA集成开发环境中的霸主,它是由备受程序员尊敬的Borland公司开发,在硝烟弥漫的JAVA IDE大战中,以其快速的版本更新击败IBM的Visual Age for JAVA等而成就一番伟业。IBM在Visual Age for JAVA上已经无利可图之下,干脆将之贡献给开源社区,成为Eclipse的前身,真所谓“柳暗花明又一村”。浴火重生的Eclipse以其开放式的插件扩展机制、免费开源获得广大程序员(包括几乎所有的骨灰级程序员)的青睐,极具发展潜力。
2.学习要点
确立的学习路线之后,我们还需要总结一下JAVA的学习要点,这些要点在前文多多少少提到过,只是笔者觉得这些地方特别要注意才对它们进行汇总,不要嫌我婆婆妈妈啊。
2.1勤查API文档
当程序员编写好某些类,觉得很有成就感,想把它贡献给各位苦难的同行。这时候你要使用“javadoc”工具(包含在JDK中)生成标准的JAVA DOC文档,供同行使用。
J2SE/J2EE/J2ME的DOC文档是程序员与程序员交流的工具,几乎人手一份,除了菜鸟之外。J2SE DOC文档官方下载地址:。
对待DOC文档要像毛主席语录,早上起床念一遍,吃饭睡觉前念一遍。
当需要某项功能的时候,你应该先查相应的DOC文档看看有没有现成的实现,有的话就不必劳神费心了直接用就可以了,找不到的时候才考虑自己实现。使用步骤一般如下:
●找特定的包,包一般根据功能组织。
●找需要使用类,类命名规范的话我们由类的名字可猜出一二。
●选择构造器,大多数使用类的方式是创建对象。
●选择你需要的方法。
2.2 查书/google->写代码测试->查看源代码->请教别人
当我们遇到问题的时候该如何解决?
这时候不要急着问别人,太简单的问题,没经过思考的问题,别人会因此而瞧不起你。可以先找找书,到google中搜一下看看,绝大部分问题基本就解决了。而像“某些类/方法如何使用的问题”,DOC文档就是答案。对某些知识点有疑惑是,写代码测试一下,会给你留下深刻的印象。而有的问题,你可能需要直接看API的源代码验证你的想法。万不得已才去请教别人。
2.3学习开源软件的设计思想
JAVA领域有许多源代码开放的工具、组件、框架,JUnit、ANT、Tomcat、Struts、Spring、Jive论坛、PetStore宠物店等等多如牛毛。这些可是前辈给我们留下的瑰宝呀。入宝山而空手归,你心甘吗?对这些工具、框架进行分析,领会其中的设计思想,有朝一日说不定你也能写一个XXX框架什么的,风光一把。分析开源软件其实是你提高技术、提高实战能力的便捷方法。
2.4 规范的重要性
没有规矩,不成方圆。这里的规范有两层含义。第一层含义是技术规范,多到
http:///docs/codeconv/,中文的也有,啊,还要问我在哪,请参考3.2.2节。
2.5 不局限于JAVA
很不幸,很幸运,要学习的东西还有很多。不幸的是因为要学的东西太多且多变,没时间陪老婆家人或女朋友,导致身心疲惫,严重者甚至导致抑郁症。幸运的是别人要抢你饭碗绝非易事,他们或她们需要付出很多才能达成心愿。
JAVA不要孤立地去学习,需要综合学习数据结构、OOP、软件工程、UML、网络编程、数据库技术等知识。
软件工程的由来
据说上个世纪60年代的程序员都是天才,写程式就像写日记一样,吃过晚饭没事干随手就可以写几个出来玩,第二天还可以拿去卖钱。所以那时候程序员在大家眼中,跟那些搞美术,音乐的是一类的,被称为“艺术家”。
但事过境迁,就像任何人都不会嫌钱多一样,永远都不会有人嫌CPU快的。于是,随之而来的就是硬件的迅猛发展和越来越变态的软件。记得以前常去同学家拷游戏,通常几张软盘就可以搞定,而现在的游戏,两三张CD-ROM都算少的了。像如此庞大复杂的怪物,就算你是如何的天才,一个人肯定是搞不定的,否则,等你把程式写出来,人家Intel连奔腾N都开发出来了。既要开发大型的软件还要追求速度(这样才能赚钱),于是很自然地,合作的概念被提了出来。
在开始合作的初期,由于大家都习惯了当很有个性的“艺术家”,结果可想而知,一个是毕加索派的,而另一个是意大利印象派的,再加上一个画泼墨山水画的,要是像这样凑出来的东西都能不出问题的话,那么Bill早就转行了。所以,那时侯的大型软件,据说“蓝屏”比WINDOWS 98还多。
马克思告诉我们,万物都是从量变到质变的。随着问题的不断涌现,一些master们开始尝试去总结经验,并归纳了一些规范去指导软件的分析,设计,实现,测试,维护,人员交流协作,项目预算及时限控制等方方面面,这就是软件工程的前身。
软件工程到现在已发展了30多年,可以说是相当成熟的了。现在开发软件,据说都是一大帮人排排坐,按着一整套的规章制度来干活。于是,软件开发成了“工程”,程序员也就沦为“工人”了。
最初提出问题的是Dijkstra。他于1968年写给ACM的一封题为Goto Statement
Considered Harmful 的信中,指出了GOTO语句的负面作用,并提出了解决之道,其引发的一系列效应最终带来了软件工程的诞生。(信的原文可在www.xiexiebang.com/classics/oct95 上看到,不过,当你看到本文的时候,天知道它还在不在那里!)
软件工程的核心
无论是在上个世纪还是在现在,软件开发所涉及的工作基本上都没有变化,它们都起始于一个实际需要或某个灵感,然后就是分析,设计,编码,调试,维护。这些任务以某种方式动态地结合起来就构成了软件开发的整个过程,这就是所谓的“软件开发周期”。
但对于这些工作,具体怎样做,什么时候做,每个人都有自己的一套方式,甚至有的人有几套方式。这样,当几个人合在一起干活的时候,最终的结果就只能是一片混乱。所以就需要一套规则,大家都按规则来办事,问题就会少得多。好的规则就叫做规范,规范都是由一些master们根据经验总结的,又经过长时间的历练,不断地被补充修正,可以说都是精华,按照规范来干活,对于提高软件质量和工作效率自然大有帮助。
而软件工程,说白了,就是这样一套用于软件的团队开发,以提高软件质量和程序员工作效率为目的的规范。其核心就是,对于软件开发的5个重要组成部分:需求分析,设计,编码,调试,维护,如何组织这5个部分的工作,以及如何完成每一个工作。简单来说,就是对于总体的组织和对于局部的实现。
规范只是提供一个好的例子,以描述一种思想,具体到每一个环节怎样实现,对于不同的公司或团体则是各有千秋,因为根本就不可能存在一套放之天下皆可行的标准。就像C++,也只是提供了一套标准,不同的编译器都有各自的实现,对标准的支持程度也互不相同。所以,在不同的公司或团体中,尽管核心思想都是大同小异,但具体到每一个步骤,往往都是不相同的。我手上就有一份GB8567-88的文档模板,对于那些顶多只有几千行的小程序来说,假如真按上面的要求全写上了,简直就是一种折磨!据说,当前业界最权威的标准是CMM。
软件开发过程的组织
如何组织软件开发过程中的每一个步骤,就是软件开发周期模型要解决的问题。其实开发软件,就像是解决一个逻辑问题。想想自己平时是怎样写程序的。首先是要有一个想法,即我写的这个程序是要干什么的;然后就是对要实现的核心功能大概构思一种或多种实现方法,并从中选出一种自认为是较好的;接下来就是将涉及的各种主要或次要功能分成各个模块;最后就是分模块来编码和DEBUG。在我看来,除了第一步外,其余的步骤应该是一个循环的过程。在编码的过程中,你总是需要不断地回过头来修改原先的模块设计,甚至最初选定的实现算法。例如,最简单的情况是,你通常都会突然发现在两个成员函数中有相同的代码,这时,程序员的直觉告诉你,你应该为你的类再添加一个private成员函数并将公共的代码放于其中;又或者是,你突然发现一个模块中的某个功能具有很高的通用性,完全可以提取出来作为一个独立的功能组件,而你也确实应该这样做;要是倒霉一点的话,你很有可能会在最后调试的时候突然发现,你的程序跑得太慢了,连你自己都无法忍受。于是你找呀找,终于找到了80/20中的那段可恶的20,原来是用了一个O(N)的算法,这时你就得老老实实地换一个更好的算法。
总之,除非你是先知,否则,对于一个具有一定规模和复杂度的软件来说,在“设计—编码”这个过程中,实在有太多的不可预知性和变化性,你根本不可能全盘地把握住每一个细节。当然,这是建立在我现时的水平之上的观点。我不知道是否成为高手以后会有所不同,因为我身边没有那样的人。
既然软件开发是一个具有不可预知性和变化性的动态的过程,那么,对其每一个步骤的组织,即周期模型,就必须包容它的这种性质。
现在来看一下最古老,最经典,同时也是最倍受批评的瀑布模型。
瀑布模型是一种线性模型,其最大的特点就是简单直观。它将软件开发过程规划为“分析—设计—编码—测试—维护”的线性过程,也就是说,你必须首先把你的软件要干的每一件工作都分析得彻彻底底,再对每一个模块,每一个接口,事无巨细,都设计得非常完美,然后才开始编码的工作,并且在编码的时候就像在对着图纸砌模型,根本不用再回头作任何修改,当然,是在把所有的代码都写完以后才开始测试的。
整个过程,光想一下就觉得冒冷汗!
瀑布模型完全忽视了软件开发过程的动态变化。恐怕只有那些已经发展得非常成熟,且规模不大的系统,例如:用Access做后台,用VB画前端的数据库应用程序,才有瀑布模型一展拳脚的地方。
相比之下,现在常用的一些周期模型则更接近于人的自然思维,例如螺旋模型就是一种我比较喜欢的模型。
软件开发过程的实现
具体到每一步的工作要怎样完成,我前面已提到过,是非常灵活的,只要把握住大体的方向就行。在进行分析,设计,编码,调试,维护这几部分的工作的时候,最核心的就是文档的编写。文档的作用在于以下3个方面:一是可以帮助整理思路。把要完成的目标,系统的结构,每一个模块的功能等整理一下,然后分门别类地写下来,这样在开发的过程中,就有据可依,在需要回过头来修改设计的时候,也有证可考。二是便于交流。想象一下开会时的情形。一大帮子人争先恐后,激烈辩论,然后会终人散,思想灵感也就随之散了,结果是开了半天会,什么也没讨论出来。这就是后来会议记录被发明出来的原因。在脑子里的东西一多,就会散而且乱,用语言表达的时候,很容易会丢三落四,别人也很难把握住你的思想。但经过整理写在纸上以后,则会清晰得多,无论是别人还是自己,看起来都可以一目了然。三是可以作为以后维护时的参考资料。有一句名言:“笔和纸永远都比大脑可靠”,意思就是说,放在大脑里的东西说不准哪天就忘了,但写在纸上的东西,只要不发生什么意外,一般是丢不了的。当过了一段时间,你需要再回过头来修改你的程序的时候,你就会发现,你以前写下的文档实在太有价值了。别指望你的源代码,对于复杂一点的程序来说,单纯的源代码几乎会扼杀掉你所有的时间。
至于文档怎样写,教科书上大多都是一条一条列得满满的,就像一些地方政府的规章制度一样,其实大可不必,只要能满足需要就行。如果是在公司,则每个公司大多都有一套自己内部的文档模板,个人没有选择的余地。而对于像我这种业余的,写个程序除了练练手艺,无非就是供自己和亲朋好友玩玩,则根本没必要搞得过于复杂。以下就是我自己的一份文档模板的概要,麻雀虽小,但五脏俱全。
可行性分析 就是关于当前项目能不能干的分析结果。主要考虑的方面包括:是否能把这个项目开发出来;假如可以的话,预计需要多少时间,能否满足客人的时间要求;需要多少人力和资金的投入;最重要的是,这个项目能否赚钱,能赚多少。还要对可能存在的风险进行评估,例如,万一项目主管被车撞了要怎么办。当然,这对于我来说毫无意义,我在这里写上只是为了保持完整而已。
项目描述 这是在决定立项以后,对当前项目的一份扼要说明。必须包括以下几个方面:
(1)项目的名称或编号;(2)对客户方的描述;(3)对开发人员的描述;(4)工程任务的描述;(5)工程的输入和输出;(6)开发环境;(7)其他的附加条件。在这里,对工程任务的描述是从整体的角度来说的,例如:能对当前的象棋棋局进行分析并作出最优决策的人工智能系统。而工程的输入输出则可以这样写:输入当前的象棋棋局的数据描述;输出最优的棋步,包括选择行动的棋子和步法。
需求分析 就是对客户要求的功能的定义。注意这里用了“定义”这个词,这就意味着对客户需求的说明,尽管不一定要是形式定义,但也必须是精确,无歧义的。同时,还要列
出程序的功能模块和逻辑流程,即与客户的每一项功能要求对应的程序功能模块有哪些以及这些功能模块是按照怎样的逻辑步骤来逐项完成客户的要求的。注意这里所说的功能模块与编码时所说的程序模块的区别。对于客户的一个复杂的功能要求,一般可以用分治法分为一个或多个子功能,每一个子功能对应一个功能模块,而每一个功能模块则可以由一个或多个程序模块来实现。功能模块是建立在设计逻辑上的,而程序模块则是直接面向实现的。在用OO编程的时候,我通常以类作为程序模块划分的基本单元。综上所述,这个部分的文档必须包括3个部分:(1)客户需求的详细描述;(2)程序功能模块的划分以及其与客户需求的对应关系;(3)功能模块的逻辑流程。
软件设计 这就是对程序的每一个模块的详细设计的说明文档。其由以下几部分组成:
(1)程序模块与功能模块的对应关系和相关描述;(2)实现每个功能模块的程序模块的逻辑流程和组织结构;(3)对每一个程序模块的详细描述。这个部分的文档是改动得最多的,如果与螺旋周期模型结合,甚至需要循环地对每一个模块进行深入设计和细化,所以,为了便于管理,我通常都对每一个较复杂的模块都单独立一份文档。至于模块的流程图或结构图,一直都是我最头疼的问题,那一大堆琳琅满目的画法和符号往往令人无所适从。其实对于个人来说,只要能把意思表达出来,想怎样画都无所谓,关键是自己要有一套标准,别在这个图中,矩形表示过程,而在另一个图中,则是表示I/O。对每个符号表示的意思进行说明那是必须的,不然别人看起来会一头雾水。假如嫌麻烦的话,就干脆使用那些被大多数人认可的标准,例如UML图。但以后如果进到公司,还是老老实实地按公司规矩办事吧。
开发日志 我一直都认为这是文档中最有趣的部分。开发日志相当于编码阶段的文档,它的形式可以很随意,主要是记录一些在写程序时突然萌发的灵感,或对代码的一些微小的修改,或对程序结构的一些微小变动等,还要对上述这些修改变动作些说明,例如,为什么要改成现在的这个样子。别小看这些记录,它往往会成为你以后对程序进行维护时的重要依据。要知道,人的IQ,EQ等,是会随着人的生理和心理状态的不同而变化的。在某个时刻,你可能会灵光一闪,做出了一个非常伟大的改动,但过了一段时间,当你再回过头来重新阅读同一段代码的时候,你很有可能只记得在这里的改动是非常明智的,可是却无论如何也想不起其明智在哪里。这时,一份日志就会省却你不少的麻烦。
测试分析 用于指出程序存在或潜在的缺陷和错误,以及程序性能的数字描述。其包括几个部分:(1)对被测模块的描述;(2)测试人员;(3)对该模块每个功能的测试的详细描述;(4)指出当前存在或潜在的问题。在测试描述中应该包括输入的数据集和输出的结果,还有运行的时间等。对于公司来说,对测试分析的要求是非常严格的。但对于我个人来说,我只是将其作为一份模块测试的文字记录,以防会忽略掉某些已知的缺陷和错误,以及对一些核心模块的时间和空间效率进行简单的测试,以便日后翻查。