本帖最后由 znmcu 于 2013-12-18 00:49 编辑
振南启示录 V
作事情和学东西都应该作到灵活变通,这样才可以以不变应万变,悟所学之真谛。这是一个尽人皆知的道理,但要真正作到却非常不易。我认为,活学活用是建立在深厚的知识与经验积累之上的。
我知道很多人都是从51开始学起,一步步地进入单片机及嵌入式领域的。熟悉了51单片机的使用与编程方法,难道就标志着你已经学会单片机了吗?经常会有人问我:“振南,你会不会AVR?你会不会PIC?你会不会ARM?你会不会DSP?……”我反问他:“51你学过没有?”他说:“学过,而且用得还不错,但是我现在的项目用51可作不了,要用更高级的芯片。”我只能告诉他:“你还没真正学会单片机!”
学习51到底是为了什么?难道只是为了学会这一个芯片吗?换个其它类型的单片机就搞不定了?甚至仅仅是更换一下芯片型号。确实有这样的事情,而且不在少数,曾经有人问我:“我会用STC89C52了,AT89S52怎么用啊?为什么用STC-ISP不能给他下载程序呢?”我简直恨得咬牙切齿:“你学半天就学成这样了?动动脑子嘛!”在初学者面前,51应该是一种单片机的模型,通过它我们应该作到触类旁通,举一反三。
实际上,单片机乃至于ARM、DSP在硬件上真得没什么。在51上我们所学到的东西,在它们上面其实基本上都有。只不过是在工作方式、功能强弱、寄存器的定义与配置方法等方面有所不同而已(具体应仔细研读芯片数据手册)。比如PIC、AVR上有定时/计数器,51上有T0;ARM上有总线可扩展ROM与RAM,5、1上有XDATA外部总线;DSP上有乘法运算指令,STC的增强51上也有相关指令;STM32有内置ADC,STC51中也有,只不过位数少一些。所以,如果真得能把51学透学精,单片机中各种常用的概念与功能基本上都能囊括。当然,有些内容确实是比较高级的,比如DMA、LCD控制器、NAND控制器、USB、SDIO、MMC等等,这些正是有待大家水平不断提升后再去研究和使用的。不过说实话,你觉得它高级、深奥、复杂,其实在所谓高手眼里也并没那么简单。有些东西的难度是固有的,搁谁也要花些精力去慢慢消化。
有很多人还分不清芯片与内核的关系。所谓内核,其实仅仅指的是CPU,比如MCS51、ARM7、ARM9、Cortex等等。它们使用的指令集以及硬件架构都完全不同,这一切都源自于内核设计者的创造力,他们的研究成果被称为IP(有些公司专门以设计IP为业,比如ARM)。但是他们通常并不是CPU及芯片的制造者,而是以转让或授权方式交由芯片制造商来进行生产和销售(它从每一块芯片中获取一定的授权费用)。Intel当初在发明了51内核之后,很多厂商都相继推出了相应的芯片,比如Atmel的AT89系列、Cypress的C8051F系列、ADI的ADuC系列、TI的CC系列、SST的SST89系列、Winbond的W78系列等等。同样,近几年被炒得火热的由ARM设计的Cortex内核,也是授权给了很多芯片厂家来进行制造,比如ST的STM32系列、TI的LM3S系列、Nuvoton的NUC系列等等。我们要知道,一个内核不论在谁手上通常都不会被直接制造成芯片,因为内核本身可能并没有ROM、RAM、中断控制器、IO等这些硬件资源,因此它是不能直接拿来跑程序的。芯片厂商会在内核的基础上进行二次开发,将一些必要的硬件外设挂接到内核的总线上来,最终才形成了我们所看到的资源丰富而且实用的芯片。当然,这些挂到CPU总线上的外设大多都是由芯片厂商自己设计的,所以这就造就了各种芯片虽然内核相同,但在使用和配置上可能存在很大差异。比如同样是ARM7内核的芯片,Atmel的AT91系列中操作IO的方式是直接向数据寄存器的相应位写0或1,而NXP的LPC21系列却是要向IO置位与清零寄存器中写1来实现这一操作。我本人就认识一些在国内知名芯片研发单位工作的朋友,他们每天的工作就是向内核挂外设,并进行相关测试工作。因此,我们学习单片机应该学习CPU内核(它涉及到具体的CPU架构、指令集、总线,这些决定了CPU的性能以及如何对它进行编程),而对于片内外设只需要在真正用到的时候仔细参阅芯片手册,配合调试却可。而实际上,很多人却把大部分的精力放在了学习外设上,并把它们当成了芯片的重点。不过,不论学习的侧重点在哪边,是内核或者是外设,随着经验和知识的不断积累,最终都能达到融会贯通、灵活掌握的程度。因为实际上内核与外设是密不可分的,只要功夫到了,你就能成为高手。
以我近10年的研发与学习经验来说,我几乎已经用过了所有的常见CPU芯片,很多时候我都是以玩芯片为乐趣。这使我深刻体会到各种CPU芯片的特点和缺陷,了解到各芯片厂商在芯片设计上的一些特有风格,熟悉和精通了很多外设和总线接口的使用方法。现在,在我眼中各种CPU芯片早已无差别,我也早已不再去专门地学习某款芯片了。在拿到一片自己从未见过的芯片时,哪怕是所有人都未用过的最新型号,只要有它的配套数据手册,就依然可以运用自如。在我的实际工作中,会经常同时横跨好几个项目,每个项目都可能会使用不同的芯片,比如ARM7、Cortex-M3、TMS320F、PIC等等,但我并不会觉得有很大的压力,一切工作都按部就班地进行。要在研发工作中作到游刃有余,能够有的放矢地解决各种技术问题,也许我们还需要继续努力,不断充实自己。
如果你真得想要真正进入到嵌入式领域中来,想成为高手中的高手,就请你时刻不要忘了汲取经验和知识,当你的头脑已经可以强大到成为一个“专家系统”时,你在技术海洋里任意畅游的时刻就到来了。此时你会发现,各种在一般人眼里望尘莫及的新兴思想与高端技术你似乎已经可以接受和消化了。深厚的积累为你打开了一扇窗,来接纳更多的精华。
|