APP下载

一种嵌入式技术教学模式研究

2022-03-24石宜金谭贵生

高教学刊 2022年6期
关键词:嵌入式能力培养教学模式

石宜金 谭贵生

摘  要:根据应用型本科院校和教育部的教育方针,需要不断地提高学生实践能力,文章提出一种嵌入式技术教学方法,通过以实践的教学项目为中心,提高学生编写嵌入式开发驱动程序的书写技能,提出一种基于Hello World程序设计思维的LED驱动程序开发教学模式,通过项目的教学实践,比较各种模式下LED驱动的优缺点和使用情景,该方法与其他三种编程方法相比,操作简单,能够提高学生的积极性,最终达到教学要求,在很大程度上提高教学质量。

关键词:教学模式;嵌入式;Hello World;能力培养

中图分类号:G642       文献标志码:A          文章编号:2096-000X(2022)06-0100-05

Abstract: In view of the educational policy of application-oriented universities and the Ministry of Education, it is necessary to continuously improve students' practical ability. This paper proposes a teaching method based on embedded technology, which, through practical teaching projects as the center, improves students writing skills of embedded development drivers. This paper proposes a teaching mode of LED driver development based on Hello World programming thinking. Through the teaching practice of the project, the advantages and disadvantages of LED drivers in various modes and application scenarios are compared. Compared with the other three programming methods, the method is simple in operation, can improve the enthusiasm of students, and finally can meet the teaching requirements, which shows that the teaching method is effective and improves the teaching quality to a large extent.

Keywords: teaching mode; embedded; Hello World; ability training

嵌入式技术所涵盖的面较广,包括硬件、软件以及操作系统和通信等,在对电子信息工程和计算机科学与技术专业大学本科三年级和四年级的教学中,该课程的方向可以分为硬件方向和软件方向,其中硬件方向的驱动开发难度较大,对于学生的能力要求较高,既需要硬件知识,又需要软件知识。因此,第一次课程的教学设计和教学内容尤其重要。

和其他编程课程一样,各种语言的学习一开始都为大家设计了一个著名的Hello World程序,对该程序情有独钟。对于硬件程序的编程来说,仅仅依靠以前的一个Hello World就达不到这个程序的目标。Hello World程序其实在早期起着较为重要的作用。一方面,这个程序可以让学习者较为轻松地了解将要学习的程序设计有什么特点?怎么编写?怎么编译?怎么运行?另外一方面,通过这个程序的学习和演示,可以提高学习者的学习兴趣,更重要的是对这门课程或语言的学习有一个系统的清晰的认识,在心里上降低学习者的学习难度,提高学习兴趣,这也符合认知的自然规律。

嵌入式技術中的硬件驱动编程部分,对于学生来说,学习难度较大,主要体现在编程环境的搭建、编译器的不同和软硬件结合的繁琐上。从查阅的参考文献来看,目前嵌入式技术类课程驱动开发的第一个程序主要是关于LED灯的程序,其中点亮一个灯和流水灯程序选择的较多,基于这个思想,笔者根据多年的嵌入式技术教学,提出嵌入式驱动开发Hello World的教学设计,具体设计包括三个步骤,一是图形化界面的编程,二是Windows环境下使用Keil编程,三是在Linux环境下利用GCC编程。

为了提高教学质量和教学深度,笔者通过几轮的教学,摸索出OBE成果导向的教学模式分为图形化编程、Windows下函数调用编程和Linux环境下的GCC 编程。在第一次课程的教学中以LED驱动程序的三种写法作为嵌入式驱动开发的课程案例引入,同时在后续的教学中贯穿这种教学模式,让学生在编程思维和开发流程上有较为深刻的认识。

一、图形编程思维培养

