怎样高效学习嵌入式

2019-07-12 17:13发布

1、学习linux 
根据我在论坛的了解,我选择学习嵌入式linux,刚好我们学校也重视嵌入式linux,从实验室到课程安排都是关于嵌入式linux方面,天时地利!这里我把学习linux的经验和教训说说。 


可以这样说,在论坛里说道学习linux差不多就学习linux内核。于是我电脑里安装了linux就开始看linux内核方面的书了。我记得来学校以前就买到一本陈莉君的讲linux内核的第一版,现在有第二版了。我就开始看那本说,大家说linux内核情景分析不错,我就买了上下册,后来又买了 《深入理解linux内核》,最后也买了毛德操的《嵌入式系统》也是分析linux内核代码的,主要讲arm相关的。 


看内核期间是个非常痛苦的过程,看情景分析有种在森林中找出路,其间我组织了一些同学学习内核,几乎没有几个能坚持下来的。我认为我是坚持下来了。情景分析在看第一、第二遍是几乎没有摸到门道,我分析有三个方面的原因:1、自己的基础差,这是最要害的。2、内核本身很难。3、没有交流和高人指点。到了第三遍时我才摸到门,才差不多知道个linux的大概脉络,很多细节也是稀里糊涂。 


学习linux总结,这里声明一下,我指的嵌入式主要是偏向软件的嵌入式。学习嵌入式的重点和难点要害在操作系统,假如没有把握操作系统,我认为很难把握一个嵌入式系统。即使在做嵌入式开发中,作应有层的开发几乎可以不知道操作系统也可以开发,我认为那是浮在表面的。很难深入和提高自己的层次。声明:一孔之见!不可深究! 
字串4




在学习linux内核过程中犯了一个极其严重路线错误:对linux几乎不懂就开始学习内核。我个人推荐一个学习路线是:使用linux—〉linxu系统编程开发---〉驱动开发和分析linux内核。而我差不多相反,实际上你不会使用linux也可以学习内核,但是假如你懂了这些东西学习更有效率。 


关于要不要学习内核的问题,我的回答如下:不一定。假如你是喜欢钻研的那你进入内核会满足你的欲望。同时对你以后的嵌入式系统的开发有很好的影响。假如你想从事嵌入式linux系统开发,最好对内核有所了解。假如仅仅是做应用开发没有必要。我打个比喻:c、c 、java等语言是武林中的某个武林派别的话,如什么拳法,什么刀法等,那么linux 内核应该是一个人的内功的反应。 


怎么开始学linux内核:最好有三件宝物:《深入理解linux内核》《情景分析》和源代码。 


先看《深》,那主要讲原理,似乎市场上有本讲原理性并且更浅,《linux内核设计与实现》听说不错。假如没有学习操作系统的,像我这样的,最好先看看操作系统原理的书。看了几遍后,就看情景分析,最好对着《深》看。两本交叉看,《深》是纲,《情》是目。最后深入代码。 


2、学习嵌入式linux 


学习嵌入式,我认为两个重点,cpu和操作系统,目前市场是比较流行arm,所以推荐大家学习arm。操作系统很多,我个人对开始学习的人,非凡不是计算机专业的,推荐学习ucos。那是开源的,同时很小。学习很好。为什么选linux,我不想讲太多,网上这方面的太多,但是我在工作中发现,做linux的技术路线很难,在windows几乎不会有的问题,在linux开发中几乎遍地陷阱。一掉进去划很长时间出来,一旦解决自己又长进了!相对来说开发周期长,难度大。现在资料也逐渐丰富起来,难度也降低了些! 字串8 


至于怎么学习,这是他的特 {MOD}地方,必须有块开发板,我是同学里最早买学习板的,虽然化钱,我认为值。对我实习和工作产生了很大的影响。 


