刘春静
[摘 要] 针对嵌入式课程在本科教育中面临的一系列挑战,如作为开课对象的大三学生主观学习动力不足、部分学生专业基础能力薄弱、常规教学学时有限等,分析了导致这些挑战的根本原因,从根本上提出了应对这些挑战的多项对策,以达到提升嵌入式课程本科教学品质的目的。
[关 键 词] 嵌入式;教学品质;授课对策
[中图分类号] G642 [文献标志码] A [文章编号] 2096-0603(2021)24-0026-02
嵌入式作为大学本科教育一门重要的应用课程,是通信与电子类专业的必修课程,主要面向大学三年级的学生开设。与单片机、数字信号处理器、FPGA(Field-Programmable Gate Array,现场可编程门阵列)等同类型的应用课程相比,这门课程不仅强调嵌入式的原理,还特别注重如何构建一个完整的、满足设计指标的嵌入式电子“系统”,其重点与难点都放在了系统设计上。根据IEEE(Institute of Electrical and Electronics Engineers,电气与电子工程师协会)的定义,嵌入式系统是用于控制或监测大规模机器、装置等复杂系统的电子自动化设备,单片机只是嵌入式系统的一种简单形式。由于嵌入式系统控制对象的复杂化,使其本身的I/O(输入/输出)接口、功能很多,涉及的寄存器与封装函数库很多,从而使学生在学习中感到吃力甚至困惑。本文旨在通过分析当前嵌入式课程教学中面临的实际问题与挑战,探讨提升嵌入式教学品质的有效对策,并指出提升教学质量的前提条件。
一、嵌入式课程面临的挑战
(一)考研压力使部分学生的主观能动性不足
一般来说,嵌入式课程是大三学生面临的学时最长、实验最多的一门专业课,但对于准备考取研究生的学生来说,这门应用性与实践性极强的课程几乎与考研专业课无关,因此,在主观上的重视程度不足,不愿意在课程之外花费更多的时间进行预习和复习,甚至对于教师布置的作业也仅仅停留在敷衍应付的层面。
这种主观上的不重视直接导致课程教学效果大打折扣,课堂上教师与学生的互动性差、课下学生之间的抄袭严重,让学生在思想上回归嵌入式学习的课堂,应该是当前“新工科”建设亟须解决的首要问题。
(二)部分学生对单片机先修课程的认识不足,基础薄弱
在学习嵌入式课程之前,51单片机课程是本课程的前导先修课,主要介绍单片机的硬件结构形式、汇编指令及C语言编程、最小化电路与应用电路设计等,但51单片机的外部引脚较少,如典型的80C51只有40个引脚,且大部分引脚都是通用I/O接口,对外的主要通信接口只有一个全双工通用异步收发器。而常用于教学的嵌入式芯片引脚都在100个以上,这些引脚中的大部分都具有多功能复用能力,涉及的接口包括CAN(Controller Area Network,控制器局域网络)总线、RS232/485、USB(Universal Serial Bus,通用串行总线)接口、以太网接口、集成ADC(Analog-to-Digital Converter,模数转换器)/DAC(Digital-to-Analog Conver-ter,数模转换器)等。因此,嵌入式芯片的复杂程度远远高于51单片机。
学好嵌入式课程的基础不仅与单片机密切相关,还与数字电路、模拟电路、信号与系统、数字信号处理等课程密切相关,很多专业知识都是多门课程的交叉融合。
(三)部分学生的专业英语水平不足,在阅读理解英文版的嵌入式技术手册资料上存在困难
由于嵌入式芯片较为复杂,目前使用的大多数芯片都是国外产品,因此芯片的原始技术资料都是用英文撰写的,虽然能够在网络上查找到不少常用芯片的中文翻译版技术资料,但有的翻译质量不高,可能导致理解上的误差,进而影响设计的正确性。
鉴于中西文化的差别,英文原版的技术资料在表达描述的方式上与中文资料存在一些差异,有时候很难准确捕捉某些语句的真实含义,在这种情况下,只有通过博客、论坛、技术群等方式,结合实际的实验验证测试,反复摸索分析,才能够得出正确的结論。
在英文资料的阅读过程中,还会涉及很多专业术语与定义,而且大多数都是课堂上没有讲授的内容,针对这些内容,应尽量深入理解与之相关的参数指标,不可轻易遗漏。尤其值得注意的是,准确理解技术参数,对于产品设计之前的芯片选型非常重要,只有选型正确,才有可能满足客户提出的应用需求。
(四)嵌入式系统是硬件与软件的综合体,技术资料繁多,对学生的快速阅读与分析能力要求较高
嵌入式系统的设计不仅包括硬件原理图的绘制与制版调试,还包括底层驱动与应用程序的编写。一般情况下,几乎所有的芯片技术手册都会给出供用户参考的硬件原理图设计,因此,硬件设计相对简单。
与硬件设计相比,嵌入式软件的设计工作量是与日俱增的,除了与芯片本身的复杂度有关,也与实际需求的智能化程度密切相关。底层驱动程序是附着于硬件电路的灵魂,是直接针对寄存器的操作,在设计底层驱动程序之前必须明确与硬件接口相关的所有寄存器单元,并仔细阅读每一个比特的操作定义。应用程序是以底层驱动函数库为设计基础的,面向实际的应用需求,通过底层驱动程序的组合达成用户的设想方案。