从51单片机到ARM嵌入式系统  版主的感想,不正确之处请指正

 

现在ARM很火,学生好像言必称嵌入式,但是为啥大学课程都是先开8051,再开ARM呢,版主的看法是:

   1、首先是8051是1980年出品,到写本文时近40年了,其结构简单,成本低廉,裸机开发,不跑操作系统,其作品一般叫嵌入式控制器,生产8051兼容芯片的厂家众多,每家都有一些产品完全可当8051用,管脚一样,就是说80、90年代的书 现在仍然可以看。
   而ARM公司不生产芯片,提供指令系统与设计方案授权,ARM自身有众多内核版本号,各大芯片厂又根据自己业务市场增减方案后生产,所以是没有哪个芯片标注ARM的,都是各厂家的型号,初学者光看型号就会有点晕,ARM教材需要注明“基于××芯片”来讲解,如果那款芯片不生产了,教材就价值不大了,各个教材通用性也不如51教材好,对学生而言,意味着总是参考资料不足,极端的情况是教材找到了,对应的芯片却停产了,51不存在此可能性。

   2、第二是8051简单,现在使用量仍然很大,可以预见的未来不会消失,因为4位单片机还大量存在呢,同等生产技术情况下,4位机、8位机、32位机,每级都要贵好多倍,位数越高则里面电路越多,成本越高售价就越高,但是红外遥控器(电视空调等)、冰箱微波炉电子表、音乐IC片计步器血压计等4位机足够,并且多用掩膜技术封装,就是一小块黑膏药那样封装的(看看LCD1602液晶电路板上的黑膏药吧)。4位单片机都还大量存在,8位机就不可能消失。版主就见过在校学8位机,工作时搞4位机的电子工程师,就为了降低产品成本和售价,最便宜4位机每个只要几角钱,8位机、32机能做到吗 。
   何况8051家族自己也在扩充,有些公司的芯片上自带A/D、PWM、IIC接口、多个串口、大内存,几乎就是一个片上系统SoC了。
   当然8051局限也很大,如果要运行web服务器(比如宽带路由设置界面),运行java虚拟机,做智能手机控制器运行安卓系统, 做DVD控制器、ADSL猫、无线网卡、无线AP热点控制器等,只有用更贵的32位机了,所以各档单片机各有其价值。
   一个连51单片机都没有能力动手的学生,很难相信哪个公司会把ARM项目让他来参与开发。其实搞几位机都行,关键是工作好找老板给的钱多。

   3、一字节就是8位,所以8位机最适合入门学习, 这是很显然的,另外8051动手成本低,元件便宜,不怕“毁坏”,反复焊接,不断拆拆装装,对提高动手能力最具性价比。其基本概念如运算器、存储器、GPIO、定时器、中断 、串口等各种单片机都用到,51单片机外围元件各类单片机都在使用,先掌握了简单的8051有利于向其他复杂的单片机转移,两步走比一步走要轻松 ,同时还掌握了一款使用量很大的单片机。  就8051而言,STC系列和AT系列单片机价格差不多,但STC的下载线比AT的便宜不少,所以学生多用STC系列,计算价格时还要考虑其电源和下载线的价格。

   4、开发8051单片机的方法和软件有很多相似性或通用性,51单片机一般用keil for C51 软件,加proteus仿真软件,进行裸机开发的,直接在裸机上写程序,这样速度快,一般用于要求快速反应的实时控制系统; 现在的大多数ARM教材也是当一款高档单片机来讲,进行裸机开发的。初期从8051转来的可以先用keil for ARM 软件,加proteus仿真软件,直接在裸机上写程序,以后再用ADS开发。版主可向本站好友提供这种ARM例程,网上也很多例子。   keil for C51 和 keil for ARM 用法界面完全一致,只是底层按51编译还是按ARM编译,这样转换最顺手。
   ARM高档单片机,可以跑操作系统,但不是一定要跑操作系统,完全可以仿照51单片机按裸机开发的。
   所以ARM不必然代表嵌入式,ARM可以称为“可以跑嵌入式系统的高档单片机”,具体到一个项目是否跑操作系统,由开发人员而定。

    5、当你学会了51单片机,达到可以独立设计项目(比如能把本站典型制作两三个项目整合为一个更大项目)的水平,想对ARM进行裸机开发, 需要翻翻书,看看其汇编指令系统,不用试验仅当了解,暂不看Thumb指令集,把它的运算器、存储器、GPIO、定时器、中断 、串口等资源与51对比,看看多了那些,增强了那些,那些是51完全没有属于ARM新增的,这样有用大概了解后,直接找一些ARM的C语言例程来看,特别是与你用51做过的项目相似的例程(包括其外围元件也相同或相似),用keil for ARM 软件,加proteus仿真软件,跑一跑其程序, 看不懂的程序再找书上相关部分看,有过硬的51基础,就不再对ARM从指令开始学,而是倒着从项目例程开始学,这样上手比较快。版主可向本站好友提供一些例程供参考。 但这只是入门,因为ARM还是要用在8位单片机不能完成的工作上,只有这方面做两三个项目才算正式掌握。

    6、如果真想学嵌入式操作系统,又分为实时的如μCOS-II,和非实时的如ucLinux/Linux/android等,从学习角度看,因为不要求达到实时系统的毫秒级甚至微秒反应速度,内存较大的51单片机是可以跑μCOS-II的,作为学习是完全够用的,由于μCOS-II比Linux简单 (只有内核无文件系统也无人机界面),适合先学会后再学Linux。如果那位同学只想学习嵌入式系统原理则μCOS-II最好,如果主要搞控制用则主要学μCOS-II, 因为Linux不是实时系统只用于消费类电子产品。
   如果要学习μCOS-II,本站可以提供在51上跑μCOS-II的例子。打个比方,学会51单片机编程相当于学会了汉语,现在要学ARM的μCOS-II相当于学习英文版的算术, 要先学英文(ARM机),再学算术(μCOS-II),比较困难,学51上跑的μCOS-II相当于用已会的汉语学习算术。学会了,有需要时再转向ARM的μCOS-II,还有需要再 更深入学习ucLinux/Linux/android等。 要特别注明一点,在51上跑的嵌入式系统不用于实际项目,仅用于学习,因为51跑了嵌入式系统后速度变慢,就不一定能达到实时控制要求的速度了。

    7、把上面的主要内容,画一张图来表示吧

    通过上文,你还认为,51单片机没有价值吗,如果认为正确,请努力先学好8051吧。版主的工作是对大二下教单片机,大三上教单片机课程设计,再对下一届的大二下教单片机,循环,既然全年都在教单片机,那就就专注于51单片机吧,不宜过多的讨论ARM和嵌入式系统的问题了

    8、再补充一张ARM9教材目录与51单片机目录对照表:

ARM9在ARM系列中为中档,ARM7、Cortex-M等更简单些,电子类专业用得更多些,ARM11等更多要跑OS,更偏软件些,估计计算机专业学生可能更要侧重些。通过上图,可见连8051理论都搞不懂、动手也不会的,就不别想ARM了吧。
     还有一点就是,单片机教学时间合适,我院本科生在大二下和大三上学一年,在4年最中间,可以静下心来认真学习和提高动手能力,ARM在单片机之后,一来ARM有点偏软还有点贵,二来有些人想考研,对学ARM有点有心无力了,所以单片机没有学好,想靠ARM来补有点天方夜谭吧。  以上是版主的感想,本人主要教51单片机,尽管会玩玩ARM,但没有教过ARM和操作系统,没有从教学角度有更深入的体会,并且本文是假期写的,没有请教ARM的“牛”老师把把关,先发在此,不正确之处请网友指正。

与单片机相关的概念:单片机、DSP、FPGA/CPLD、可编程模拟器件、ASIC(专用集成电路设计)、片上系统(SoC),自己百度吧。