不知道对你是否有用。。。。
我的嵌入式之路(好文转发)
这个题目很大,给人一种感觉我好像很成功,其实不然。实际上自己水平不高,甚至很低,但是做过了一些曲折的学习道路,同时把自己真实的学习历程表达出来,希望对后来者有借鉴的意义,甚幸!
工作三年、几成废人!
我年毕业于华中地区的一个理工科大学,专业是机械电子,我当时已经签了一家内陆某个省级机关工作,家里八辈是农民,并且很偏远,能够进入这样的地方是祖坟有风水。但在毕业前夕有个进入it的机会,我本想进去的,家里人极力反对,阻力可想而知。同时要交元的违约金,对我来说是天文数字。大学里的费用很多是借的,几乎将近一半的费用是在大学勤工俭学挣的,为了省钱,高中一个学期回家一次,大学一年回去一次。并且我个人也有特殊的人生背景(悲景更确切),这里不多说了,写十篇也写不完,同时偏离主题。这样我就参加了工作。一张报纸一杯茶的日子,几乎下班后有种很空虚和恐慌的感觉。在工作中虽然是与自己专业有点关系,但是很少。专业几乎荒废。我自己也思考,如果再不出去,自己将会成废人,只好让国家养了。两年后决定出去,但是几成废人,谁要呢,只好到学校去镀金。这是中国教育和社会的悲哀!
至于专业就改为计算机方面,听说好找工作,我说实话不是很对计算机特别感兴趣,生存第一需要。不要笑我,哈哈!
考研成绩出来,超过了国家线几十分。那个方向要两个,我第三,但是那年非碘,不面试就按分数来排,自然我落选了。其实给我面试机会也不一定要我,哈哈,自己几斤几两很清楚。
最后调剂到另外一个学校,交钱,咬咬牙,交吧!现在仍然债台高筑!
进入学校前夕
为什么要把这段列出,看后就知道了。
单位有网络,经常上网查些英语资料,在那里唯独英语没有丢很多。于是我就在网上查资料,学什么好呢,最后确定学嵌入式把,听说跟硬件相对比较紧密!而我在大学里多少学习了数字电路,单片机等,所以多少也有所利用,不会真的一无所知。当然在这之前也自学过数据结构,计算机组成原理等。C 语言在大学就学了。哈哈这就是我的家底。
我知道自己的基础差,于是我就拿操作系统,数据库、数据结构、c++来看,机关有这个好处,空余时间多,于是平常就看书,很痛苦,没有人请教。
另外就上网到论坛上去,我就到各个专业的技术论坛,其实是电子论坛和嵌入式论坛。我几乎没有发帖,几乎把几个大型的出名的论坛的帖子翻遍了,虽然有很多重复的,我才知道嵌入式是个什么东东。这些帖子对我以后的学习产生了极大的影响。
最关键两点:1、嵌入式是什么?
2、嵌入式需要哪些知识?
知道了这两点,好办!我就开始规划学习路线。计算机的基本理论不能丢,于是重点看组成原理,数据机构,操作系统、c++。同时论坛上了解到,实时操作系统ucos是一个很好的嵌入式操作系统,对初学者很好。于是我就买了一本书,但是代码在电脑里调不通,网上也有很多相同的问题,我就看书,分析代码,一遍不行就两遍,三遍,这样才看了入了门,才知道什么是进程。原来看操作系统书时,根本就不知道进程是个什么东西。在这段时间掌握的东西不多,但是,对我以后的影响很大,我想起了大学时一个同学跟我说过了一句话:大学里最重要的不是学到了什么,最重要的是学会怎么学!大概是这个意思。
进入我的避难所
对我来讲,再次进入大学不再是大学,而是避难所。希望这次进入给我喘气和养精蓄锐的机会和时间。我是这样认为和实践的。
在学校我有三件事:上课,上图书馆,上网。
对于上课,学校开了很多课程,非常好,很多是名人名师讲解,于是很多同学都想学,都去听。我也考虑过,最后放弃。我是这样认为的,时间是有限的,什么都想学,什么都学不成。于是我把我自己学的课进行了分化,一般的课程通过就行,重要的一定好好学。我希望不要什么争论学习课程多和少的问题,这仅仅是我的看法。所以我的成绩应该是很差的。分数低。好在后来的单位没有要我的成绩单,否则就惨。
我个人感觉是上图书馆的效率比在寝室里高多了,这是我的经验。
上网,我给自己定了规矩:不玩游戏,不灌水,少看电影!因为时间对我来说太少和宝贵了,我没有资格和资本来浪费这些。上网我就在几个重要的专业技术网站上逛,下载技术资料。我一个朋友最近开了一个嵌入式网站, 里面的资料相当一部分是我在网上找的资料。那个网站很不错,资料丰富,找嵌入式方面,特别是嵌入式linux的资料,异常丰富。
有人会问,您下了那么多资料,怎么看的完和消化的了呢?
我是这样对待这个问题的:
1、 网上资料比较零散,不系统,但是如果把差不多的东西收集起来看就相对完整了,(嵌入式的图书就是这两年特别多,特别是年,简直是向外涌!年想买本嵌入式,特别是嵌入式linux的不多。)
2、 对于像我这种入门的来说,很多看不懂,没关系,反复看,我个人对学习方法的一个总结是:重复是最好的老师!
3、 即使有的用不上,也可以收集以后用的上时查阅。
但是我并非什么都要,目前我的技术路线是嵌入式linux,所以像wince之类基本上不收集。
总之,我在学校里我充分利用时间来学习,我看到一些同学整天的挂在网上打游戏,发些无关痛痒的帖子,浪费时间呀!我真的很痛心!
学习嵌入式
在这里我把它单独列出,文章有点紊乱,但是内容希望有益。
1、学习linux
根据我在论坛的了解,我选择学习嵌入式linux,刚好我们学校也重视嵌入式linux,从实验室到课程安排都是关于嵌入式linux方面,天时地利!这里我把学习linux的经验和教训说说。
可以这样说,在论坛里说道学习linux差不多就学习linux内核。于是我电脑里安装了linux就开始看linux内核方面的书了。我记得来学校以前就买到一本陈莉君的讲linux内核的第一版,现在有第二版了。我就开始看那本说,大家说linux内核情景分析不错,我就买了上下册,后来又买了 《深入理解linux内核》,最后也买了毛德操的《嵌入式系统》也是分析linux内核代码的,主要讲arm相关的。
看内核期间是个非常痛苦的过程,看情景分析有种在森林中找出路,其间我组织了一些同学学习内核,几乎没有几个能坚持下来的。我认为我是坚持下来了。情景分析在看第一、第二遍是几乎没有摸到门道,我分析有三个方面的原因:1、自己的基础差,这是最关键的。2、内核本身很难。3、没有交流和高人指点。到了第三遍时我才摸到门,才差不多知道个linux的大概脉络,很多细节也是稀里糊涂。
学习linux总结,这里声明一下,我指的嵌入式主要是偏向软件的嵌入式。学习嵌入式的重点和难点关键在操作系统,如果没有掌握操作系统,我认为很难把握一个嵌入式系统。即使在做嵌入式开发中,作应有层的开发几乎可以不知道操作系统也可以开发,我认为那是浮在表面的。很难深入和提高自己的层次。声明:一孔之见!不可深究!
在学习linux内核过程中犯了一个极其严重路线错误:对linux几乎不懂就开始学习内核。我个人推荐一个学习路线是:使用linux—〉linxu系统编程开发---〉驱动开发和分析linux内核。而我差不多相反,实际上你不会使用linux也可以学习内核,但是如果你懂了这些东西学习更有效率。
关于要不要学习内核的问题,我的回答如下:不一定。如果你是喜欢钻研的那你进入内核会满足你的欲望。同时对你以后的嵌入式系统的开发有很好的影响。如果你想从事嵌入式linux系统开发,最好对内核有所了解。如果仅仅是做应用开发没有必要。我打个比喻:c、c++、java等语言是武林中的某个武林派别的话,如什么拳法,什么刀法等,那么linux 内核应该是一个人的内功的反应。
怎么开始学linux内核:最好有三件宝物:《深入理解linux内核》《情景分析》和源代码。
先看《深》,那主要讲原理,好像市场上有本讲原理性并且更浅,《linux内核设计与实现》听说不错。如果没有学习操作系统的,像我这样的,最好先看看操作系统原理的书。看了几遍后,就看情景分析,最好对着《深》看。两本交叉看,《深》是纲,《情》是目。最后深入代码。
2、学习嵌入式linux
学习嵌入式,我认为两个重点,cpu和操作系统,目前市场是比较流行arm,所以推荐大家学习arm。操作系统很多,我个人对开始学习的人,特别不是计算机专
可以先搞搞arm7,跑跑ucos之类的简单的os,对arm有个初步认识,然后搞搞uclinux,或者弄块带mmu的arm9板子搞linux,由易到难.个人见解
高手一:
1把arm当超级单片机用,一个高手的观点,初学者不能跟着学,学习为了什么,为了更好的使用,如果当一个超级单片机学习那你什么都学不到,你看周立功的easy arm好是好,提供了很多模版,但学了半天感觉还是51。为了好好学arm还是从头学把引导程序,终端看仔细了,很多人连lpc的时钟配置也不明白,但敢说他会arm,我曾进也是其中一员。
2我只对硬件感兴趣,arm已经把硬软件的界限打破,如果还硬件管硬件,软件归软件,那你还不如回到51,arm是能同意处理多任务系统,51就不行了,你不在软件上下功夫,那你对不起arm 以上仅是比人愚见,一起讨论
高手二:
连硬件的io口以及外围设备都没有精心设计过,谁会相信你做的软件可以紧贴硬件,得到最佳的工作效率呢?
如果小的嵌入式系统都沉浸在用高速io口模拟什么时序,谁又能保证你能将arm所有的潜力发挥出来呢?大家知道,如果用io口模拟会使指令流打差不多10倍折扣。
现代mcu都是基于编译器原理设计出来的,我们在做设计时必须兼顾软硬件两个方面,不能将二者完全分开。
arm内核那么多层的代码运行级别本身就给我们工程师许多想象的空间,我们为什么不发挥一下呢?
高手三:
对于一个有8位单片机基础的人,将arm作为超级单片机来作入门学习,我觉得没什么不妥,学习由浅入深挺好的。对于这个人来说,他最熟悉的是原来8位的单片机,刚接触ARM的时候先撇开操作系统又暂时不去管bootloader的操作,那么就会发现其实arm和8位单片机操作起来其实是相似的。等到了解一些内容后,再进一步去学习boot、学习操作系统那相对就会容易一点了。
51也有人拿来跑操作系统,不过估计是玩的成份居多,而AVR跑操作系统则是有实际应用的。一个人的精力有限,不可能什么都面面俱到,总该有一个侧重的方向。做一个项目,通常需要一个团队,这个团队里面有软件工程师也有硬件工程师,大家各司其职,又相互配合。搞软件的人懂一点硬件会对写程序有帮助,搞硬件的人也应该懂一点软件。软件工程师可以专门负责操作系统里面的任务处理,硬件工程师除了完成硬件电路的设计外还需要编写一些硬件驱动程序。如果一个软件工程师不知道什么是串口,那么他就可能会不理解用串口发送数据和普通I/O操作有什么不一样。如果一个硬件工程师没有地址的概念、不知道数据位宽,那么他就可能不会理解给ARM系统接一块16位的FLASH的时候地址线为什么要偏移一位。
阅读(1588) | 评论(0) | 转发(0) |