从课程难度来看,如果一开始就进行Linux环境下的驱动编写势必会使学生产生一定的畏惧感,因此,查阅国内外的教学研究资料,最终决定采用图形化编程进行编程思维培养,让学生首先清楚自己要做什么?要完成的学习任务和学习目标是什么?通过分析大量的图形化编程软件,考虑到延续性和体系性,决定采用ArduBlock这款图形化编程软件来培养学生的编程思维,更重要的是让学生知道我们要完成的任务,先让学生有一种成就感。ArduBlock是Arduino的第三方图形化编程软件,依附于Arduino软件,其是文本式、图形化积木搭建编程的一种可视化的交互性极强的编程方式,如图1所示。编程门槛降低对于大学生程序设计能力的提升作用较大,还有一个优点是它可以生成C语言,如果你不懂C语言,这样就能够引导学生明白C语言的重要性,同时也可以作为C语言的练习环境,让学生能够回忆C语言,同时能够理解C语言在驱动编写方面的高效性和重要性。在安装图形化编程环境后,第一次授课便可以先以图形化编程实现LED驱动,并配合硬件的实验结果来导入驱动开发的第一次课程。如图1所示,左边是C语言程序,右边是图形化的界面编程界面,通过设置引脚的输入输出来设置一个闪烁的LED驱动程序,中间进行演示控制和高低电平的控制,操作非常简单,学生可以很快上手,同时也能够发挥自己的想象空间来完成一些设计。如图2所示是制作好的LED灯的实验结果。

圖形化编程的优势在于简单易学,学生能够大大提高学习兴趣并能够在较短的时间完成简单的驱动开发,但是缺点在于理论性不够,技术性不够,不利于学生的深入学习。

二、Windows下函数调用编程

在图形化程序实现后,学生对于课程的目的和需要完成的任务有了清晰的认识,进一步引导学生了解图形化程序背后的原理,通过理论教学,应该让学生明白驱动程序的编写主要是对寄存器的功能设置,数据设置和测试用例的书写,因此看懂硬件原理图和芯片对应的用户手册后便可以进行程序编写,目前在这部分的教学中使用Keil软件来进行教学的学校比较多,因为这款软件将很多函数进行了封装,同时芯片参加也提供了BSP程序,因此程序开发的流程相对来说难度会有所降低,同时对函数进行了封装以后,调用就比较容易,驱动的书写流程就简化为硬件设计、寄存器理解和驱动案例编写。

图2 LED硬件实验结果

因此,第二部分的教学是在Windows环境下通过函数的调用来完成LED驱动的编写,由于有了图形化编程的经验,学生对于硬件的原理理解起来就相对比较容易,目标就是通过对寄存器的操作来完成高低电平的输出控制,以及延时程序的书写,采用的编程语言是C语言。硬件采用STM32F4,体系架构采用哈弗架构的RISC。要完成这款芯片的LED驱动编写,主要任务有硬件设计、软件设计和bin程序的下载验证。如图3所示,硬件采用的是共阳极的二极管,LED0和LED1分别对应的引脚是PF9和PF10,此部分可以在芯片原理图中查找到,要驱动二极管发光,需要设置GPIO,让PF9和PF10输出低电平即可,若进行闪烁效果的设置,就需要调用延时程序。

在查阅了寄存器之后,分别书写LED的头文件和驱动文件。这部分的教学需要让学生能够较好掌握芯片手册的查阅方式,同时能够具备一定的英文阅读能力和理解能力,通过查阅资料可以让学生慢慢适应芯片手册的使用方式。在理解硬件原理图和配合芯片手册的基础上,结合寄存器的设置方式,学会寄存器的功能设置和寄存器的数据设置,能够进一步使用芯片所提供的板级支持包来进行函数调用,简化芯片驱动的开发流程和进一步熟悉LED驱动的开发方法。关键代码如下:

RCC->AHB1ENR|=1<<5;//使能 PORTF 时钟

GPIO_Set(GPIOF,PIN9|PIN10,GPIO_MODE_OUT,GPIO_OTYPE_PP,GPIO_SPEED_100M,PIO_PUPD_PU); //PF9,PF10 设置

LEDS0=1;//LED0 关闭

LEDS1=1;//LED1 关闭

如图4所示为寄存器的设置,为了能够让硬件驱动正常工作,首先应该对PORTF进行功能设置。让它处于使能状态,通过C语言的位操作来设置bit5置1,这样这个时钟寄存器就能工作,在设置完寄存器后通过系统提供的板级支持包,调用GPIO_Set 函数,设置PF9 和 PF10为OUT模式,然后通过寄存器对LED所接的引脚进行操作,输出高电平则灯灭,输出低电平则灯亮。这样的程序设计方式能够让学生深入地理解keil平台下借助函数库进行编程的原理。关键代码如下:

