老杨学习单片机之路

老杨者杨百军也,豫东一农民之子。千禧之年,也是一个龙年,我第一次走出农村走出小县城,走进古都洛阳城。

这一年,我考进了一个二本院校—洛阳工学院。我之所以能走进洛工,还要特别感谢两位老师:杨明祥老师和高克权老师。杨老师是我的高三班主任,是他在我填报志愿之时,拿起笔为我修改并填写了第一报考院校—洛阳工学院,我也是在那时才知道该院校,没想到之后它就成了我的大学象牙塔;高老师是我大学时的系党委书记,进入大学之后,听班长说是高老师在省招生办招生时将我们几个总成绩稍差但数学成绩较好的学生调剂到数学系的。可以说没有这两位老师的帮助,也就没有我今天的学习成果了。

【按语】由此可见一位教师对一个学生可以产生多么大的影响,也许他一个小小的动作就可以改变一个学生的一生。前年暑假回老家,同样听说一位老师建议学生修改志愿的事,不过与我的相反,该学生平时成绩一般,高考发挥超常,但是老师建议其按平时成绩填报志愿,就这样该生失去了进入重点院校的机会。

就这样,我走进了洛阳工学院,走进了数学与应用数学专业,在这里结识了我的58位兄弟姐妹。

大一上学期(2000年下半年),我知道了什么是计算机,学习了Windows 98系统和DOS系统(那时流行的是Windows Me系统)。当时计算机还不是很普及,我对计算机的认识几乎是空白。学计算机基础(Windows 98)时,我到图书馆办了一张计算机学习卡,每天过去练习打字(练习键盘盲打)。每次过去,空荡荡的一个机房只有两三个人在那里“啪嗒、啪嗒”地敲击键盘,就这样练习了一个月左右,老杨也可以“挥指如飞”了。

大一下学期,我们数学专业还没开C语言课(工科专业都是此时开的),我就跟着我的师兄师姐们(99级)学习。不知道什么时候,我开始迷上了计算机,并且开始了我大学里的第一次蹭课经历。

后来,为了更好地学习计算机,我在涛哥的帮助下买了学姐毕业离校时卖的二手电脑,那是我的第一台计算机,是一台老古董:386的CPU,2GB硬盘,64MB内存。就这还是品牌机呢!据那位学姐说,买时价值15000多元呢!这台计算机旧是旧了点,不过我在它身上还是学到了不少的东西,开始是安装操作系统,Windows 98、Windows Me,我自己都不知道折腾了多少遍;后来打开机箱研究内部的零件,计算机硬件的那点知识都是在它身上学到的;再后来就是安装VC++ 6.0,调试C语言程序。

大二上学期跟着同学们开始报考计算机二级C语言考试。同时,也开始了我的大学蹭课之路,从电信、自动化、计算机到夜大,几乎我能在大学里找到的喜欢的课程都去蹭过,一直到大四,我还去蹭计算机专业的编译原理。

大二下学期报考计算机三级数据库考试,我们专业开了数据库课程。同时为了不影响学习,我把那台古董计算机转出去了,虽然搭进去了几百块“大洋”,不过感觉还是蛮值的(如果保存到现在,不知道会不会像Apple I那样升值呢……)。

大三报考计算机三级PC技术、网络技术考试,10月份参加高级程序员考试。通过这一系列的考试,最后我才发现自己比别人多的只是几个证书,从能力上讲和别的学生没有太大区别。

大四上学期,我开始专心学习VC++ 6.0。学习VC的过程是痛苦的,买了几本入门级的教材,错误百出,又无处请教,那种痛苦只有编程的人在调试BUG时才能体会到。就这样磕磕绊绊学了一个学期,基本还是处于“Hello World!”的阶段。

大四下学期开始忙于毕业设计、帮同学做毕业设计,能者多劳嘛!兄弟们都知道老杨学了点计算机,只好帮大家做点事了。我们自己的专业主要是用Matlab、Mathematica编程解数学题。

总结一下我的大学生活,感觉还是很充实的。自己的本专业除了学一些数学基础课,还学了C语言、数据结构、数据库等计算机课程,同时又旁听了电路、模电、数电、软件工程、操作系统、微机原理、计算机组成原理、编译原理等计算机课程。虽然不能说都学得很好,但有些课程的理论基础还是有的,这也为我以后走上工作岗位自学单片机奠定了基础。