假如没有开发板,那是纸上谈兵。有人说,那要1000-2000亚,的确是,兄弟,看长远的,对您的职业和发展那点钱不算什么!有的人说我站着说话不腰痛,好吧,钱这东西对我影响很大,我在大学里扫厕所,扫的不错,奖5元/月。兄弟你有过吗?我认为教育投资是效益最有保障的!我实习拿3k,很多同学拿1-2k,当然比我高的也有。虽然我现在没有毕业,但一家公司就签了。从事目前流行的高档的消费电子的研发。对于我两年前一无所知的我,应该有质的变化,我感谢学校收了我这个废品。当然我也非常的努力。说这么多并不是要炫耀我什么,实际上根本不值得炫耀,虽然现在工作环境和待遇比较满足,但是,我发现我很差,非凡是代码能力,我希望平常大家少玩游戏,多编程。编程才是硬道理! 


3、 学习板和培训 


你可以不接受培训,但是不能不买开发板。假如你想学习嵌入式一定要买块学习板,最好买块arm9的,贵些也值。可以跑高级操作系统。这个不要什么品牌公司的,一般不会出什么问题,市场上的板子一般是三星的2410,基本上是抄的。假如是做产品那要注重些。一般的公司一般要2000,加lcd要3000甚至更多。我接触到有的板只要1200,加lcd也就2000,差别比较大,我认为学习都够啦。 字串5 


对于培训,假如有条件最好参加,主要是嵌入式相对别的不同,自己摸索很费时,假如有高手指点非常的好,进步快。非凡是熟悉做这些的朋友。我接受过培训,熟悉个朋友。在以后的工作中帮我很多,在这里谢谢他!我记得哈佛的一个MBA的学生这样说,大意是:在哈佛学到什么不重要,最重要的是这些未来各大公司的高级治理人员是我的同学!真是有远见! 


目前市场是培训比较贵,一个星期两三千,真正算起来也要,那些讲师待遇绝对不会低。但是有个致命的问题是连续上课,一连几天,效果不佳。我希望社会上多出些1000元左右,并且时间长些,如一个月,一周一到两次课。假如没人做,我来做,哈哈! 


没有想到,一下写了这么多,其实还想写的,比如在中科院的一位老兄是怎样学习linux内核和看书的,真的很感动。他的为人我很钦佩。也想介绍毛德操的《嵌入式系统》那本书,对学习arm linux的很好,也想介绍实习和工作的东西,太长了,耽误大家时间。我也不想检查里面的错别字了,很多!就写到这里吧。 

另::: 工作快5个月了,一直从事所谓ARM的开发工作,但是上午突然迷茫了,觉得自己不知道方向在哪里了,甚至怀疑自己这个所谓的ARM开发是不是真正的ARM开发,于是放下手头的事情,开始思考总结。


最初来到公司实习的时候我曾经迷茫过,不过我相信那个是踏入社会必须的思维方式,那时候觉得一切都是陌生的,没法一下子适应,还好后来慢慢缓过来了,那时候实习我主要画了两块板子,都是照着ARM开发板画的,根据光盘提供的原理图以及现成的板子来做我的PCB,那时候有一定的Protel基础,但是从来没有真正做好一块板子投入生产过,所以很快就完成了PCB的绘制,但是漏洞百出,在老总眼里应该是不堪入目的,不过他是个很好的人,没有批评我,反而是鼓励。我的实习好像只持续了10天,可能是我相对比较熟练的protel绘图技能和LPC方面的基础比较适合公司,我很快就加入了公司,开始了扮演我进入社会后的角 {MOD},因为是新人,那时候老总没有给我什么任务,就是让我先熟悉公司然后就是学习,这个时间持续了几天,后来我慢慢开始接触一些模块,起初是一个微打,很简单的东西,但是我以开始硬是没打出东西,再接着是LPC2368板子的熟悉和调试,先是建立一下keil的环境,因为之前在学校接触的是ADS,开始要转到keil上有些不适应,环境的建立花了几天的时间,然后就开始先运行一些他的小程序来熟悉流程,由于Ulink的问题用JTAG下载程序总是出现一些错误,后来不得不用ISP下载,这个没法在线调试着实给我以后的调试带来了一些困难,几天的调试LPC2368下来感觉它给的例程很垃圾,写的太差,完全没有周立功的程序来的有层次,简单明了,但是我还是硬着头皮啃了几天,还没等我完全消化这些程序我的工作才真正进入了一个有序的阶段。


