刚才一个在校生问我关于嵌入式入门学习之类的话题,说实在话,这种问题我回答的太多了,以前在CSDN,郁闷的是没有整理成一篇文章,现在当即回答这位同学的问题。
尊敬的gooogleman,在基于ARM--WINCE嵌入式入门阶段遇到了一下问题,有的是方法性的问题,苦于周围没有学习这方面的高手,有以下疑惑不解,纠结啊,还请不吝赐教
1. 如何利用手开发板学习,虽然网上介绍了一些方法,但感觉还是太泛,还是基于Liunx的,希望您能赐教您的WINCE的学习经验(偏向底层驱动,应用层也可以),学习的步骤。
——我觉得你像大部分人一样,估计都是存在如下两种心理:一是求捷径,二是太心急。不过我要在这里用我以往过来人失败经验告诉你,学习嵌入式没有太多捷径,真的,只有一个好的流程可以稍微帮助我们顺利的少走弯路,但是我觉得大部分都是靠汗水获得知识技能的。至于心急嘛,我想年轻人都这样,但是这种心态导致欲望过强,期望过高,导致自己信心很快被残酷艰难的学习历程打击,然后得出一个无奈的结论:我根本不适合学习嵌入式,或者我自己根本没能力做这些,甚至有些人会一蹶不振,觉得自己能力很菜,郁闷不已。以上事情我都经历过,我几乎放弃了学习嵌入式,我买了两块2440开发板学习,然后被打击就放弃了,一年多都不敢再谈嵌入式,不敢再谈linux,一直到大学毕业,那个郁闷的2440 linux 学习计划一直都是我不愿意提及的伤痛。其实我真的放弃了嵌入式,其实也放弃了自己对技术的自信和自尊,我大学毕业找工作都不敢再去找技术的工作,因为从那次2440 开发板学习悲剧事件让我对技术不再有自信。但是命运非常的神奇,在找销售,技术支持等等工作都不顺的时候,突然签约了一家做嵌入式产品的公司,于是我很害怕,很害怕自己会丢了这份天赐的工作,我就反省学习了很多程序基础,后来到了公司直接做2440 wince驱动开发,貌似一不小心就成了进步最快的人,我也对嵌入式不再恐惧,那段疯狂的CSDN 博客+论坛轰炸时光大家都是知道的了,嘿嘿不说以前那些尴尬的事情了。从郁闷到爽快的嵌入式学习经历告诉我一些很宝贵的经验,就是学习嵌入式心态要好,绝对不能急于求成,并且不要只关注那些复杂的东西,其实我们学习嵌入式之前要更加关注一些基础,比如C语言的能力,比如电路图,比如一些硬件调试能力,比如一些比较简单的开源操作系统学习了解,比如ucos,还有就是ARM基础知识的了解,比如非常重要,但是却很多人都不注意学习的bootloader(wince是eboot,linux是uboot)。这位同学问我有什么经验流程,我觉得我之所以获得了信心,我的确是抓对了流程,我学习wince流程是这样的——加强补习C语言,找很多经典的C语言书籍体验,我心态稳定,我从bootloader学习起,不怕大家笑话,2440 的bootloader我都看了三个月,直到我对ARM有一些体会为止,之后我没有像大部分人一样幻想自己成为驱动高手,我是看了一些ucos 的东西,后来我再看很多wince书籍,不管是好是坏,总之我看了总有一些帮助,对wince 有一些了解我就自己拿公司的产品DIY,在不计较任何报酬的情况下,我独立一个人升级了整个wince 产品的系统——当时心态很好,只想学习,很单纯,纯的像桂林的空气,现在销售还反馈,当时这个产品是公司目前最为稳定的产品,让我多少有点自恋的技术情节。至于应用,我也是大学玩过一些MFC的,所以我用EVC写wince test application demo 是不成问题的。至于linux,我觉得方法也一样的,只是后来的os 学习换成linux,不知道你们明白我的意思没有,我再强调一遍啊——嵌入式前奏要做好,C,一些微机原理,单片机这些要学好,不然是学不会的,然后是bootloader,然后是os,然后是os 项目实战。至于应用,更强调的是设计模式理念,这个我不敢发表意见,感觉应用灵活,调试比较方便,但是要写出符合逻辑的软件也不容易的。
2. 目前手头上(实际说实验室公有的,呵呵)有一块杨创的2440开发板,但苦于没有实验指导,就是手头学习资料太少,不知道如何下手,能给点建议吗?正因为如此所以想买一块开发板,尤其是附带丰富的资料。
——扬创的2440 开发板应该属于不是很主流的吧,你没有资料当然没法学习了,高手就可以在只有电路的情况下独自玩耍。
3. 在已经带有wince操作系统的开发板上能不能运行“裸机代码”,按照我目前水平的理解好像不行,操作系统用的是虚拟地址,而裸机代码就是单片机程序,如果要运行裸机代码,是不是要将OS去掉啊,该怎么做呢?
——必须去掉的。至于怎么做,看你的开发板手册了。
4. 学习基于WINCE的嵌入式开发,尤其想学习驱动开发的,应该如何下手呢?是不是先跑裸机代码,然后bootloader,然后流驱动,再本机设备驱动,原先看杨创光盘自带的bootloader代码,只能看懂个大概,将BOOTLOADER代码重新编译一遍,然后烧写nboot之类的啊?
——据我所知扬创的开发板bootloader并不是完全开源的。这些你看手册吧,呵呵,我没怎么接触这家开发板。
5. 之前看过BOOTLOADER和USB驱动,串口驱动,发现这驱动代码文件里面的内容太“丰富”了,比如串口的MDD+PDD,USB的USBD+HCD+特定硬件驱动,虽然说只研究与自己开发的硬件相关的内容(PDD,硬件相关的驱动),全部看完很费劲,不堪了心里有个结,纠结啊?
——你太心急了,请看问题1 ,淡定吧。欲速则不达,中国哲学还是很有用的。