关键词:单片机 嵌入式 RTOS μC/OS 教学 培训
引 言
??在2003年天津举行的“全国单片机及嵌入式系统学术年会”上,来自全国各地几十所大学的教师对单片机与嵌入式系统教学展开了热烈的讨论。这里,就我们的认识介绍如下,以达到抛砖引玉的目的。
1 单片机与嵌入式系统应用类课程的转型期
当前,单片机与嵌入式系统应用类课程正处在转型期。过去的20年中,单片机市场与需求都是以8位机为主的。最近几年来,16位、32位单片机的嵌入式应用呈迅速增长的趋势。在一两年后,数量上虽然仍会以8位为多,但32位单片机在产值上会超过8位单片机,如图1、图2所示。今后,单片机应用将呈现8位、16位、32位单片机并举的格局。
由于单片机系统的需求越来越复杂、集成电路技术发展又非常快,片上存储器容量不断扩大,使得在片上系统的开发中,使用嵌入式实时操作系统(RTOS)成为可能。计算机对于90%以上的学生都不能是他的专业,而只是一种工具。同各行各业开发单片机应用的工程师一样,非计算机专业的学生来自各个领域,他们不可能将主要精力花在研究操作系统上,而是要把主要精力放在所研究的专业上,他们需要的是把计算机专家们研究的成果直接拿来使用。RTOS可以将一个复杂的应用分解成多个任务,从而简化应用程序的设计;RTOS可以保证系统的实时性达到或接近理论上可以达到的最好水平。而多任务本身会带来一系列的问题,主要是任务间的竞争、死锁、优先级反转、任务间同步与通信等。这些问题有RTOS为用户考虑,只要知道RTOS的原理,会使用就可以了。故单片机教学的这次转型,引入RTOS概念是一大特点。
2 单片机教学史的回顾与思考
回忆过去我国单片机教学走过的路,大多数院校都是从8051走过来的。故8051在国内普及单片机应用方面功不可没。而总结一下由8051教学模式带来的副作用,将有利于目前的转型。
图1
一个副作用是,教学中以一片8051配以不同的外围电路去适应各种不同的应用。这就忽略了单片机应用的多样性和单片机应用的个性化定位。单片机姓“单”,世界上的单片机至少有上千种,每种单片机都有各自的定位。我们强调的是SoC,即片上系统,只有将整个系统都集成在一个集成电路芯片上,才能做到低成本、高可靠性。只有在不得已的情况下,才扩充额外的接口芯片。故应告诉学生,虽然学的是某种单片机,但针对不同的应用要选择最适宜的单片机。单片机教学要求教师教会学生一种方法,会用这种单片机,自然也会用其它单片机。
过去8051教学引入的另一误区是使用仿真器。如果说过去开发掩膜型单片机使用仿真器属不得已,则如今单片机都采用了可以反复擦写十万次以上的Flash存储器,实在没有必要使用仿真器。本人在过去20年的单片机应用开发中,就从来没有用过仿真器,并非没有仿真器可用,只是不主张使用仿真器,特别不主张使用仿真器教学。仿真器使单片机开发变得不直观,高价的仿真器增加了开发成本,也增加了教学的负担。开发者不可能为每一类单片机买一种仿真器,只好以自己有仿真器的那种单片机去适应所有的应用,从而误入歧途。
3 是教学还是培训
我们这里讲的是教学,不是培训,教学不同于培训。俗话说,“授之以鱼不如授之以渔”。教学是“授之以渔”,授之以解决问题的方法,培养解决问题的能力,是引导学生入门。通过授课与实验,要求学生能做到三个看懂,看懂原文手册、看懂硬件原理图、看懂别人写的程序。在此基础上学会如何掌握一种自己不熟悉的单片机。我们讲CPU硬件结构,讲汇编指令集,教学生如何初始化串行口,从而实现与单片机的CPU“对话”,进而学会写监控程序,然后将如何与C语言接口,以μC/OS-II为例,讲RTOS基本概念,进而移植μC/OS-II。
培训的目的是让用户尽快上手,一周乃至三天后就可以开始写应用程序。培训是“授之以鱼”,培训的典型例子是教学生如何使用某单片机的仿真器。
教学,强调的是引导学生入门,只要我们能正确地引导学生入门,告诉他们什么是正确的方法,后面的路他们会自己走。
4 将μC/OS用于RTOS教学
1995年以后,我们逐渐将μC/OS、μC/OS-II引进单片机应用的科研与教学,证明是成功的。μC/OS、 μC/OS-II是专门为嵌入式应用设计的实时内核,适用于几乎所有8位、16位、32位单片机;90%以上与硬件无关的代码用C语言写成,用汇编语言写的与硬件相关的代码不足200行;有PC机上可运行的范例;有针对数十种知名CPU的移植范例可直接从网上下载;有注解清晰、书写规范的全部源代码。有一部600页的书对RTOS基本概念、内核原理做了详尽的描述,随书所附光盘上的μC/OS-II V2.52通过了美国航空航天管理局的安全认证,可用在与人性命攸关的控制系统中,是一部科学、实用的好教材。该内核的前身是μC/OS,最早的版本是为Motorola 增强型8位单片机68HC11 CPU写的。68HC11曾经是世界上产量排名第三的(第一是68HC05,第二是8051)著名单片机CPU。1995年前后,我们曾以68HC11作为单片机应用的教材,并出过一本《MC68HC11单片机开发技术》的教材,清华大学出版社出版。目前,68HC11逐渐被与之指令集在源码级兼容的 CPU12 替代,故我们的研究生教学也将顺势转向采用16位的CPU12 单片机。
我不主张将嵌入式Linux、μClinux等用于教学。它缺乏适当的定位,虽然有源码,但并没有一本适于做教材的书籍,对于非计算机专业的学生来说太难了,也没有必要花那么多的时间去抠懂。将μClinux移植到不同32位系统上是计算机专家的事,非计算机专业的人士,仅仅是使用而已。对于计算机专业的学生,操作系统是必修课,有一部很好的教材,Andrew S. Tanenbaum等著,王鹏等译 《操作系统设计与实现》(第2版),电子工业出版社出版。这本书讲的是Minix,实际上是简化了的Unix、Linux。学过这部教材,进而掌握Linux原理就不难了。μClinux等嵌入式Linux不是实时的,仅对Linux做了简化,使之可用于嵌入式应用,但作不到SoC。学习简化的Linux,不如选用Minix。当然,μClinux可用于针对某特定应用的培训。运行μClinux至少需要512KB的 SDRAM,目前的技术水平片内RAM还不可能做那么大。而运行μC/OS-II则只需要几KB的RAM,十几KB的Flash,这完全可以在单片机的片内实现。讲解RTOS原理,μC/OS-II足够好了。
5 教学内容要在稳定的前提下发展
8位、16位、32位单片机将三分天下已是业界共识,作为教学,稳定至关重要。虽然单片机技术发展迅速,但开一门单片机教学的课程并非易事,需要教师、教材、实验器材等,特别是实验平台,需要较大的投入。教师要有相当的科研经验,用单片机做过研发,还要会讲。我的经验是,讲一门新课,至少要讲到第三年才能说会讲了或能讲好了。为了稳定,每年只能更新一小部分内容,要善于解决稳定和发展快这一对矛盾。RTOS的教学可稳定很多年。μC /OS已经十多年了,仍然好用,虽然每年都有新发展,但基本原理没有变化,我看μC /OS-II至少还可以再讲10年;MINIX快20年了,仍是一部好教材。实验平台也应尽量稳定的时间长一些,既然讲述的是开发方法,使用8位、16位还是32位单片机其实是无所谓的。
由8位机一统天下,到8位、16位、32位并举,转型期定位单片机与嵌入式应用类课程的切入点在哪里为好? 本人拟采用了以16位机 CPU12为切入点。它比8位单片机复杂,比32位单片机简单,外围接口丰富(比一般32位机还要丰富),片内RAM、ROM资源适中。讲述了以汇编写监控程序开始,到用C语言写程序,再到移植μC /OS这一方法,同样适于8位、32位单片机。这种方法本身也始于20年前,逐渐增加RTOS是近8年的事,是相对稳定又有发展的。
图2
对没有条件由8位机实验平台转向16位、32位平台的学校,不必强求,仍可使用8位机平台。若使用的教学平台有几KB 的RAM、几十KB的Flash,用于μC /OS-II作RTOS教学已足够好,但希望不要再用仿真器,而采用我们从写一个简单的监控程序,到移植μC /OS的教学法。不必过多地讲授各种I/O接口的使用方法,让学生在写一个简单监控程序的基础上自己去驱动这些 I/O模块。
有条件直接升级到32位单片机也是一种选择。不少学校选用了以ARM为CPU的单片机,但请注意三点。一是定位,若课程定位在非计算机专业的学生,运行μC /OS之类RTOS,可选择片内有几KB、十几KB的RAM、几十KB的Flash、可工作在单片方式下的ARM,这样会使教学平台很便宜。第二点是不要炒作,不要一哄而上。ARM的应用定位很明确,是一切与媒体有关的便携式低功耗应用。ARM是32位CPU,并不是全部32位单片机。以ARM为CPU扩以几MB乃至十几MB SDRAM、Flash的、可以上Linux的昂贵平台,只适用于针对某类产品开发应用的培训,不适于用来教学,因为Linux在PC机上也能跑。第3点是学时与学生的基础,32位单片机对于没有8位单片机基础的学生是很难掌握的,没有足够的学时,ARM底层的东西是很难掌握的。
6 关于课程的定位
课程定位不同,即授课对象不同,课程的内容可以很不一样,但都必须符合学习的客观规律。我们有2门单片机与嵌入式应用课程,一门定位于电类本科生(我系核电子学专业),名为“单片机认识与实践”,32学时,只讲简单8位单片机的入门知识,不讲RTOS,面向还没有学过数字电路课程,对单片机有兴趣的2年级电类本科生。
由于物理学对计算机的需求几乎是无限的,故像互联网这样的计算机技术最先源于物理学的需求。我们系对部分本科生计算机能力的要求是很高的。接下来,部分学生将做一个单片机应用方面的SRT (Student Research and Training Program) 项目, 清华对SRT有专门的经费支持。学生设想一个简单的单片机应用原理性演示题目,利用课余时间,花半年到一年,设计一块印刷线路板、再把软件调出来,优秀作品可拿到每年的学生科展上评奖,甚至参加学生挑战杯的角逐。这些学生在毕业设计中,一般会做一个单片机应用方面的课题。这样上来的研究生甚至可以帮助我当研究生课辅导实验的小教师。
另一门课程是定位于全校非计算机专业的各系研究生,特别是那些可能在研究生课题中用到单片机的各专业学生。我们讲以CPU12为核心的16位单片机和基于μC/OS-II的RTOS。这两部分内容共安排课内64学时,其中授课与教师指导下的实验约各占一半。按校方要求,这类课程原则上课内、外学时之比为1∶2,即学生课外要花128学时读书和进行无辅导下的实验。由于学生来自不同学科、不同专业,在单片机应用方面水平很不一样。计算机技术的发展是各行各业需求拉动的,而计算机技术的发展促进了需求。这里,需求是矛盾的主要方面。而个别研究生,特别是外校考入我校的非电类研究生,甚至没有学过微机原理之类课程。这里我们只能假设选修这门课的同学都有数字电路课的基础,会用C语言写程序。由于水平的参差不齐,及学生个人可能安排的课外学时的差异,到课程结束时,每个人到达的水平也是很不一样的,故只能是各按步伐、共同前进。
教学、开课要符合学生认、知的客观规律,是由简单到复杂,由8位到16位、32位,由汇编到C,到RTOS。要切记防止浮躁,也要教导我们的学生防止浮躁。我们能做到的仅仅是领学生入门而已,能指出一个大致正确的方向,不误人子弟已属难得。后来,能成为IT高手的,不是我们培养的,而是通过他们自己艰辛努力实现的。