1、嵌入式学习转贴怎样做才能快速的嵌入式了? 其实,做工程是没有捷径可走的先说做硬件:把你的数字电路教材和模拟电路的教材读熟,暂时先把重点放在数字电路上面,接着把微机原理和接口技术读熟悉了,最好能用汇编写几个简单的程序上机调试一下,这是很重要的。完成上面的工作大概需要半年,不管你有多么的聪明,除非你以前这个基础就打的不错,否则,还是老老实实花上至少半年的时间!还是那句话,没有捷径可走,如果你相信那些什么“21 天学通 xx”什么的,那么我告诉你,放弃做工程吧!再说,你这么容易就学会了,别人也能的,你确定能拿到高薪吗?下一步,就是选择一个 DSP(或其它的嵌入式 CPU)平台作为你的目标平台,先熟悉
2、它的架构和与外围电路的接口,然后学习她的指令集,也要写一些小程序去跑一下。这个时候,你应该去买一个开发板了,一般的厂家附带会给你一些 demo 程序,看懂它,理解它,修改它,在你的板子上跑一跑。完成上面两步,说明你已经入了这个行业的门了,下一步,想成为高手的话,就是自己去设计一些项目了,这个阶段所花的时间每个人都是不同的,要看你的造化(主要是前面的基础是否牢固)了。再说说软件:在嵌入式行业,你想做软件开发的话,没别的,那就深入理解 C 语言,尤其是 C 的指针,如果你以前学过 C,但是没有意识到 C 相比其它的高级语言的优点的话(不是听别人说的,你自己的体会),你可以按下面步骤来理解 C:1、
3、重新翻一遍 C 的教材,记住一些常用的 C 语法,但不要死抠语法;2、从编译器的角度来理解 C;从编译原理的角度来理解你工作中使用的高级语言,如果你做到这一点,至少有两个好处:第一个好处是避免一大堆低水平重复出现的编译错误。一名优秀的 Coder 平均在一个工作日中应该完成 200 行以上的源码,其编译错误应该控制在 5 个以下,要知道这 200 行源码不是一次完成的,所以大多数情况下你都要追求一次编译通过;第二个好处是可以提高源码的可读性和效率。规范地编写你的代码使你自己的逻辑清晰,因为你明白多加几个括号和空行、多换行对齐、多注释,编译器是会自动识别的,不影响程序执行的效率,反过来,控制好递
4、归调用和循环内的 if 语句才是提高程序效率的关键,要全力避免递归,但要深刻理解递归,能通过自己建立堆栈来把递归程序转换成非递归程序,要求还是较高的哦!3、从硬件的角度来理解 C。完成上面 3 步,你就是 C 的高手了,接下来应该去看看软件工程方面的书了,这个我还不太懂,不敢妄言。另外说说教材的选择:学一门东西,选好你的教材,只要一本就可以了。坚决防止这种情况的出现:去图书馆借很多本书,像抢劫似的,而只是每一本都翻翻,就又还给图书馆了的!注意上面我把汇编语言放在硬件学习的板块里面,是由于汇编跟硬件的关系太紧密了,以至于是先学汇编还是先学习硬件电路和 CPU 架构成了要分清到底是“先有鸡还是先有
5、蛋”的千年哲学难题了。嵌入式操作系统一览其实,嵌入式系统并不是一个新生的事物,从八十年代起,国际上就有一些 IT 组织、公司,开始进行商用嵌入式系统和专用操作系统的研发。这其中涌现了一些著名的嵌入式系统: Windows CE Microsoft Windows CE 是从整体上为有限资源的平台设计的多线程、完整优先权、多任务的操作系统。它的模块化设计允许它对于从掌上电脑到专用的工业控制器的用户电子设备进行定制。操作系统的基本内核需要至少 200K 的 ROM。 VxWorks VxWorks 是目前嵌入式系统领域中使用最广泛、市场占有率最高的系统。它支持多种处理器,如 x86、i960、Su
6、n Sparc、Motorola MC68xxx、MIPS RX000、POWER PC 等等。大多数的 VxWorks API 是专有的。采用 GNU 的编译和调试器。 pSOS ISI 公司已经被 WinRiver 公司兼并,现在 pSOS 属于 WindRiver 公司的产品。这个系统是一个模块化、高性能的实时操作系统,专为嵌入式微处理器设计,提供一个完全多任务环境,在定制的或是商业化的硬件上提供高性能和高可靠性。可以让开发者根据操作系统的功能和内存需求定制成每一个应用所需的系统。开发者可以利用它来实现从简单的单个独立设备到复杂的、网络化的多处理器系统。 QNX QNX 是一个实时的、可
7、扩充的操作系统,它部分遵循 POSIX 相关标准,如:POSIX.1b 实时扩展。它提供了一个很小的微内核以及一些可选的配合进程。其内核仅提供 4 种服务:进程调度、进程间通信、底层网络通信和中断处理,其进程在独立的地址空间运行。所有其它 OS 服务,都实现为协作的用户进程,因此 QNX 内核非常小巧(QNX4.x 大约为 12Kb)而且运行速度极快。这个灵活的结构可以使用户根据实际的需求,将系统配置成微小的嵌入式操作系统或是包括几百个处理器的超级虚拟机操作系统。 Palm OS 3Com 公司的 Palm OS 在 PDA 市场上占有很大的市场份额,它有开放的操作系统应用程序接口(API),
8、开发商可以根据需要自行开发所需要的应用程序。 OS-9 Microwave 的 OS-9 是为微处理器的关键实时任务而设计的操作系统,广泛应用于高科技产品中,包括消费电子产品、工业自动化、无线通讯产品、医疗仪器、数字电视/多媒体设备。它提供了很好的安全性和容错性。与其他的嵌入式系统相比,它的灵活性和可升级性非常突出。 LynxOS Lynx Real-time Systems 的 LynxOS 是一个分布式、嵌入式、可规模扩展的实时操作系统,它遵循POSIX.1a、POSIX.1b 和 POSIX.1c 标准。LynxOS 支持线程概念,提供 256 个全局用户线程优先级;提供一些传统的、非实
9、时系统的服务特征;包括基于调用需求的虚拟内存,一个基于 Motif 的用户图形界面,与工业标准兼容的网络系统以及应用开发工具。目前,世面上有很多商业性嵌入式系统都在努力地为自己争取着嵌入式市场的份额。但是,这些专用操作系统均属于商业化产品,价格昂贵;而且,由于它们各自的源代码不公开,使得每个系统上的应用软件与其它系统都无法兼容。并且,由于这种封闭性还导致了商业嵌入式系统在对各种设备的支持方面存在很大的问题,使得对它们的软件移植变得很困难。在嵌入式这个 IT 产业的新的关键领域,Linux 操作系统适时地出现在了国家和国内各嵌入式厂商面前,由于 Linux 自身诸多优势,吸引了许多开发商的目光,
10、成为嵌入式操作系统的新宠。它的出现无疑为国家发展嵌入式操作系统事业提供了一个极有吸引力的机会。前言 这个题目很大,给人一种感觉我好像很成功,其实不然。实际上自己水平不高,甚至很低,但是做过了一些曲折的学习道路,同时把自己真实的学习历程表达出来,希望对后来者有借鉴的意义,甚幸! 工作三年、几成废人! 我 2000 年毕业于华中地区的一个理工科大学,专业是机械电子,我当时已经签了一家内陆某个省级机关工作,家里八辈是农民,并且很偏远,能够进入这样的地方是祖坟有风水。但在毕业前夕有个进入 it 的机会,我本想进去的,家里人极力反对,阻力可想而知。同时要交 4000 元的违约金,对我来说是天文数字。大学
11、里的费用很多是借的,几乎将近一半的费用是在大学勤工俭学挣的,为了省钱,高中一个学期回家一次,大学一年回去一次。并且我个人也有特殊的人生背景(悲景更确切),这里不多说了,写十篇也写不完,同时偏离主题。这样我就参加了工作。一张报纸一杯茶的日子,几乎下班后有种很空虚和恐慌的感觉。在工作中虽然是与自己专业有点关系,但是很少。专业几乎荒废。我自己也思考,如果再不出去,自己将会成废人,只好让国家养了。两年后决定出去,但是几成废人,谁要呢,只好到学校去镀金。这是中国教育和社会的悲哀! 至于专业就改为计算机方面,听说好找工作,我说实话不是很对计算机特别感兴趣,生存第一需要。不要笑我,哈哈! 考研成绩出来,超过
12、了国家线几十分。那个方向要两个,我第三,但是那年非碘,不面试就按分数来排,自然我落选了。其实给我面试机会也不一定要我,哈哈,自己几斤几两很清楚。 最后调剂到另外一个学校,交钱,咬咬牙,交吧!现在仍然债台高筑! 进入学校前夕 为什么要把这段列出,看后就知道了。 单位有网络,经常上网查些英语资料,在那里唯独英语没有丢很多。于是我就在网上查资料,学什么好呢,最后确定学嵌入式把,听说跟硬件相对比较紧密!而我在大学里多少学习了数字电路,单片机等,所以多少也有所利用,不会真的一无所知。当然在这之前也自学过数据结构,计算机组成原理等。C 语言在大学就学了。哈哈这就是我的家底。 我知道自己的基础差,于是我就拿
13、操作系统,数据库、数据结构、c+来看,机关有这个好处,空余时间多,于是平常就看书,很痛苦,没有人请教。 另外就上网到论坛上去,我就到各个专业的技术论坛,其实是电子论坛和嵌入式论坛。我几乎没有发帖,几乎把几个大型的出名的论坛的帖子翻遍了,虽然有很多重复的,我才知道嵌入式是个什么东东。这些帖子对我以后的学习产生了极大的影响。 最关键两点:1、嵌入式是什么? 2、嵌入式需要哪些知识? 知道了这两点,好办!我就开始规划学习路线。计算机的基本理论不能丢,于是重点看组成原理,数据机构,操作系统、c+。同时论坛上了解到,实时操作系统 ucos 是一个很好的嵌入式操作系统,对初学者很好。于是我就买了一本书,但
14、是代码在电脑里调不通,网上也有很多相同的问题,我就看书,分析代码,一遍不行就两遍,三遍,这样才看了入了门,才知道什么是进程。原来看操作系统书时,根本就不知道进程是个什么东西。 在这段时间掌握的东西不多,但是,对我以后的影响很大,我想起了大学时一个同学跟我说过了一句话:大学里最重要的不是学到了什么,最重要的是学会怎么学!大概是这个意思。 进入我的避难所 对我来讲,再次进入大学不再是大学,而是避难所。希望这次进入给我喘气和养精蓄锐的机会和时间。我是这样认为和实践的。 在学校我有三件事:上课,上图书馆,上网。 对于上课,学校开了很多课程,非常好,很多是名人名师讲解,于是很多同学都想学,都去听。我也考
15、虑过,最后放弃。我是这样认为的,时间是有限的,什么都想学,什么都学不成。于是我把我自己学的课进行了分化,一般的课程通过就行,重要的一定好好学。我希望不要什么争论学习课程多和少的问题,这仅仅是我的看法。所以我的成绩应该是很差的。分数低。好在后来的单位没有要我的成绩单,否则就惨了。 我个人感觉是上图书馆的效率比在寝室里高多了,这是我的经验。 上网,我给自己定了规矩:不玩游戏,不灌水,少看电影!因为时间对我来说太少和宝贵了,我没有资格和资本来浪费这些。上网我就在几个重要的专业技术网站上逛,下载技术资料。我一个朋友最近开了一个嵌入式网站, 里面的资料相当一部分是我在网上找的资料。那个网站很不错,资料丰
16、富,找嵌入式方面,特别是嵌入式 linux 的资料,异常丰富。 有人会问,您下了那么多资料,怎么看的完和消化的了呢? 我是这样对待这个问题的: 1、 网上资料比较零散,不系统,但是如果把差不多的东西收集起来看就相对完整了,(嵌入式的图书就是这两年特别多,特别是 2004 年,简直是向外涌!2003 年想买本嵌入式,特别是嵌入式 linux 的不多。) 2、 对于像我这种入门的来说,很多看不懂,没关系,反复看,我个人对学习方法的一个总结是:重复是最好的老师! 3、 即使有的用不上,也可以收集以后用的上时查阅。 但是我并非什么都要,目前我的技术路线是嵌入式 linux,所以像 wince 之类基本
17、上不 收集。 总之,我在学校里我充分利用时间来学习,我看到一些同学整天的挂在网上打游戏,发 些无关痛痒的帖子,浪费时间呀!我真的很痛心! 学习嵌入式 在这里我把它单独列出,文章有点紊乱,但是内容希望有益。 1、学习 linux 根据我在论坛的了解,我选择学习嵌入式 linux,刚好我们学校也重视嵌入式 linux,从实验室到课程安排都是关于嵌入式 linux 方面,天时地利!这里我把学习 linux 的经验和教训说说。 可以这样说,在论坛里说道学习 linux 差不多就学习 linux 内核。于是我电脑里安装了 linux 就开始看linux 内核方面的书了。我记得来学校以前就买到一本陈莉君的
18、讲 linux 内核的第一版,现在有第二版了。我就开始看那本说,大家说 linux 内核情景分析不错,我就买了上下册,后来又买了 深入理解 linux 内核 ,最后也买了毛德操的嵌入式系统也是分析 linux 内核代码的,主要讲 arm 相关的。 看内核期间是个非常痛苦的过程,看情景分析有种在森林中找出路,其间我组织了一些同学学习内核,几乎没有几个能坚持下来的。我认为我是坚持下来了。情景分析在看第一、第二遍是几乎没有摸到门道,我分析有三个方面的原因:1、自己的基础差,这是最关键的。 2、内核本身很难。3、没有交流和高人指点。到了第三遍时我才摸到门,才差不多知道个 linux 的大概脉络,很多细
19、节也是稀里糊涂。 学习 linux 总结,这里声明一下,我指的嵌入式主要是偏向软件的嵌入式。学习嵌入式的重点和难点关键在操作系统,如果没有掌握操作系统,我认为很难把握一个嵌入式系统。即使在做嵌入式开发中,作应有层的开发几乎可以不知道操作系统也可以开发,我认为那是浮在表面的。很难深入和提高自己的层次。声明:一孔之见!不可深究! 在学习 linux 内核过程中犯了一个极其严重路线错误:对 linux 几乎不懂就开始学习内核。我个人推荐一个学习路线是:使用 linuxlinxu 系统编程开发-驱动开发和分析 linux 内核。而我差不多相反,实际上你不会使用 linux 也可以学习内核,但是如果你懂
20、了这些东西学习更有效率。 关于要不要学习内核的问题,我的回答如下:不一定。如果你是喜欢钻研的那你进入内核会满足你的欲望。同时对你以后的嵌入式系统的开发有很好的影响。如果你想从事嵌入式 linux 系统开发,最好对内核有所了解。如果仅仅是做应用开发没有必要。我打个比喻:c、c+、java 等语言是武林中的某个武林派别的话,如什么拳法,什么刀法等,那么 linux 内核应该是一个人的内功的反应。 怎么开始学 linux 内核:最好有三件宝物:深入理解 linux 内核情景分析和源代码。 先看深,那主要讲原理,好像市场上有本讲原理性并且更浅,linux 内核设计与实现听说不错。如果没有学习操作系统的
21、,像我这样的,最好先看看操作系统原理的书。看了几遍后,就看情景分析,最好对着深看。两本交叉看,深是纲,情是目。最后深入代码。 2、学习嵌入式 linux 学习嵌入式,我认为两个重点,cpu 和操作系统,目前市场是比较流行 arm,所以推荐大家学习 arm。操作系统很多,我个人对开始学习的人,特别不是计算机专业的,推荐学习 ucos。那是开源的,同时很小。学习很好。为什么选 linux,我不想讲太多,网上这方面的太多,但是我在工作中发现,做 linux 的技术路线很难,在 windows 几乎不会有的问题,在 linux 开发中几乎遍地陷阱。一掉进去划很长时间出来,一旦解决自己又长进了!相对来说
22、开发周期长,难度大。现在资料也逐渐丰富起来,难度也降低了些! 至于怎么学习,这是他的特色地方,必须有块开发板,我是同学里最早买学习板的,虽然化钱,我认为值。对我实习和工作产生了很大的影响。 如果没有开发板,那是纸上谈兵。有人说,那要 1000-2000 亚,的确是,兄弟,看长远的,对您的职业和发展那点钱不算什么!有的人说我站着说话不腰痛,好吧,钱这东西对我影响很大,我在大学里扫厕所,扫的不错,奖 5 元 /月。兄弟你有过吗?我认为教育投资是效益最有保障的!我实习拿3k,很多同学拿 1-2k,当然比我高的也有。虽然我现在没有毕业,但一家公司就签了。从事目前流行的高档的消费电子的研发。对于我两年前
23、一无所知的我,应该有质的变化,我感谢学校收了我这个废品。当然我也非常的努力。说这么多并不是要炫耀我什么,实际上根本不值得炫耀,虽然现在工作环境和待遇比较满意,但是,我发现我很差,特别是代码能力,我希望平常大家少玩游戏,多编程。编程才是硬道理! 3、 学习板和培训 你可以不接受培训,但是不能不买开发板。如果你想学习嵌入式一定要买块学习板,最好买块 arm9的,贵些也值。可以跑高级操作系统。这个不要什么品牌公司的,一般不会出什么问题,市场上的板子一般是三星的 2410,基本上是抄的。如果是做产品那要注意些。一般的公司一般要 2000,加 lcd 要 3000 甚至更多。我接触到有的板只要 1200
24、,加 lcd 也就 2000,差别比较大,我认为学习都够啦。 对于培训,如果有条件最好参加,主要是嵌入式相对别的不同,自己摸索很费时,如果有高手指点非常的好,进步快。特别是认识做这些的朋友。我接受过培训,认识个朋友。在以后的工作中帮我很多,在这里谢谢他!我记得哈佛的一个 MBA 的学生这样说,大意是:在哈佛学到什么不重要,最重要的是这些未来各大公司的高级管理人员是我的同学!真是有远见! 目前市场是培训比较贵,一个星期两三千,真正算起来也要,那些讲师待遇绝对不会低。但是有个致命的问题是连续上课,一连几天,效果不佳。我希望社会上多出些 1000 元左右,并且时间长些,如一个月,一周一到两次课。如果没人做,我来做,哈哈! 没有想到,一下写了这么多,其实还想写的,比如在中科院的一位老兄是怎样学习 linux 内核和看书的,真的很感动。他的为人我很钦佩。也想介绍毛德操的嵌入式系统那本书,对学习 arm linux的很好,也想介绍实习和工作的东西,太长了,耽误大家时间。我也不想检查里面的错别字了,很多!就写到这里吧