李宁,宋薇,库少平
(武汉理工大学 计算机科学与技术学院,武汉430070)
李宁(副教授),主要研究方向为嵌入式系统、智能控制;宋薇(硕士研究生),主要研究方向为嵌入式系统工具开发、软件测试;库少平(副教授)主要研究方向为嵌入式系统。
随着嵌入式技术的快速发展和普及,社会对嵌入式人才的需求猛增[1],80%的相关企业都表示急缺嵌入式开发方面的人才[2]。近几年来国内理工科高等院校的计算机、电子信息和自动化等专业已普遍开设嵌入式技术的相关课程,有些院系还开设了嵌入式专业。但是由于嵌入式技术涉及计算机、电子技术、微电子技术等领域的多门课程,因此在课程内容、教师培养、教学方法、实践方式上,很多院校的方案还不是很成熟,处于摸索阶段。本文将笔者近几年所采用的项目化教学方法进行了一些总结,以供各位嵌入式教学方面的同行参考。
嵌入式系统的基本结构如图1所示。设计与实现一个嵌入式系统,需要微电子技术、电子技术、计算机技术和应用领域四个方面的知识。在嵌入式系统设计中,应用领域知识是千变万化的,这些不是嵌入式设计者能完全掌握的,往往需要相关领域工程师的密切配合。嵌入式领域对人才的需求如图2所示。微电子技术专业主要从事微处理器和各种IC的设计,为嵌入式应用设计提供最基础的支持,其知识与嵌入式应用设计领域的关系并不大,社会需求也不是很大。电子技术专业主要从事嵌入式系统的硬件设计,是嵌入式系统设计必不可少的部分。由于很多IC厂家已经提供了相关处理器的项目解决方案,因此现在硬件原理图设计的工作量和复杂程度并不很大,而PCB板设计、调试以及生产管理的工作量相对而言更大一些。计算机技术专业主要从事嵌入式系统的软件设计,目前嵌入式系统软件的复杂程度正在快速增长,各种软件设计已占到了嵌入式应用系统设计工作量的80%以上。
综上所述,目前社会所需求的嵌入式人才是掌握电子设计和/或计算机相关知识的人才,也就是通常所说的硬件工程师和软件工程师,而其中软件设计人才应占80%左右。由于嵌入式的硬件和软件都具有定制性,软件工程需要掌握足够的硬件知识,硬件工程师也应有相应的软件知识。
图1 嵌入式系统基本结构
图2 嵌入式人才需求结构
另外,嵌入式系统设计是一个对实践能力要求非常高的工作,相关领域知识更新速度非常快,如果没有足够的实践经历很难掌握和了解嵌入式的相关知识。调查显示,企业对相关人才要素关注程度从高到低分别是:技术、经验、敬业、学历、其他[3]。
因此,如何培养具备合理软硬件知识结构、具有一定实践经验的嵌入式人才,是当前嵌入式教学所面临的重要问题,尤其是对于那些开设了嵌入式专业的院系。
目前国内高校的嵌入式系统教学,普遍存在着以下问题,尤其是一些刚刚开设嵌入式系统课程的二本、三本和高职高专院校。
现有的高校嵌入式系统教材已经很多了,但基本上可以分为两类。一类教材是泛泛而谈的:ARM、MIPS、x86、PowerPC等各种体系结构处理器均作了基本介绍;μ C/OS、Linux、WinCE等各种操作系统也是一一罗列其特色。阅读这种嵌入式教材,学生的感觉是走马观花,除了能记住几个名词之外,很难掌握嵌入式的基础知识,更无法了解某一款处理器的基本开发过程。另一类教材通常是由嵌入式系统实验设备厂商提供的,基本就是数据手册加实验手册,学生使用这种教材往往只见树木不见森林,很难系统掌握嵌入式系统的基本理论和概念。
目前非常缺乏一本以嵌入式系统开发过程为主线,以某种常见处理器和某种操作系统为主体,同时对其他体系结构和操作系统作概要性介绍的教材。这也表明目前国内嵌入式教学的积淀还不够。
对于没有开设嵌入式专业方向的学校,嵌入式系统课程通常是选修课,一般是32~48学时。老师需要全面介绍处理器、汇编语言、接口、操作系统、驱动程序开发、应用程序开发等知识;如果学生没有足够好的基础和自学能力,基本是如坠云雾之中,没有太大收获。在开设了嵌入式专业方向的一些院校,通常开设多门嵌入式的课程:《嵌入式系统基础》、《嵌入式操作系统》、《嵌入式应用软件设计》等。这些课程基本覆盖了嵌入式应用系统开发的全过程。目前,这些院系也存在缺乏合适教材、各门课程之间衔接不够、部分具体知识相互重叠等情况。
尽管现在国内多数计算机、电子、自动化院系基本都已配备了嵌入式实验系统,硬件上也都能完全满足学生动手实践的基本要求;但是在实际的实践教学组织中,却存在非常大的问题。首先是嵌入式系统一般比较复杂,很难像8051单片机系统那样让学生自己DIY一个最小硬件系统和软件系统;其次是实践教学基本都是验证性实验,缺乏学生主动参与的环节,无法调动学生积极性;最重要的是实践动手学时严重不足,仅仅8~12小时的实验很难让学生真正了解和熟悉嵌入式开发过程。
现在少部分开设嵌入式课程较早的院系,其师资已比较强大,有些教师有从事嵌入式项目开发的经历,教学设备可以自制。但是还有相当多的院系,尤其是新开设嵌入式课程的院系都存在着师资严重缺乏的现象。主要存在以下问题:课程建设过程比较匆忙,多数以青年教师为主;由于企业对嵌入式人才需求旺盛,愿意进入高校的嵌入式人才非常少;多数教师无项目经验,动手能力比较差;教师培训机会不多,且多数培训也是实验设备厂商的短期培训。
目前从一本到高职高专的众多高校都在开设嵌入式课程和嵌入式专业方向,但是这些学校的学生素质、师资力量、硬件设备都存在着巨大的差异,所在专业和院系也不同,因此如何给老师和学生定位很重要。现在很多不同层次的学校所开设的嵌入式课程都是一样的学时、一样的教材、一样的设备,其效果则大相径庭。嵌入式领域的工作分类很多,是从事软件开发还是硬件开发,是从事开发还是测试,是从事研发还是从事生产,是了解整个研发过程还是集中关注其中某一个环节的工作,都需要根据具体情况进行分析和定位。
笔者近几年一直从事嵌入式课程教学工作,组织过嵌入式兴趣小组培训,所带研究生也从事嵌入式方向的研究。根据这几年的经验,总结出一套项目化教学方法。
在进入大学二年级,完成基础课程之后,给嵌入式方向的学生或对嵌入式有兴趣学生设定明确的项目目标,例如设计一个MP3、专用PDA等;并组建团队,团队规模一般在3~6人。采用导师制。导师先用4~6小时介绍嵌入式的概念以及嵌入式项目开发的一般过程,如图3所示,并简要介绍各阶段所需要的知识以及分工合作关系。
图3 嵌入式系统开发一般过程
通过设定项目,可以激发学生的兴趣和积极性,明确目标;也对后期一些理论课程的重要性有了一些基本认识。团队建设有利于学生之间形成良好的学习氛围和环境,并能提高学生的沟通和交流能力;在后期学习的课程设计、毕业设计中都尽可能以这个团队为基础来安排任务;其团队的技术领袖会在后期学习中逐步突现出来。
在项目确定之后,鼓励学生主动去探索,搜索资料学习相关知识,自主发现所需要的理论知识。在每门理论课程开展之前,导师应将项目中所对应的需求摆在学生面前,提倡提前学习和主动自学。带着需求和问题去学习,通常比被动学习的效率高很多。
在每门相应理论课程学习之后,要求学生完成一些与项目相关的工作。例如,学习《微型计算机原理》之后,应阅读项目所用处理器的数据手册;学习《汇编语言》之后,应了解所用处理器的汇编语言指令集,并尽可能阅读和编写相应处理器的启动代码;学习《计算机接口技术》之后,应去了解项目相关的外设接口,并尽可能完成一个接口的无操作系统驱动程序的设计;学习《模拟电子学》、《数字电子学》之后,应去阅读所用开发板的原理图;学习《操作系统》之后,应去阅读μ C/OS这样小的操作系统源码,并尝试编写多任务应用程序的例子;学习《计算机网络》之后,应去了解项目所需要的计算机通信协议,能力较强的学生最好能实现其中一个较为简单的通信模块。
这些相关的工作并不要求学生完全完成或掌握,但是这个过程能让学生感觉到理论课程的意义和价值,并学会利用理论课程的知识去解决问题、发现问题、触类旁通,而且还可以激发其学习积极性和探索未知领域的热情。对于学有余力的学生而言,可以提前掌握很多项目相关知识,并成为项目团队的技术领袖。
对设有嵌入式专业方向的院系,可以用项目统一多种实践环节,教师以导师形式全程跟踪。在相应的课程设计过程中完成某些功能验证,例如《汇编语言》的课程设计是实现启动代码,《计算机接口技术》的课程设计是团队成员分工完成相关外设的驱动程序。在大学三年级暑期实训时,团队可以集中完成部分功能设计;在毕业设计时则完成整个项目的原型设计、实现和测试工作。课程设计报告、毕业设计都需要按照项目设计说明书、项目测试说明书、设备使用说明书的格式进行撰写。
对于没有开设嵌入式专业方向的院系,组织嵌入式兴趣小组,以参加竞赛的形式来组织和引导学生的实践过程更为合适一些。
项目团队合作的时间大约为2年。在这个过程中,应提倡团队自我管理,导师的责任是帮助学生建立团队讨论沟通机制、给出一些方向性的建议。团队内部自然会出现分工合作,有些同学会成为技术领袖,有些同学可能更擅长底层软件开发,有些同学则可能更适合测试。这对于学生自我定位非常有好处,并可以在就业前得到适当的锻炼机会。
项目化教学方法的优点是显而易见的,但是在实施过程中困难也不少。主要有以下几点是必须解决的。
由于很多老师没有项目经验,因此无法组织项目。这就需要在项目化教学实施的最初阶段,引进企业的工程师参与;或者派教师去企业参与项目,而不仅仅是参加简单的培训。另外,高校教师在组织项目化教学时也可借鉴嵌入式就业培训机构的一些教学方法,这些培训机构通常是采用完全项目化的方法教学。
项目化教学方法将会改变过去的课程安排。对于设有嵌入式方向专业的院系,可以重新制定理论课程体系、实践教学体系,比较容易安排较完整的课程体系;而无嵌入式方向专业的院系,培养兴趣小组和组织竞赛团队是比较可行的方式。
刚开始进行项目化教学时,尤其是学生能力不强的学校,应稳定2~3个项目,便于老师掌握。项目也可从老师的科研项目中分解,某些优秀的学生有时可以取得意想不到的成果,对于导师选拔研究生也非常有价值。另外,要鼓励学生创新,让学生提议项目,并注意项目积累。例如,笔者的第一个项目就是学生提议实现一个MP3播放器,最初是无操作系统、无人机界面、硬件解码的MP3播放器;后续几届学生不断提高,逐步实现了软件解码、多任务操作系统、UI界面、歌词滚动等功能。要多鼓励学生突破和创新,一旦成功,学生的成就感会非常大,积极性、创造性和热情会被大大激发。
传统的验证性实验显然无法满足项目化教学的要求。可以采用两种方式:一是开放实验室,每个团队有自己专用的设备和场地;二是学生租用学校的实验设备,在寝室中开展学习和实践活动。很多学校的嵌入式实验设备基本处于半闲置状态,浪费了资源。采取上述两种方式,将大大提高设备的利用率,做到物尽其用。
不同层次学校的学生素质差异比较大。对于一本、二本的学生,教师的主要工作是引导、鼓励创新,并注意培养团队领袖。对于三本、高职的学生,则要着重于某几个固定的项目和几个适合的技术点,教师必须起一定的主导作用;项目的难度应适当降低,可由老师提供一些解决方案,以帮助学生顺利完成整个项目。
项目化嵌入式教学方法,通过项目引导来给学生确立目标,激发热情;利用项目需求来引导和增强学生对理论学习的热情和主动性;通过项目实践来提高学生的动手能力。这些经历将可能改变一个人的学习和工作习惯,也许是受益终身的经历。另外,由于学生在大学期间已经有了一些基本的项目开发经历,而且从文档写作到项目研发测试的整个过程都得到了训练,因此学生很容易就业。学生就业之后,也能非常顺利地实现过渡。
[1]嵌入式在线.我国嵌入式行业人才需求预测和培训瓶颈[EB/OL].(2008-08-02)[2009-10-01].http://www.mcuol.com/Edu/222/28218.htm.
[2]北京华清远见科技有限公司.2008-2009年中国嵌入式开发从业人员调查报告[EB/OL].(2009-04-03)[2009-10-01].http://www.farsight.com.cn/survey/report.htm.
[3]中华嵌入式人才库.嵌入式企业研发人才需求报告[EB/OL].(2008-04-22)[2009-10-01].http://blog.mcuol.com/User/cesiu/Article/4607_1.htm.