【按语】大学里,老杨几乎没利用过的资源就是实验室—也是学校最为宝贵的资源之一。当年的老杨盲目于考证书,现在的大学生倒是钟情于参加电子竞赛,参加竞赛可以快速提高自己的学习水平,这本是一件好事,郭天祥老师就是这么走过来的,但如果过于追求竞赛—为竞赛而竞赛,我觉得也会影响到大学理论课程的学习。大学里,我们重点要修炼的是自学的能力和基础理论的积累,以嵌入式程序设计为例:在大学里,如果学好了电路、模电、数电、微机原理、C语言、数据结构、软件工程、操作系统等几门基础课,工作之后不管是AVR、ARM、DSP等,还是当下比较流行的其他片子,都能很快上手,而且还可以在这条路上走得很远。因而,我并不建议在大学里过于追求参加竞赛、过于追求当下流行单片机的学习,这样会影响基础理论的学习(因为那些课程的学习过程本身就是比较枯燥的),有一天离开了大学,就很难再拾起这些理论知识了。

2004年我就业了,进了洛阳本地的一家科研院所。工作之后,我才认识到什么叫VC++编程,在这里,我开始在同事的带领下啃侯捷老师和潘爱民老师的著作。可是这段学习是短暂的,我后来被派到深圳一家分公司学习,在那里开始认识单片机程序设计,也了解到一些深圳小企业的发展模式:抄板、尽快出新产品。我在那里跟的产品是电话交换机—智能话务员,也就是现在很多公司电话总机用的那种自动提示的东西,如10086。通过这个产品,我有两点比较深刻的认识:第一,要想设计附加值比较高的产品,就要将软件和硬件结合起来,做单片机程序设计;第二,通信协议到底是怎么一回事,以前学计算机网络,七层协议考试时几乎可以倒背,可是真正地理解通信协议还是在那时。

2005年,我被公司召回洛阳,安排进一个新的产品线—安防产品线,开始指纹产品的设计。在这个新产品线上,我开始零距离接触单片机AVR、DSP。也是从这一年起,我开始自学51单片机,真正地开始了老杨的学习单片机之路。

学习51单片机大概用了4个月左右的时间,白天上班,晚上和周末用来看相关的视频、看书模仿实例,最后编写、调试代码。之后开始着手学习AVR—ATmega8。刚好公司新来了一批北航的大学生,后来也是这批学生中的小同事李兴国向我介绍了Proteus这款软件,当时的版本是6.7,我一接触就喜欢上了它。

2006年,我利用晚上的时间把学习过的内容整理了一遍,于是就有了《Proteus-ATmega8仿真》这份资料。我上传的第一个网站好像是阿莫的ouravr(后来改名为ourdev),当时阿莫还在禁传Proteus,但好东西总是会流传开的,也许是当时写Proteus仿真的教程还不多吧,很快该教程就在各个AVR网站流传开了。2010年年底,电子工业出版社的王敬栋编辑找我写书,我想应该也是看到该篇教程的缘故吧。

【按语】当年随手之作,没想到为我后来著书做了铺垫。这也提醒各位读者,要学会无私地奉献自己的学习心得,学习的经验只有互相交流才能有更好的进步,如果我学习单片机时也像我在大学里学习VC++一样,闭门造车,可能就不会有今天的成果了。

2007年至2009年,是我漫长而痛苦的学习ARM+Linux的过程。当时学习困难有三个原因:一是当时的ARM还是比较新的事物,在南方的公司已经成为产品,而地处中原的洛阳,很难找到能够学习的地方(当时网上的相关资料还不是那么丰富,好的教材也没有现在多);二是要学习的内容太多,Linux系统、GCC开发环境、ARM系统、BootLoad移植、系统移植、驱动开发等,每个环节对我来说都是新的;三是自身的硬件基础比较薄弱,学习ARM内核和移植uboot、移植Linux的过程艰难而漫长。

2010年,我终于开始尝试着带领一个小团队将“夹生”的ARM+Linux系统移植到我们的产品中。

2011年,受王敬栋编辑相邀,完成《51单片机工程师是怎样炼成的—基于C语言+Proteus仿真》一书。

2011年下半年到2012年6月,完成《AVR单片机工程师是怎样炼成的—基于C语言+Proteus仿真》一书。

单片机的路上,老杨愿与你同行!

老杨