上面给一个任务然后我花时间完成它,这样的有序阶段一直持续到现在,到现在为止我已经完成了所有的布置的任务,这几个月感觉自己找回了状态,也真正开始觉得自己适应工作了。最开始的任务是FM1702的读写,其实这是个非常大的任务,我是最后才体会到的,一开始我没法完成它,我第一个完成的任务是GSM模块的调试,后来就是韦根的解码、韦根协议同时处理4个读头、SPI接口Flash读写、最后回过头来完成SPI接口的FM1702的读写。然后在10放假之前完成了LPC2148核心板的PCB设计,并且发出去做了钢网。


    放假回来,可能是放假结束综合症的影响,也或者是一些外部事物的触发,还有老总的话,使得我开始思考一些东西,开始迷茫,这么久以来甚至以后我虽然做的是ARM的开发,但是我并没有什么很大的收获,我做得只不过是一些简单的模块控制操作,更具体点说就是用了一个高级的单片机来控制一些小应用,这样真的就是ARM的开发吗?我迷茫了,这样我的进步速度太慢了,时间在流失但是我却几乎在原地踏步,甚至不知道自己这样做的东西是不是真的所谓的ARM的开发。


    网络总是个很好的东西,我想知道什么才是ARM的研发,所以我上网,百度告诉了我答案,我开始知道自己以后怎样去做一个真正的ARM的研发工程师,总体可以分为4步:


硬件设计=》系统移植=》驱动开发=》应用开发


我现在做的更高级的单片机没错,但是我接触的这些模块以及一些开发板的设计调试工作正是为我的硬件设计做铺垫,以后一定会上操作系统,那么就一定要系统移植,然后在系统上做一些硬件的驱动开发,最后是应用开发,看来我的大方向没有错,庆幸啊!


    ARM学习硬件设计阶段所要接触的一些模块,我大致罗列了一下,除了一些ARM知道的基本模块重要的模块还有:USB、232/485、TCP/IP、CAN、SD/MMC卡、GPRS/GSM、GPS、RFID等等,去看一本书,好像是《ARM体系结构与编程》,一个重要的说明你基本硬件设计可以过关的标志是你已经掌握了所有ARM芯片所提供的功能,以一般接口丰富的ARM来说,他的功能有:IO操作、外部并行总线、定时器、中断、UART、RAM、Flash、PWM、AD/DA、I2C、SPI、I2S、SSP、USB、CAN、以太网TCPIP差不多这些,如果你用的是更先进的芯片,那么你要查看芯片手册,看看他提供了那些资源,如果你熟练掌握了所有的资源应用,那么你硬件设计应该就是游刃有余了。然后是系统移植阶段,公司一般采用ARM7内核的芯片,那么移植的系统一般不会逃过UCOS-II或者uCLINUX,前者我现在在看,如果系统升级了,用上了ARM9的芯片,从开源的角度看,linux一定是移植的不二选择,如此我们就要去学习linux,学习linux的方法是:使用linux系统=》linux系统编程开发=》linux驱动开发=》linux内核分析,可以参考一些书籍:《深入理解linux内核》、《情景分析》、《源代码》。上了系统之后接下来做得就是驱动的开发了,比如在linux系统下的SD卡驱动开发,还有FM1702驱动开发等等,做好了硬件平台,移植了系统,学好了驱动,等于就是处于一个只欠东风的状态,接下来我们做的就是最后的工作,上层应用软件的开发,经历的这是个阶段,你才是真正的ARM嵌入式研发工程师,努力吧!