#define LED0 PFout(9) // DS0

#define LED1 PFout(10) // DS1

void LED_InitDr(void); //初始化

#define LED0 PFout(9) // DS0

#define LED1 PFout(10) // DS1

驱动编写完成后,将其加载到芯片上,硬件已经能够进行正常的工作,为了测试驱动的功能,下一步进行测试用例的编写。主要是对上面两个LED灯进行控制,以函数的形式进行调用,调用之后只需要设置LED数据寄存器的输出信号为低电平亮,高电平灭,若学生在学习过程中需要添加更加复杂的功能,可以进行进一步的程序升级。完成硬件驱动编写后,学生便可以使用flymcu软件将驱动烧录到芯片上,最后进行功能测试。如图5所示。

三、Linux操作系统下的驱动编写

硬件驱动的编写在图形化界面和Keil环境下都相对比较容易,上述两种编程方式可以让学生清楚课程所需要掌握的技能,同时更加明确课程要学习什么,最终对硬件配置的目的是什么。通过上述两个LED驱动的编写,学生能够基本掌握驱动的编写流程,熟悉了工具软件的使用方法,起到了Hello World程序教学的目的,但是学生想深入地理解硬件驱动编程,还必须在Linux操作系统下进行程序开发。在第二种LED驱动开发中,学生进行函数调用比较容易,但是却忽略了函数背后的深层次原理,对于底层的认识不透彻,尤其在寄存器的定义和配置上面的理解不深入,这样会导致学生在后续的学习和工作中无法深入理解嵌入式驱动开发的原理,尤其重要的是,在当前的企业开发中,大多数环境为Linux操作系统下的编程环境,驱动开发完成后还需要进行驱动内核加载和驱动程序的加载,加载完成后便可以裁减进入到操作系统内核,同时进行动态加载,方便上层APP的调用。所以进行Linux操作系统下的驱动开发教学尤其重要,在教学过程中采用难度较低的Ubuntu操作系统,硬件选择市场上教学资料较多的2440A芯片。

和上面的两种编程方式一样,主要进行硬件电路图的识别、芯片手册查阅、寄存器物理地址的查找、寄存器的配置和源程序书写和源程序的GCC编译。如图6所示。

GPFCON &= ~(GPF0_mask|GPF2_mask);

GPFCON |=(GPF0_in|GPF2_in);

GPGCON &= ~GPG3_mask;

GPGCON |=GPG3_in;

GPFCON&= ~(GPF4_mask |GPF5_mask|GPF6_mask);

GPFCON |=(GPF4_out|GPF5_out|GPF6_out);

完成源程序編写后,还需要引入启动文件,主要是利用一个汇编文件完成看门狗和初始化栈的初始化,然后利用Makefile来使源程序的编译和链接生成bin文件,最后利用u-boot烧写到nand-flash便可以观察到LED的效果。

四、教学方法总结

通过三轮的教学经验总结和摸索,对于嵌入式技术的课程教学,主要以成果导向OBE方式进行教学,构建和改良了这门课程的教学体系,让电子信息工程专业的学生在大一的时候接触图形化编程和程序设计,在大二学习C语言程序设计的时候通过函数调用方法来进行嵌入式驱动程序的开发,在大三的时候以Linux操作环境下的编程方式来深入学习嵌入式系统中的驱动程序开发,进一步对芯片的控制有深入了解。同时,通过LED驱动的三种教学模式探索适合嵌入式技术教学的教学方法,通过一个LED程序的书写,让学生能够进一步进行按键驱动、蜂鸣器驱动和PWM驱动等程序的编写,通过这种教学方向,让学生能够一步步接触到嵌入式驱动开发的流程,熟悉开发方法,同时能够明白自己应该努力和重视的方向。经典程序LED驱动程序的开发,借助了Hello World的程序设计思维,让学生能够从现象级别开始,进行深入的底层研究,最终达到教学目标和教学目的。

举一反三很重要,成功比失败重要。从心理学的角度看,让学生拥有巅峰体验。这是北京航空航天大学高小鹏教授在交流实验教学的过程中谈到的,也正是基于这样的一个出发点,在嵌入式驱动开发的课程中引入Hello World程序设计思路,以LED驱动开发为案例,分别从图形化到Keil再到ARM教学,这样就给学生一种心理上的成功感,同时图形化编程相当于是功能的模拟,而在Keil环境下则是进行进一步功能的深入,在Linux环境下是进行底层的分析,这样阶梯式的教学可以让学生在掌握更多的同时研究的更多。

