徐 伟
(青海师范大学,西宁 810001)
从上世纪90年代开始到现在,嵌入式系统广泛应用在航空航天、车载电子、科研教学、交通管理、环境工程与工业控制等领域。2018年国家重大科技专项中提到“攻克智能终端嵌入式CPU 和操作系统的高性能低功耗等核心关键技术”的发展规划,深度地推进嵌入式系统产业结构战略性调整和优化升级,推进行业技术创新和技术进步,促进嵌入式系统行业的重大发展。嵌入式系统行业重大发展背后是行业的相关企业对人才巨大的需求。因此高校对嵌入式系统应用型人才的培养也日益重视,许多院校纷纷开设了嵌入式系统课程。但是目前高校输送的人才与企业需要的人才相差甚远,甚至相当数目的相关专业毕业生连嵌入式系统的开发环境都难以顺利搭建。因此我们急需在嵌入式系统的课程设计上做出修改,夯实学生基础知识,提高学生的工程能力和创新能力,使毕业生能够满足行业企业技术发展需求。
(1)学生在理论方面学习困难。由于该课程涉及的知识点较多,许多概念抽象,学生学习难度大。教学中存在理论环节和实验环节脱节,达不到的理论与实践相辅相成的教学效果。比如一些学校在此课程教学中使用的理论教材几乎每章节都是针对ARM 芯片开展的,但是学生的动手实验却几乎只针对的操作系统层面以及应用程序方面,显出严重的脱节。在学习中,学生难以将理论和实践联系起来,而且在教学中等于变相增加学习难度,学习兴趣也被打击。
(2)虽然许多高校的实验设备配置较高,但实验课程的设计主要是验证性实验,缺乏自主动手设计性实验,综合性开发实验则更少。学生在实验课上难以自己动手设计和制作实验项目,缺乏主动参与的环节,无法调动其积极性,难以真正熟悉和掌握嵌入式系统的开发过程[1、2]。
(3)虽然实验教学涉及面较广,但单个实验内容的设计却彼此孤立,实验项目单一,没有系统性地设计出一套实验教学课程,来帮助学生逐步深入地进行实验。
(4)多数高校本课程开设时间不长,课程建设不完善,多数教师无项目经验,教师的项目培训机会也很少。目前仅有的培训几乎都来自实验设备厂家的短期培训,并且培训内容也只针对学校已购买设备的使用而不是项目开发。教师自己动手开发项目经验主要依赖教师自己摸索实践[3]。
(5)在结束实验教学环节后,教师通过对学生的调查发现,大多数学生在实验过程中仅验证实验指导书上的步骤以及代码,并没有深入理解底层硬件(包括外围设备)、驱动程序、操作系统和软件编程之间的关联性,没有真正掌握嵌入式系统的设计方法,甚至整个教学结束后也无法进行软硬件结合的嵌入式系统完整开发[4]。学生也不能明白企业项目开发原则和方法。有相当数量的学生经过一学期的嵌入式系统课程学习后,既不能清楚地说出实验环境的主要软硬件设备和工具,也不能独立搭建一个完整的开发环境。
因此目前多数高校的嵌入式系统在实验教学中未能取得明显的教学效果。
本教学方案是以实验教学为主,理论教学是实验教学的基础。理论课程设计与实验教学课程设计相配合,并为实验教学服务。到本课程开课时,学生已完成一系列软硬件课程的学习。本课程需要的许多理论知识早已在前期课程中有不同程度的学习。因此理论教学环节中,教师针对学生的基础以及此课程所需要的深度合理分配课时。笔者按照我校的教学安排(整个嵌入式系统的教学共计72学时),以24课时讲授嵌入式系统的开发环境、交叉编译工具、BootLoader 以及内核移植、编程语言(我们使用C 语言)驱动开发、以及Android 图形设计简介理论知识环节,剩下48课时集中于实验教学。许多理论知识对于学生来说需要在实验课上将其深入吸收。
实验教学是嵌入式系统教学的重点。实验教学的目的不是停留在验证性实验上,而是学生能够自己设计并完成一些创新性实验。实验教学的平台是亿创宏达公司的Cortex-A9综合实验实训系统。嵌入式系统是一门综合性较高的课程,它涉及的知识较广。若学生在本门课程学习结束后能够达到上述的教学目的,那么学生不但借助本门课程将本专业的基础知识深入地复习和深刻地领会,增强了本专业的学习兴趣,而且提升了个人的工程项目开发能力和综合“实战”能力。
实验教学分为三部分,第一部分是嵌入式系统开发环境的搭建和验证性实验教学部分。此实验教学部分共计26课时,重视理论和实践的结合。第二部分是教师进行案例实验教学,共12课时。教师通过一个综合案例进行教学演示,学生跟着教师一步一步动手学习。第三部分是综合设计性实验教学,此部分共计10课时,由学生自主完成,教师对其指导。
(1)在验证性的实验教学中,每两个学生为一组共同完成。教师指导学生在Cortex-A9综合实验实训系统上快速搭建并熟悉嵌入式开发环境,此后进入具体的验证性实验项目。此部分的验证性实验能够综合认识嵌入式系统,产生学习兴趣。验证性实验在已有的实验框架下帮助学生掌握实验原理和操作要领,让学生学习实验操作中的一些基本技能和实验步骤,为后续的设计性实验奠定基础。教师针对每个验证性实验的关键点突出讲解,引导学生掌握实验的重难点。本阶段实验教学的考核方式是教师根据每组实验结果和回答老师提出的针对性问题进行评判,以检验学生对实验的掌握程度[2]。表1罗列了具体验证性实验和每个实验的教学课时安排。
表1 验证性实验表
?
(2)案例教学。案例教学是以实际案例代替纯理论讲解,是引导学生对特定工程背景的教学内容进行分析、讨论并找出问题解决途径的一种教学方式,它是培养学生独立分析及处理问题的一种有效手段[5]。
在案例教学中,笔者使用一个自己设计的温度和距离检测系统来进行教学。此案例分为Android Studio 开发的显示与控制APP 客户端软件,以及由温度检测模块、Wi-Fi 通信模块、超声波测距模块以及蜂鸣器模块组成的嵌入式系统服务器。客户端软件系统与服务器通过Wi-Fi 模块连接通信。服务器上的温度检测模块与测距模块只要有数据变动,在手机上的客户端软件上立即有数据显示出来,这样可以做到实时监控。如果温度检测或者距离检测超出设定的范围,客户端立即会有提示,观测人员可以通过客户端报警按键给服务发送报警信号,嵌入式服务器的蜂鸣器模块将立即报警。图1是案例教学的功能示意图。
图1 温度距离检测系统功能示意图
此部分教学中客户端APP 软件的开发是重点也是难点,笔者使用7个课时来完成Android studio 软件环境的搭建,客户端界面的设计,以及界面底层程序的开发和调试。界面一(图2)为实时显示和控制。界面二(图3)为后台连接,设置服务器的ip 地址和端口号。客户端使需要创建Socket 套接字,使用多线程来读取服务器端的TCP 通信数据,使用handler 机制对读取到的温度和距离数据做处理。
图2 软件显示控制界面
图3 后台连接界面
服务器端的教学使用5课时来完成。服务器的四个模块在验证性实验中已经让学生掌握了,因此本部分教学重点不再是各模块的原理和基本步骤,而是各模块与手机客户端的通信。笔者使用TcpReceiveCmd()来实现监控解析APP 端发出的请求温度值或测距值;使用TCP 服务器发送数据函数TcpSendData()实现打包上传温度值和距离值;使用getUltrasonicDistance()实现对超声波数据计算;使用get18B20Temperature()获取DS18B20温度传感器的温度值。服务器底层程序中的设计关键点有:创建socket 套接字,组装数据包,发送请求帧,接受客户端TCP 数据请求并解析以及处理数据并处理客户端的界面显示。以上部分都是在教学中的关键点。图4是实验箱在案例教学中的展示,图5显示教学中使用的超声波测距模块和温度模块。
(3)综合设计性实验是在已有的验证性实验和实验案例教学的基础上,结合学生以前所学的理论知识和实验经验进行拓展。此部分实验中规定3-5学生为一组,每组单独完成一个实验项目。学生们在各个小组自己动手设计实验中,独立设计系统方案,编程程序,集成调试,并编写文档[2、6、7]。表2是教学中给每个小组可参考的动手实现项目。
图4 实验箱
图5 超声波模块和温度模块
表2 综合设计性实验列表
综合设计性实验的设计导向是工程实践。在教学中,教师对每个实验小组的项目及时指导,鼓励各小组使用课程中没有讲解过的软硬件模块。
此部分实验的考核也是重点。考核结果根据基本设计要求、实验结果以及各个拓展部分来进行评判。考核中鼓励学生实现多线程功能、开发手机端App 或者QT 图形界面、集成更多的功能模块等等。每个实验小组的考核分数由指导老师和其他各组同学打分组成,比例各占50%。每个小组录制一段演示视频,说明自己项目的功能和特点作为考核的材料[6]。
完成自主设计实验是学生学习此门课程教学的目的。自主设计实验能够将所学到的理论知识、基础实验知识综合应用。自主设计实验不但是教学内容,其结果也作为学生此课程学籍成绩的一部分,如此更加调动学生的积极性。
学生进行自主设计实验可以体现其创新能力和实践能力。鼓励优秀的设计性实验项目小组继续完善,积极申请大学生创新创业项目,参加各级别的嵌入式设计大赛,甚至可以朝毕业设计的方向去开发。借助各种项目和比赛的拉动作用,学生的嵌入式动手设计能力能够得到持续的提高[2]。笔者在教学中动员一些学生积极参加“博创杯”等嵌入式设计大赛,得到很好的锻炼。
注重实验教学,带领学生完成综合性设计实验项目为目标的教学,有助于提升嵌入式系统教学的效果。注重设计性实验的教学对于教师的教以及学生的学都有明显的帮助,让教师的教不再是课堂呆板的“满堂灌”,学生被动听;也改变了学生虽然在上机做实验但仍然懵懵懂懂的教学效果。学生不但将本课程的理论知识熟练掌握,而且能借助此门课程完成本专业一系列知识集中复习和实践,培养项目开发的能力。