对单片机感兴趣的同学可能最终都会走上嵌入式这条路线。接触单片机,基本上都是从51开始的,相信学完51单片机之后对I/O操作、定时器、中断、AD/DA这些东西都有比较深的理解,也基本上学会了如何通过单片机去控制一些外围设备。
基本上到这个时候,都接触过ARM的概念了。确实,接下来该学习ARM了,如何选择一款ARM芯片,如果周围有一个比较不错的学习团队,比如说XX老师的实验室,那就跟实验室的保持一致就OK了,如果遇到什么问题,眼前就有现成的师兄或者老师可以问。如果是一个人自学,网上查查,选择一个比较热门的,这样的话,网上的资料比较多,学习起来也容易。我们实验室用stm32系列的ARM芯片有好几年了,所以我就直接去学习stm32。个人感觉stm32系列的单片机还是不错的,有专门的库,网上的资料也非常多。网上三星s3c24xx单片机资料也非常多。不管学什么东西,一定要是理论和实践相结合的,所以一块开发板是必备的,甚至如果是做通信实验的话,需要好几块。这段时期,感觉学习的重点还是各种通信协议的接口,比如I2C、SPI、串口、SDIO、CAN等等,结合一些具体接口的模块,用MCU去操作这些设备,学习起来还是比较快的,同时也能加深对IO、定时器、中断等等在51单片机时代学到的概念的理解。比如我们项目上有用到射频无线通信的功能,在网上买个无线通信的模块,SPI接口的。调通这个模块,以后碰见SPI接口的设备都就不怕了。如法炮制,像i2c、串口这些东西都可以按照这种模式去学习。一定不要怕在网上买一些学习的模块,对知识的投资绝对是一本万利的。像LCD、摄像头模块、以太网通信模块、wifi模块、射频模块等等还有好多。这些东西买回来,自己写程序,调通了,那印象是非常深刻的,以后遇到同类的设备绝对会很快就上手。这个阶段学习完之后,相信对用MCU去操作一些外设这种事绝对是轻车熟路。
接下来有个非常重要的东西就是操作系统,相比与操作系统,那前面的学习真的是小巫见大巫,如果仅仅是应付一般的中小项目,裸机感觉应该是够了,前提是嵌入式在你的项目中扮演的是非核心角色。比如我们正在做的一个项目,单片机在里面扮演的只是数据采样、通信和算法的实现手段的角色,那不带操作系统是够用了,因为项目最核心的东西是控制算法。如果是要学习操作系统,那么uCOS绝对是个非常好的学习资料,结合邵贝贝《嵌入式实时操作系统uCOS-II》这本书。因为uCOS整个源码就不是很大,阅读起来也比较轻松,结合一些移植手册,移植到你的MCU上,再自己写一些测试的程序,相信会对操作系统中调度、抢占、挂起、并发、竞争、进程间通信等等这些概念有个非常深入的理解。学习uCOS只是对操作系统这个东西有个比较感性的认识,最终还是要走上linux这条路。
本着学什么一定要有什么的理念,还是在自己电脑上装个Linux比较好,也不用卸载掉windows去重装linux,在VM虚拟机上装个linux来练习就足够了。linux打基础的话,还是主要学习bootloader、文件系统、linux系统编程、linux命令、shell编程、makefile、gun等等。对linux有个比较清晰地认识之后,感觉就需要有个发展的方向了。个人感觉一个比较好的方向就是linux驱动,安卓的火爆不必多言,安卓驱动中的核心就是linux驱动,一些开发手机、智能设备的厂家对这些人才还是蛮需求的。如果是往这个方向发展,一定是对C语言、数据结构非常熟悉,对linux内核理解比较深入。剩下一个方向就是应用,但是个人感觉从嵌入式走到这个方向比较尴尬,MCU+Linux+Qt确实能做出一些基于图形界面的应用,但是这些东西这些年全让安卓占领了,很明显的一个现象就是学校里面学习Qt的人非常少,图书馆中Qt方面的书都非常少。如果走到这一步去转型做安卓app,又有一大堆东西等着你学习,java、数据库、jsp、html、xml还有好多我不知道的,相比于计算机专业的学生,缺点太明显,同时又放弃了对硬件比较擅长这一优点。如果是计算机专业的学生,走到linux这一步,运维、网络、服务器、安全等等都是非常好的方向,很明显,这些东西对于嵌入式的学生来说又很陌生。所以说驱动是一个不错的方向,如果驱动也不想做,那么就趁早不要接触操作系统,只是把单片机当作你的一种控制手段,学好电子方面的知识,不管是做电源、控制电机或者别的什么开发,单片机只作为一种控制手段,如果需要的话再学学DPS、FPGA等等。
推荐几本阅读过比较好的书
《数据结构C++语言描述-应用标准模板库(STL)》照着书上的例子,自己实现一些数据结构,相信会对数据结构有很好的理解,800多页的书,看起来一点都不枯燥,看了两遍,以后用到了再翻。
《剑指offer》数据结构和算法学的好不好,做做上面的题就知道啦,有些编程小技巧真的是不看不知道。
《UNIX系统编程》读起来不像《UNIX环境高级编程》那么吃力,会对UNIX的进程、线程、IPC、互斥、文件系统等等有比较好的理解,例子很多。
《鸟哥的Linux私房菜》Linux入门必备。
《嵌入式实时操作系统uCOS-II》+阅读源码 真的是可以零距离接触一下操作系统。
《计算机网络》互联网这么发达,不了解一下你的数据是怎么从互联网走出去的怎么行?
《例说8051》+郭天祥《10天搞定单片机》视频+51开发板 51入门,个人感觉最快最容易的方式。
还有很多太经典的书就算了,经典巨著,不到一定火候,看起来会非常吃力,《UNIX环境高级编程》《深入理解linux内核》等等,太多了。