以LED驱动作为出发点,强化举一反三的重要性,更加重视这一个导向性,引入Hello World程序设计思维,做好嵌入式驱动开发的Hello World,一方面可以将学生引入课程,另一方面可以提高学生的学习兴趣,阶梯型递进的模式让技术能够深挖。通过三轮的嵌入式技术教学,目前已经形成了一个完整的教学体系,每一个模块的驱动开发都借鉴LED驱动开发的模式,先进行图形化编程,进一步进行Keil编程,最后才进入到Linux环境下进行学习,第一步和第二步都让学生在课后完成,Linux的驱动开发难度稍大,所以在课上教师主要是进行Linux驱动开发的讲解。通过第一次课LED驱动开发,学生入门后便能够自主在课后进行预习,那么课堂上的学习效率较高,笔者通过这种教学模式的实施,目前学生的硬件驱动开发能力逐步提高,学期末的作品考核,学生都能够独立完成一个简单的嵌入式硬件系统的开发,可见这种教学模式的改革在一定程度上提高了教学质量,同时缺点在于三种模式的讲解比较耗费教学时数,学生需要的硬件设备也较多,因此在后续的教学中,一方面需要设计一种能够较好兼容图形化编程、Keil编程和Linux环境下驱动编程的硬件,另一方面需要调整教学方法,在第一次讲解完LED驱动程序后,后续的实验要求学生能够在课后先完成图形化编程和Keil编程。

对2016级电子信息工程的学习进行统计分析,从学习效果表(表1)可知:嵌入式技术教学模式的教学效果优于其他三门课程的教学方法,说明该方法有效、可行。图形化驱动编程是比较简单的操作课程,容易上手,主要是大一的学生,有一定的引导性;Windows平台下借助Keil的编程和Linux环境下的驱动编程有一定难度,学生的效果不是很明显;主要是针对大二和大三的学生;嵌入式技术教学模式主要是从简到难的过程,有很好的衔接部分,保证学生的学习效率和学习效果,有一定积极性;最终保证良好的学习效果。

五、结束语

本文通过程序设计中的Hello World程序设计思维,以LED驱动开发为原型,在嵌入式课程上提出了硬件的Hello World程序,即“三种编程模式的LED驱动开发”,旨在提高嵌入式技术教学的教学质量,更重要的是让学生能够通过教师的“举一”,来完成课后的“反三”,让学生能够阶梯式地进行学习,更重要的是让学生找到成就感,提高兴趣。

参考文献:

[1]华清远见嵌入式培训中心.嵌入式Linux应用程序开发详解

[M].北京:人民邮电出版社,2009.

[2]华清远见嵌入式培训中心.嵌入式Linux应用程序开发标准教程(第2版)[M].北京:人民邮电出版社,2009.

[3]王田苗.嵌入式系统设计与实例开发——基于ARM微处理器与uC/OS-II实时操作系统[M].北京:清华大学出版社,2002.

[4]韦东山.嵌入式Linux应用开发完全手册[M].北京:人民邮电出版社,2008:4.

[5]鸟哥,王世江.鸟哥的Linux私房菜基础学习篇(第三版)[M].北京:人民邮电出版社,2010.

[6]吕宪军.基于ARM9的指纹识别门禁系统[D].北京:北京邮电大学,2010.

[7]飞凌嵌入式技术有限公司.飞凌开发板配套教程[Z].2009.

[8]陈先在,张丽萍.Linux C函数实例速查手册[M].北京:人民邮电出版社,2009.

猜你喜欢

嵌入式能力培养教学模式
群文阅读教学模式探讨
“思”以贯之“学、练、赛、评”教学模式的实践探索
“认知-迁移”教学模式在高年级阅读教学中的应用
数学归纳法在高中数学教学中的应用研究
信息技术教学中学生自主探究能力的培养探析
基于CDIO的大学生职业素养培养研究
低年级学生课前预习能力的培养
5E教学模式对我国中学数学教学的启示
嵌入式LINUX操作系统的研究
嵌入式组件技术的研究及应用