只要选择走技术这条路,就要做好吃苦的决心,没有什么技术是不靠深入专研而获得的。自我觉得嵌入式同样如此,学习嵌入式都说门槛很高,要学习的东西很多,但是只要它是你的兴趣所在,你花时间去学习它,收获的就不止是知识,还有毅力、学习的方法等。
我并不是计算机专业出身,刚大一的时候连计算机的基本组件都不清楚,而现在开始学习计算机,学习嵌入式,并不是现在IT行业吃的香,嵌入式工作工资高,而是这是我的兴趣所在,我大二时候特别厌烦计算机编程,而选择硬件,但是后来我逐渐认识到现在只懂得硬件在以后肯定不够用,于是又开始复习学过的C语言,不知不觉发现嵌入式正好是我正在学习的方向,软件硬件结合的方向。对于我来说,这真是很好的发展方向,从小就喜欢机器人方面的东西,现在要是我学好了这些识,做自己的机器人应该没有问题了(其中肯定还要学其他方面的知识)。
网上朋友们对嵌入式总结的很好:
**************************************************************************
ARM+LINUX路线,主攻嵌入式Linux操作系统及其上应用软件开发目标:(1) 掌握主流嵌入式微处理器的结构与原理(初步定为arm9)
(2) 必须掌握一个嵌入式操作系统 (初步定为uclinux或linux,版本待定)
(3) 必须熟悉嵌入式软件开发流程并至少做一个嵌入式软件项目。
从事嵌入式软件开发的好处是:
(1)目前国内外这方面的人都很稀缺。这一领域入门门槛较高,所以非专业IT人员很难切入这一领域;另一方面,是因为这一领域较新,目前发展太快,大多数人无条件接触。
(2)与企业计算等应用软件不同,嵌入式领域人才的工作强度通常低一些(但收入不低)。
(3)哪天若想创业,搞自已的产品,嵌入式不像应用软件那样容易被盗版。硬件设计一般都是请其它公司给订做(这叫“贴牌”:OEM),都是通用的硬件,我们只管设计软件就变成自己的产品了。
(4)兴趣所在,这是最主要的。
从事嵌入式软件开发的缺点是:
(1)入门起点较高,所用到的技术往往都有一定难度,若软硬件基础不好,特别是操作系统级软件功底不深,则可能不适于此行。
(2)这方面的企业数量要远少于企业计算类企业。
(3)有少数公司经常要硕士以上的人搞嵌入式,主要是基于嵌入式的难度。但大多数公司也并无此要求,只要有经验即可。
(4)平台依托强,换平台比较辛苦。
****************************************************************************************
我学习嵌入式“起源”应该从我学单片机开始吧,下面是我在网上看到牛人们推荐学习嵌入式的方法:
*****************************************************************************************
方法步骤:
1、基础知识:
目的:能看懂硬件工作原理,但重点在嵌入式软件,特别是操作系统级软件。
科目:模拟电路、数字电路、计算机组成原理、嵌入式微处理器结构。
汇编语言、C/C++、编译原理、离散数学。
数据结构和算法、操作系统、软件工程、网络、数据库。
方法:虽科目众多,但都是较简单的基础,且大部分已掌握。不一定全学,可根据需要选修。
主攻书籍:the c++ programming language(一直没时间读)、数据结构-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、CDMA等。
C、网络与信息安全技术:如加密技术,数字证书CA等。
D、DSP技术:Digital Signal Process,DSP处理器通过硬件实现数字信号处理算法
**************************************************************************************
看了上面的学习方法,感觉自己要学习的知识还有很多,在没有看到上面的学习方法和步骤之前,我的学习路线是这样的:
**************************************************************************************
1、 基础知识:这是必须的,大一大二大家学习的课程大都差不多,硬件软件大家都学。
科目:电路分析、模拟电路、数字电路、C程序设计、软件技术基础、信号与系统、电磁场与波(这是我们学校大多专业都要学的,以后可以做通讯方向)
单片机原理与设计(这是大三才学,之前大一开始自学,看了两遍才理解)、汇编语言(在图书馆找书自己看吧)
数据结构(这个必须得看,平时没事拿出来学习,练练手)、操作系统(虽然第一次看很痛苦,后面掌握一定知识再回来看就茅塞顿开)、TCP/IP(这个大体了解一下,除非要往网络编程方面发展的话,就要好好学)。
方法:大一大二学基础课应该是没问题,只是有些是根据自己的兴趣来学,对于我这种非计算机专业的就只有靠自学了,不过与上不上课也没区别。
主攻数据:单片机原理与设计、the c++ programming language(我也是一直没时间读,只看了一半)、数据结构-C2。
2、 学习Linux
目的: 我的最初目的是了解Linux,当时特别佩服和崇拜Linux Torvalds,后面就是想掌握Linux系统了
方法: 首先新手先看《鸟哥私房菜基础篇》这本书 –> 在电脑上安装虚拟机Vmware->在Vmware上安装linux-> 熟悉Linux各种shell命令(基本功,就好比走路)-> linxu系统编程开发—〉驱动开发和分析linux内核。
主攻书籍:《鸟哥私房菜基础篇》 《unix环境高级编程》
感受: 我的学习方法有点不一样,因人而异,我一直都想把Linux内核弄清楚,直到现在都还没有,弄懂内核没有那么简单,我是为学习嵌入式Linux方向去的,只有平时需要的时候才去学习Linux内核的某个模块,在玩Linux之前一定要先看有关Linux基础方面的书籍,否则像我之前一味的在Windows上耍的人到Linux下就不知道接下来要做什么了。熟悉了之后就可以把以后的开发环境转移到Linux了,反正我的是这样,在Windows我们大多数人都喜欢玩游戏看电影,但在Linux下你就可以安心的来编程了。
3、 学习嵌入式linux
目的: 掌握嵌入式处理器其及大多嵌入式系统。
方法: (1)首先是硬件呗,学习嵌入式微处理器结构与应用:直接arm原理及汇编即可,这是毋庸置疑的;
(2)再是软件了,嵌入式操作系统类:ucOS/II简单,开源,可供入门。有精力的可以学uClinux;
(3)学习了理论还不够,得有块开发板来实践,我之前想的是没有开发板可以用仿真软件,例如Skyeye,但我我觉得有块开发板学起来有劲头。
(4)现在培训很多,对于我们学生没有经济条件,我们就看视频学吧,网上那么多视频学习资料,我们就边看边学吧,虽说视频学起来很慢,但是知识点很细。
(5)学习了那么多知识,在看《嵌入式Linux应用开发完全手册》,把嵌入式Linux从Bootloader到文件系统构建过程走一遍。
(6)下面就是应用程序开发了,这个就是前面的基础了,学习Qtopia界面开发。
主攻书籍:毛德操的《嵌入式系统》及其他arm9手册与arm汇编指令 华清远见的《嵌入式Linux应用程序开发详解》《嵌入式Linux应用开发完全手册》
4、 深入学习
A、Linux驱动设计,学习LDD(linux deceive driver),往驱动开发方向发展
B、Bootloader、Linux内核、开源软件移植到指定CPU架构板子上
C、数字图像压缩技术:主要是应掌握MPEG、mp3等编解码算法和技术。
********************************************************************************
我的嵌入式学习路线就是这样,大体上和其他人差不多,只是发展方向不同,在此记录一下我大学嵌入式学习进程:
大一下半年: 学习汇编语言,首先预习了单片机原理与设计
暑假 : 回家看电子设计从零开始,复习C程序设计
大二上半年: 开始学习单片机,看郭天祥的单片机开发视频,没钱买51单片机开发板,于是在网上寻找仿真软件,终于找到Proteus
国庆期间: 学习Proteus,并编写51单片机程序
大二下半年: 加入学院创新团队,开始学习C++,主要看C++ primer.
暑假: 这是一个转折点,在家无聊,开始进入Linux学习的大门,学习Linux基本知识,提前回学校天天看《鸟哥私房菜》,在电脑上实践。
大三上半年: 继续学习Linux,不过主要是编译安装,仿真器Skyeye安装,uCLinux安装等。本专业又开单片机原理与设计课,又重新学了一次单片机,不过这次是正式的,在真正的51单片机上实践,与同学做了课程设计(温度报警系统),我负责硬件设计及调试。快接近放寒假了,用奖学金买了块飞凌OK6410开发板,还是arm1176jsz核的。开始学习嵌入式Linux应用程序开发。同时与同学做项目,也是关于嵌入式开发的,Qt开发的学习。
寒假: 在家研究嵌入式Linux,主要是裸机开发,基本裸机程序开发完后,进入驱动学习。
大三下半年: 继续Linux驱动学习,感觉没有用处,决定做一个ARM11+Linux的智能机器人,于是开始了我的机器人开发,编写机器人电机驱动程序。后面接近放暑假买了USB摄像头,超声波传感器,对Linux的视频编程V4L2学习了一下
暑假: 基于中新微USB摄像头开发视频监控,首先移植了MJpeg-streamer,实现视频监控;开发V4l2视频采集,成功采集到图像;嵌入式Linux构建全过程:Bootloader分析和移植、Linux3.0.4内核移植、YAFF2根文件系统制作。
下面是大牛们推荐看的嵌入式书籍:
Linux基础
1、《Linux与Unix Shell 编程指南》
C语言基础
1、《C Primer Plus,5th Edition》【美】Stephen Prata着
2、《The C Programming Language, 2nd Edition》【美】Brian W. Kernighan David M. Rithie(K & R)着
3、《Advanced Programming in the UNIX Environment,2nd Edition》(APUE)
4、《嵌入式Linux应用程序开发详解》
Linux内核
1、《深入理解Linux内核》(第三版)
2、《Linux内核源代码情景分析》毛德操 胡希明著
研发方向
1、《UNIX Network Programming》(UNP)
2、《TCP/IP详解》
3、《Linux内核编程》
4、《Linux设备驱动开发》(LDD)
5、《Linux高级程序设计》 杨宗德著
硬件基础
1、《ARM体系结构与编程》杜春雷着
2、S3C2410 Datasheet
英语基础
1、《计算机与通信专业英语》
系统教程
1、《嵌入式系统――体系结构、编程与设计》
2、《嵌入式系统――采用公开源代码和StrongARM/Xscale处理器》毛德操 胡希明着
3、《Building Embedded Linux Systems》
4、《嵌入式ARM系统原理与实例开发》 杨宗德著
理论基础
1、《算法导论》
2、《数据结构(C语言版)》
3、《计算机组织与体系结构?性能分析》
4、《深入理解计算机系统》【美】Randal E. Bryant David O''Hallaron着
5、《操作系统:精髓与设计原理》
6、《编译原理》
7、《数据通信与计算机网络》
8、《数据压缩原理与应用》
C语言书籍推荐
1. The C programming language 《C程序设计语言》
2. Pointers on C 《C和指针》
3. C traps and pitfalls 《C陷阱与缺陷》
4. Expert C Lanuage 《专家C编程》
5. Writing Clean Code -----Microsoft Techiniques for Developing Bug-free C Programs
《编程精粹--Microsoft 编写优质无错C程序秘诀》
6. Programming Embedded Systems in C and C++ 《嵌入式系统编程》
7.《C语言嵌入式系统编程修炼》
8.《高质量C++/C编程指南》林锐
尽可能多的编码,要学好C,不能只注重C本身。算法,架构方式等都很重要。
技术是通过编程编程在编程编出来的。永远不要梦想一步登天,不要做浮躁的人,不要觉得路途漫上。而是要编程编程再编程!等机会来了在创业(不要相信有奇迹发生,盲目创业很难成功,即便成功了发展空间也不一定很大)。
学习了这么久,觉得自己大学总算是没有白上,一个最大的体会便是大学就是根据自己的兴趣方向,通过各种途径自学的平台,希望有理想的同学不要浪费大学四年时光,多充实自己,为实现理想而奋斗!
参考文章:以上部分是从嵌入式在线论坛上看到的
http://bbs.mcuol.com/