驱动程序设计范文
时间:2023-04-08 16:29:44
导语:如何才能写好一篇驱动程序设计,这就需要搜集整理更多的资料和文献,欢迎阅读由公务员之家整理的十篇范文,供你借鉴。
篇1
关键词:wince 驱动程序;开发;设计
1 引言
WINCE和Windows 98或Windows 2000不同,它可以工作在12种不同的处理器体系结构、180余种CPU上;同时,WINCE是一个实时操作系统(实时系统的意义就是输入的指令不必进入队列就可以马上处理,过去我们使用的DDS就是实时系统),可以满足应用程序所需要的实时性要求。
Windows CE的模块化设计使得它能够在大量的平台上定制使用,从客户电子设备到专用的工业控制器。由于它是模块化的,因而我们可以使用满足平台系统需求的最小软件模块和组件集合来设计嵌入式系统平台,从而使内存用量最小,但最大可能地提高操作系统的性能。因此外围扩展设备就必须要有硬件驱动才能正常工作。
和其它的操作系统一样,Windows CE也提供设备驱动软件,这些软件的目的是驱动内部和外围的硬件设备,或为它们提供接口。设备驱动程序将操作系统和设备链接起来,使得操作系统能够识别设备或者为应用程序提供设备服务。
Windows CE支持广泛的基于各种CE平台的设备驱动程序。也提供一些用于驱动程序开发的模型(model) ,其中包括来自其它操作系统的驱动程序模型(model),因为这些丰富多变的驱动程序模型, Windows CE适应大部分的内部和外围设备口Microsoft Windows CE设备驱动程序工具包配备了文档资料,这些文档资料使得你能够为Windows CE创建设备驱动程序。目前,Windows CE提供了四种设备模型,其中两种是专用于Windows CE的模型,另外两种外部模型来自其它操作系统。
2 驱动程序开发简介
2.1 开发工具
Windows CE驱动可以使用Platform Builder或者Visual Studio开发,但是开发人员一般都使用Platform Builder开发设备驱动程序,对于部分驱动也会使用Visual Studio开发,应用程序开发人员更多的使用Visual Studio开发驱驱动程序。作为BSP(Board Support Package)的一部分进行整体编译开发。
2.2 驱动分类
2.2.1 按加载方式和接口类型分类
1) 本机驱动程序(Built-In Drivers)
通常由GWES加载,驱动接口一般都是定制的(Custom Purpose)。
2) 流驱动程序(Stream Drivers)
通常由Device Manager加载,驱动接口是标准的流式接口。
3) 混和型驱动程序
同时有定制式和流驱动两套驱动接口,但是和系统交互只使用流式驱动接口,比如PC卡槽驱动。
2.2.2 按驱动层次分类
1) 层次型驱动程序(Layered Driver)
> MDD(Model Device Driver),与硬件无关,面向上层应用程序,一般由微软建立统一框架;
> PDD(Platform Dependent Driver),针对具体硬件平台的操作代码,一般由驱动开发商实现MDD和PDD之间通过标准的设备驱动服务供应商接口DDSI连接。
2) 独立型驱动程序(Monolithic Driver)
> 独立驱动程序包含了MDD面向上层应用和PDD面向硬件平台两方面的代码;
> 适用于操作不复杂的驱动;
> 减少了MDD和PDD传递之间传递信息的开销,实时性更强;
3 流驱动程序的实现
流驱动程序必须实现一套标准接口,流驱动程序适用于IO操作,这也是嵌入式系统中最常见的设备驱动,操作接口和文件系统操作相似,通过CreateFile,ReadFile,WriteFile,IOControl函数等来操作应用程序和流驱动交互,可以把设备当作文件操作。
3.1 文件前缀名确定
根据文件前缀名在系统中必须唯一这一特点,在定义文件前缀名必须是三个字母,若有多个同类设备,由后缀一个阿拉伯数字区分,例如COM1,LPT3等等。文件前缀名将会在驱动的标准接口函数中体现,比如XXX_Init,XXX_Close等。
3.2 通用函数
根据设备的不同,所需函数不同,通用函数如下所示:
1) XXX_Init:通知设备管理器为设备初始化分配资源;
2) XXX_Deinit:通知设备管理器回收设备初始化时分配的资源;
3) XXX_Open:打开设备。应用程序调用CreateFile时,通过文件系统映射为XXX_Open;
4) XXX_Close:关闭设备。应用程序调用CloseFile时,通过文件系统映射为XXX_Close;
5) XXX_PowerUp:设备上电时,操作系统调用该函数完成必要的上电操作;
6) XXX_PowerDown:设备掉电时,操作系统调用该函数完成必要的关机操作
7) XXX_Read:从打开的设备文件中读取数据,可以通过ReadFile映射;
8) XXX_Write:向打开的设备文件写数据,可以通过WriteFile映射;
9) XXX_Seek:文件定位,根据设备情况决定是否支持;
10) XXX_IOControl:IO操作扩展,可以根据设备情况来决定支持何种特殊的操作模式。
3.3 DEF文件建立
流驱动一般以DLL形式存在,DEF文件定义了DLL需要导出的接口集,因此DEF文件的名称与设备驱动名称相同。
3.4 写注册表
在wince中任何设备的识别都是通过注册表来实现的,因此必须在注册表中添加具体的设备驱动项,以便系统识别。具体方法如下:
在注册表中增加驱动程序入口点,找到注册表项,注册项位于注册表的Root Key下,一般为[HKEY_LOCAL_MACHINEDriversBuiltInSampleDrv],建立必要的子键和键值,“Prefix”和“DLL”是两个重要,而且是必须的键,分别描述了设备前缀名和驱动程序的动态连接库名,然后根据具体设备的需要建立驱动程序需要的其子他键。
4 调试驱动程序
驱动程序编写完毕后,就应该进行硬件的调试。具体方法如下:
4.1 调试区信息(Debug Zone)
调试区一般和WinCE的控制台调试工具Cesh.exe配合调试,在不打断OS运行情况下,进行驱动的实时调试,利用宏开关,可以选择需要输出的调试区信息,可以得到进程,线程和调试状态信息。并且可以利用IDE环境,动态选择开关调试区信息,但是打印驱动程序输出调试信。必须借助于至少一种外设显示调试信息,比如串口或者网卡或者其他通过调用RETAILMSG或者DEBUGMSG完成,不影响OS的运行,保证驱动程序运行的真实性,动态输出设备的状态信息,调试相对简单,也是最广泛使用的一种调试方法。
4.2 核心调试工具(Kernel Debugger)
核心调试工具将会禁止所有硬件中断,挂起操作系统,因此可以单步调试OS或者核心代码,可以访问堆栈信息,但是必须在Platform的环境下,利用至少一种外设进行通信。
4.3 硬件辅助调试方法
利用硬件调试工具可以观察物理设备的真实状态,一般常用的方法可以利用JTAG工具实时查看CPU内部寄存器,利用逻辑分析仪或者示波器实时查看物理外设的输入输出状态。利用指示LED来显示驱动程序实时状态信息。
4.4 Visual Studio调试
可以利用VS内置的调试工具进行单步跟踪,状态调试等。
5 测试驱动程序
驱动程序经过调试以后就需要对驱动的功能进行测试。其常用的方法如下:
1) 写一个应用程序来测试驱动程序的正确性
2) 模拟各种可能发生的硬件输入状态来测试驱动程序的正确性
3) 利用Windows CE自带的测试工具CETK来测试驱动程序的性能和完备性
6 驱动程序的集合和
6.1 驱动程序集成
驱动程序经过调试和测试确定其正确性后,就可以对驱动程序进行集成了。具体过程如下:
1) 在BSP的Driver目录下建立新的驱动文件夹MyDrv
2) 实现MyDrv驱动以及相关的DEF文件
3) 如果需要用到硬件中断资源,修改原BSP中的相关中断处理函数OEMInterruptEnable,OEMInterruptDisable,OEMInterruptDone,OEMInterruptHandler
4) 在Platform.reg中,增加驱动程序相关项
5) 在Platform.bib中,增加驱动程序的相关注册表项MyDrv.Dll$(_FLATRELEASEDIR)MyDrv.dll NK SH
6.2 驱动程序
驱动程序进过集成以后就可以使用了,具体的过程如下所示:
1) 利用CAB Wizard生成.cab驱动包
2) 直接提供驱动程序文件夹以及相关注册表项和修改说明
7 总结
本为详细的介绍了,wince下驱动开发的流程,介绍了驱动程序开发到的详细过程,并详细说明了各个部分的实现和操作方法,使是初学者对wince下驱动程序的开发流程和一般的开发工具有了初步的了解。
篇2
关键词:嵌入式操作系统;Win CE;SPI;驱动程序
中图分类号:TP311文献标识码:B
文章编号:1004-373X(2009)10-069-04
Design of EP9315-SPI Driver Based on Win CE
ZHANG Dong1,XU Dijian2
(1.Chongqing University of Arts and Sciences,Chongqing,402160,China;2.Chongqing University of Science and Technology,Chongqing,401331,China)
Abstract: It is very important to compile driver connecting operating system with corresponded hardware device.Based on stream interface driver model,the design of SPI driver in embedded operating system Win CE in development environment of platform builder 4.2 and design method are introduced and analysed,realizing virtual address map,key code and the relationship between driver and SPI application program in EVC program environment is discussed.Driver and corresponded application program can be operated on FS_EP9315 development platform of ucdragon rightly.Experience indicates the methord is right and feasible.
Keywords:embedded operating system;Win CE;SPI;driver program
0 引 言
嵌入式是“以应用为中心,以计算机技术为基础,软硬件可裁剪,适合应用系统对功能、可靠性、成本、体积、功耗严格要求的计算机系统”。Windows 是Microsoft推出的功能强大的紧凑、高效、可伸缩的32位嵌入式操作系统,主要面对各种各样嵌入式系统的产品[1,2]。
该系统具有多线程、多任务、完全抢占式的特点,是为各种具有严格资源限制的硬件系统所设计的。为了将操作系统和硬件设备连接起来,硬件和软件的驱动联系就显得很重要。SPI是一种高速、全双工、同步的通信总线,在芯片的管脚上只占用4根线,节约了芯片的管脚,同时为PCB的布局节省了空间,提供了方便,正是出于这种简单易用的特性,现在越来越多的芯片都集成了这种通信协议。SPI的工作模式有两种:主模式和从模式,SPI总线可以配置成单主单从、单主多从、互为主从。为了充分利用芯片的SPI接口进行相应的驱动程序设计以及应用程序设计,通用方法的研究就显得十分重要。
1 Win CE提供的驱动模型
Win CE操作系统支持两种类型的驱动程序,一种为本地驱动程序,是把设备驱动程序作为独立的任务实现的,直接在顶层任务中实现硬件操作,因此有明确和专一的目的。本地驱动程序适合于那些集成到Win CE平台的设备,诸如键盘、触摸屏等设备。另一种是具有定制接口的流接口驱动程序,它是一般类型的设备驱动程序,为用户一级的动态链接库(DLL)文件,用来实现一组固定的函数称为“流接口函数”,这些流接口函数使得应用程序可以通过文件系统访问这些驱动程序。这里论述的SPI驱动就属于流接口驱动。
2 SPI驱动程序的设计
2.1 EP9315芯片及SPI接口简介
EP9315是一款基于ARM920T,由Cirrus Logic公司生产的工业级芯片[3,4] ,内带MMU,16 KB的指令Cache,16 KB的数据Cache和数学协处理器,主频为200 MHz,系统总线为100 MHz。该芯片拥有一组SPI接口,利用它可方便实现与SPI器件进行通信,可大大简化工程应用的硬件设计软件。
SPI驱动程序采用Win CE流驱动的标准形式。下面从驱动程序具体设计步骤以及驱动代码的编写两个方面做较为详细的阐述。
2.2 SPI驱动程序设计步骤
在Platform Builder 4.2下设计Win CE流接口驱动程序可按照以下步骤进行[5-7]:
(1) 在C:\\Win CE420\\PLATFORM\\ep931x\\drivers目录下新建一个目录SPI;
(2) 从其他驱动目录下复制makefile文件到SPI目录下;
(3) 用文本编辑器建立4个文本文件,文件名分别为SPI.c,SPI.h,SPI.def和sources;
(4) 编辑目录C:\\Win CE420\\PLATFORM\\ep931x\\driver下的dirs文件。用文本编辑器打开该文件,找到“DIRS=”等式,在该等式最后添加一行, 如下面所示:
DIRS=…
SPI
(5) 在Platform Builder 4.2中打开Platform.bib文件,在该文件最后和FILES之前加入一行,指明在生成Windows CE内核映射时自动将SPI.dll加入到内核映像中,添加内容如下:
SPI.dll MYM(_FLATRELEASEDIR)\ SPI.dll NK SH
(6)具体的流接口驱动程序跟注册表密不可分,在Platform Builder 4.2中打开platform.reg文件,在该文件最后加入如下所示注册表信息,以使在生成操作系统映像时,Platform Builder将注册表信息加入到注册表中。在Platform.reg中添加内容如下:
[HKEY_LOCAL_MACHINE\\Drivers\\BuiltIn\\SPI]
"Prefix"=" SPI "
"Dll"=" SPI.dll"
"FriendlyName"=" SPI Driver"
"Index"=dword:1
"Order"=dword:0
篇3
关键词:VxWorks操作系统;串口驱动程序;共享中断
中图分类号:TP316文献标识码:A文章编号:1009-3044(2009)33-9544-03
The Design of Driver for Multi Serial Sharing IRQ Based on VxWorks System
LIU Wei,TAO Ying
(Department of Information Engineering, Jiangxi Vocational College of Finance and Economics, Jiujiang 332000, China)
Abstract: This paper introduces the structure of serial port driver on the VxWorks system, then the achievement of the driver of serial driver is analyzed. The driver for multi serial sharing IRQ based on VxWorks system is designed, and loading VxWorks system with the module of the driver is achieved.
Key words: VxWorks system; serial port driver; sharing IRQ
VxWorks操作系统是美国Wind River公司开发的一种嵌入式实时操作系统,由于其高可靠性、强实时性以及可裁减性,广泛应用于航空航天、军事、民用通信和工业控制等领域。
在某大型控制系统中,我们需要开发一个具有4路串口通讯、1路CAN通讯以及2路以太网通讯的多种通讯方式并存的通讯设备。考虑到通讯能力以及通讯的实时性要求,CPU选用盛博公司PC104+总线的Pentium III处理器,串口选用具有PC104总线接口的4路串口扩展板,采用VxWorks操作系统来实现以上需求。由于每种通讯方式都采用中断方式触发,而系统硬件提供的中断源是有限的,针对这种情况,为了节省系统的中断资源,本文设计了一个基于VxWorks的多串口共享中断的驱动程序,并对该驱动程序的功能进行了长时间测试验证。
1 串行设备驱动的结构
在VxWorks操作系统中,串行设备作为一种特殊的字符型设备,操作系统为其提供一个简单、统一、独立于设备的接口,在应用层对于串行设备的任何操作都可以视为对一个文件的操作,而具体的实现是通过串行设备的驱动程序来完成。
在VxWorks中串行设备驱动采用3层抽象的软件结构,即I/O系统、虚拟设备ttyLib或tyLib以及硬件驱动,其结构示意图如图1所示。在VxWorks中,I/O系统并不直接与具体的硬件驱动进行交互,而是将驱动程序中与硬件无关的部分放在虚拟设备ttyLib中实现,再利用虚拟设备ttyLib与I/O系统进行通讯,使得I/O系统独立于具体的硬件驱动,而驱动程序的开发者只需要实现系统所提供的接口并且将其挂载到虚拟设备ttyLib就能完成具体串行设备驱动的设计,从而保证驱动代码的可复用性和接口的统一性。
2 串行设备驱动的实现
VxWorks在启动过程中对串行设备驱动的实现主要包括两部分:串口的初始化和串行设备的创建。串口的初始化主要包括初始化串口设备,分配串口所需的资源以及完成串口中断程序的系统挂接;串行设备的创建包括tty驱动的初始化和对tty设备的创建,即建立起I/O系统与硬件驱动层的联系。
2.1 串口的初始化
sysInit()作为VxWorks操作系统启动的入口程序会调用第一个C程序函数usrInit(),完成用户定义系统的初始化工作,而串口的硬件初始化是在usrInit()函数的子函数sysHwInit()中完成。对于VxWorks现有的Intel8250驱动(Tornado目录/target/src/drv/sio/i8250Sio.c),sysHwInit()还会调用sysSerial.c文件下的sysSerialHwInit(),sysSerialHwInit()函数主要对串行设备的设备描述符进行初始化,在初始化过程中还会调用底层的i8250HrdInit()对串行设备的端口进行初始化。在完成系统硬件和VxWorks内核的初始化以后,系统会启动一个函数名为usrRoot()的任务,usrRoot()作为VxWorks操作系统的根任务调用sysClkConnect()对系统时钟中断进行配置,而具体的工作是由sysClkConnect()的子函数sysHwInit2()完成,其中sysHwInit2()会调用sysSerialHwInit2()来完成串行设备的中断挂接。
2.2 串行设备的创建
在usrRoot()中通过调用ttyDrv()完成tty驱动的初始化,而ttyDrv()则调用iosDrvInstall()将tty驱动添加到系统的驱动程序列表中,并且完成与I/O系统层的各系统操作函数的连接。tty虚拟设备层与底层硬件驱动的连接则是通过ttyDevCreate()来完成,并实现各个串行设备的创建。
3 多串口共享中断的驱动程序开发
串口扩展板选用的是盛博的A3-CSD板卡,采用PC104总线接口,集成了4路16C554兼容的光电隔离异步串行口,每个串行口能独立控制发送与接受,且具有16字节FIFO以减少中断请求次数,此外该扩展板还具有一个串口中断状态指示寄存器,可以指示产生中断的串口。根据上述硬件配置,可以在现有Intel8250驱动的基础上进行改进来完成多串口共享中断的驱动程序设计。
3.1 串口设备的初始化
每个串口设备都需要有一个的描述自身属性的结构体I8250_CHAN_EX,即设备描述符,且结构体的第一个成员必须为指向SIO_DRV_FUNCS结构的指针,该结构体还包含描述16C554芯片各个端口的信息以及提供给高层协议的回调函数。在系统启动过程中通过调用sysSerialHwInitEx()完成对该结构体的初始化并且将自定义的全局指针数组pi8250ChanEx[4]中各元素分别指向4个串口的I8250_CHAN_EX结构体,初始化过程中会调用i8250HrdInitEx()将串口驱动程序的设备操作入口函数安装到SIO_DRV_FUNCS结构中,然后调用sysSerialHwInitEx2()完成串口中断的系统连接。其中sysSerialHwInitEx2()的实现代码为:
void sysSerialHwInitEx2 (void)
{
int i;
for (i = 0; i < N_UART_CHANNELS_EX; i++)
if (i8250ChanEx[i].int_vec)
{/*将四个串口设备的中断服务程序i8250ShareIntEx ()连接到同一中断*/
(void) intConnect (INUM_TO_IVEC (i8250ChanEx[i].int_vec),
i8250ShareIntEx, (int)&i8250ChanEx[i] );
if (sysBp)
sysIntEnablePIC (devParasEx[i].intLevel);/*中断使能*/
}}
其中,宏N_UART_CHANNELS_EX表示串口设备的个数,i8250ChanEx结构的成员变量int_vec表示该串口的系统中断号,这里每个i8250ChanEx结构的int_vec项值都是相同的。
3.2 串口驱动程序的入口点函数编写
编写串口设备驱动程序需要完成串口设备的入口点函数,这些函数包括控制命令函数i8250IoctlEx(),启动发送循环函数i8250StartupEx(),轮询方式输入函数i8250PRxCharEx(),轮询方式输出函数i8250PTxCharEx(),回调安装函数i8250CallbackInstallEx(),单串口中断服务函数i8250IntEx(),多串口共享中断服务函数i8250ShareIntEx()等函数。这里只列出多串口共享中断服务函数i8250ShareIntEx(),其余函数可以参考i8250Sio.c文件的各相应函数。
void i8250ShareIntEx (I8250_CHAN_EX*pChan)
{
FASTintoldlevel;
oldlevel = intLock(); /*关闭系统中断*/
IntStatus = sysInByte(UART_INT_STATUS); /*读串口中断状态指示寄存器* /
while(( IntStatus & 0x0F) != 0x00 )/*判断是否有串口中断产生*/
{
if (IntStatus & COM0_ INT _FLAG)
i8250IntEx(pi8250ChanEx[0]);/*串口1产生了中断*/
……………
if (IntStatus & COM3_ INT _FLAG)
i8250IntEx(pi8250ChanEx[3]);/*串口4产生了中断*/
}
intUnlock(oldlevel); /*开启系统中断*/
}
其中,全局变量pi8250ChanEx为I8250_CHAN_EX结构的指针数组,分别指向4个串口设备所对应的I8250_CHAN_EX结构,宏UART_INT_STATUS表示串口中断状态指示寄存器地址。
在进入i8250ShareIntEx()后首先关闭系统中断,通过查询串口中断状态指示寄存器来判断产生中断的串口设备,然后将产生此中断的串口描述符结构体,即pi8250ChanEx[4]中对应的元素,作为参数传递给单串口中断服务函数i8250IntEx(),最后重新开启系统中断。
3.3 以模块加载串口驱动程序
在config.h中加入#undef INCLUDE_TTY_DEV,执行下面的代码后生成一个o格式的串口驱动的库文件8250SioEx.o,然后在应用程序中利用loadModule()将8250SioEx.o动态加载到内存中运行。
sysSerialHwInitEx();/*初始化串口设备*/
sysSerialHwInitEx2(); /*串口中断的系统挂接*/
if (N_UART_CHANNELS_EX > 0)
{
ttyDrv();
for (int i = 0;i < N_UART_CHANNELS_EX;i++)
{
sprintf (tyName, "%s%d", "/tyCo/", i);
(void) ttyDevCreate (tyName, sysSerialChanExGet (i), 512, 512); /*创建tty设备*/
}
}
其中sysSerialChanExGet()返回一个描述串口设备的I8250_CHAN_EX结构体。
4 结束语
本文详细分析了串行设备驱动程序的结构以及在VxWorks启动过程中串行设备驱动程序的加载过程,设计了一个多串口共享中断的驱动程序,利用该驱动程序对4个串口同时进行了连续10小时的数据收发测试,4个串口都能稳定地发送和接收数据。此外,在测试过程中发现在进入多串口共享中断服务函数后需要将系统中断关闭,待执行完中断处理后再开启系统中断,否则会引起串口工作的不稳定。
参考文献:
[1] 周启平.VxWorks下设备驱动程序及BSP开发指南[M].北京:中国电力出版社,2004.
[2] 陈智育,温彦军,陈琪.VxWorks程序开发实践[M].北京:人民邮电出版社,2004.
[3] VxWorks programmer’s guide version 2.0[Z].Wind River System Inc,1999.
[4] TL16C550 asynchronous communications element[Z].1998.
篇4
[关键词]USB ECP Driver Studio 设备驱动程序
[中图分类号]TP[文献标识码]A[文章编号]1007-9416(2010)02-0029-02
1 引言
由于现在大多数计算机没有并行口而具有多个USB接口,因此很多并行口设备无法和计算机直接连接使用。利用基于单片机STC11F32XE的USB 转 ECP 模式并行口可以连接其他ECP模式并口设备,以达到让具有ECP接口的设备可以和没有并口的PC进行数据通信的目的。并口采用的是IEEE 1284-A接口, USB 接口驱动芯片采用Philips 半导体公司的PDIUSBD12,该芯片的数据端口D0-D7接单片机的P0 口,引脚WR_N、RD_N、及A0 分别接单片机的P3.6、P3.7、P3.5 引脚。整个硬件电路图如图 1 所示。当 USB 设备硬件设计完成之后,接着就必须根据硬件特点和需要完成的功能,设计出合乎产品的USB驱动程序,否则,设备将无法被PC机识别,不能正常使用。
2 WDM型的USB驱动程序结构
USB设备的驱动程序是一种典型的WDM驱动程序。WDM驱动程序是分层的。对于USB设备驱动程序来说,其驱动程序包括两个层次:设备(功能)驱动程序层和总线(底层)驱动程序层。USB底层驱动程序由操作系统提供,不要开发者自己编写,它位于USB功能驱动程序的下面,负责与实际的USB硬件打交道,实现复杂而繁琐的底层通信;USB功能驱动程序必须要由开发者编写,它不与实际的USB硬件打交道,是把包含URB(USB Request Block,USB 请求块)的IRP发送到USB底层驱动程序,来实现对USB设备信息的发送和接收。(图2) 给出了USB 驱动程序的结构模型。
3 USB驱动开发编程环境的建立
开发一个WMD 驱动程序,必须要搭建合适的开发环境以此来减小开发难度。对于WDM 驱动的开发,一般必须使用的软件是VC++6.0和DDk (Driver Development Kit,驱动程序开发工具包)。但为了进一步降低开发难度,选择使用了第三方驱动开发工具--Driver Studio。它以类的方式对DDK 进行封装,可以十分容易地利用它提供的向导来产生一个必需的驱动程序框架。
一般首先安装VC++6.0,接着安装DDK,如果需要的话,还可以安装Windows SDK 来辅助开发,最后安装Driver Studio 3.2。因为Driver Studio的类库要使用DDK库函数,所以在安装好Driver Studio 之后必须首先要编译出一个库文件,否则会提示找不到库文件vdw_wdm.lib 等错误。编译该库文件的步骤如下:启动VC++6.0,找到并打开Driver Studio3.2 安装目录下的vdwLibs.dsw工程文件,然后选择DriverStudio->DDK Build Settings,在弹出的对话框中设置DDK的安装路径和运行的操作系统。然后选择菜单Build->Batch Build,要根据驱动运行的平台来选择对应的工程文件,这里选择了x86对应的工程,正确选择之后,单击Rebuild All 按钮,开始编译库文件。这个类库只需编译一次,以后开发其他的驱动就不必再次编译了。
4 USB驱动创建方法及步骤
该驱动程序的主要功能包括:端点0采用控制传输,可以保证传输过程中的数据的完整性和正确性,主要负责USB枚举过程中的数据的读写。另外,又增加了端点1和端点2。端点1采用中断传输,这种传输主要用在数据量不大,但对时间要求较严格的设备中。因此,模块满足了实时性的特点;端点2采用批量传输,该种传输通常用在数据量大、对数据的实时性要求不高的场合中,利用该方式可以完成大量数据的快速传输,可以与高速的ECP并行口相匹配,因此,模块满足了高速数据传输的要求。
单击VC菜单栏下的DriverStudio菜单项,选择Driver Wizard菜单,会出现一个驱动向导对话框。单击Start a new Driver Project 将创建一个新的驱动工程。然后按照向导生成该驱动程序的框架。具体步骤如下:①设置工程名和路径。在弹出的对话框中,设置工程名为UsbToECP、路径为D:\。②选择驱动工程的类型。在对话框中选择 WDM Driver,驱动框架选择DriverWorks C++ Framework。③选择WDM驱动类型。在弹出的对话框中选择 WDM Function Driver。④选择驱动总线的类型。在对话框中选择为 USB 总线,然后在分别设定USB Vendor ID 和USB Product ID。 ⑤设置USB 的端点资源。单击Add增加端点。这里增加 4 个端点,Pipe Name 分别是Ep1_In、Ep1_Out、Ep2_In和Ep2_Out。其中Ep1_In和Ep1_Out选择中断传输,端点地址均为1,传输方向分别为输入和输出,最大包长为8字节,最大传输大小为 4096字节。Ep2_In和Ep2_Out选择批量传输,端点地址均为2,传输方向分别为输入和输出,最大包长为64字节,最大传输大小为 40960字节。⑥选择需要处理请求类型。这里选择IRP_MJ_DEVICE_CONTROL、IRP_MJ_READ和IRP_MJ_WRITE。它们分别与API函数 DeviceIoControl、ReadFile和WriteFile一一对应。⑦设备I/O操作方式。配置IRP_MJ_READ和IRP_MJ_WRITE的缓冲方式分别为Buffered。另外还需要增加4个IO Control 的控制代码:EP1_READ、EP1_WRITE、EP2_READ、EP2_WRITE。打开方式选择Interface。⑧添加注册表项。可以根据自己需要增加,这里增加了一个设备名称。⑨设置电源管理。选择Device requires an inrush of power at startup,说明该设备启动时需要大电流,这样做的目的是防止相同的设备同时上电,减少对电源的冲击。步骤10-13按默认配置即可。
5 驱动的编程
USB驱动程序的编程最主要的就是编写端点1和端点2的数据处理函数,其中主要编写的是UsbToECPDevice类成员函数Read()、Write()、及DeviceControl()中调用的4 个IoControl()函数。
Read()函数对应着WIN32 API的ReadFile函数,其参数通过KIrp I传递过来。因为端点1指定的缓冲方式为Buffered 方式,所以调用KIrp类的成员函数I.BufferedReadDest()来获取保存数据的缓冲区地址,调用I.ReadSize()来获取读到的数据长度。如果获取到的缓冲区地址为NULL,则说明参数无效,则以USB_STATUS_INVALID_PARAMETER来完成该IRP,然后返回USB_STATUS_INVALID_PARAMETER。若读取的字节数是0,就直接完成该IRP,不需要进行数据处理。接着创建一个URB来完成数据的处理。因为端点1采用的是中断传输,所以必须创建一个中断传输的 URB并提交它,端点管道KUsbPipe类提供一个创建中断传输URB的函数BuildInterruptTransfer。这样底层的USB 总线驱动程序就会负责从端点 1 读取数据,当完成数据的读取后,提交相应URB的函数就会返回。当URB创建成功后,利用KUsbPipe类的成员函数SubmitUrb()来提交这个URB,否则返回资源不足的错误信息。SubmitUrb()函数返回后,可以用URB的成员变量TransferBufferLength来获取实际读到的字节数,最后删除创建的URB。
本文为全文原貌 未安装PDF浏览器用户请先下载安装 原版全文
Write()函数的处理方法与Read()函数的方法非常相似,不同之处在于利用KIrp类I的成员函数 BufferedWriteSource()和WriteSize()来分别获取缓冲区的地址和传输的字节数。另外,函数EP1_READ_Handler()和EP1_WRITE_Handler()的实现与Read()和Write()函数基本是一样的,略有不同。
端点2 的EP2_READ_Handler(KIrp I)和EP2_WRITE_Handler(KIrp I)与端点 1的EP1_READ_Handler(KIrp I)和EP1_WRITE_Handler(KIrp I)处理方式几乎是一样的,主要的不同是在创建URB时要用到创建批量传输URB 的函数BuildBulkTransfer(),其参数及意义与BuildInterruptTransfer()相同。
6 驱动的安装
在对端点1和端点2编程完成之后,然后对其进行编译,如果没有错误,可以看到编译报告中有一行“MODULE=.\objfre\i386\UsbToECP.sys”,这个就是所要的驱动文件,另外,在目录下还产生一个inf文件,其也是安装驱动时需要的一个重要的文件,它里面有一些重要的安装信息,可以根据需要进行修改。一般主要是对inf的Stings 进行修改,表1给出了该驱动的Strings 段的几个重要属性的修改。
将该设备与PC机连接,系统会提示安装驱动,首先指定驱动安装所要使用的inf文件所在的位置,该inf文件可以在驱动工程目录的driver目录下找到,是由向导自动生成的。然后选择安装驱动所需要的UsbToECP.sys文件,该文件在D:\ UsbToECP\driver\objfre\i386下。正确安装驱动之后,打开计算机的设备管理器,将会看到该USB设备。如下图3所示。打开图3中的Class for BinBinUsb devices下的BinBinUsb Device属性,选择相应标签,将会看到如下图4的驱动信息。
7 结语
USB设备驱动的开发是设备开发过程中必不可少的一项任务。通过研究利用VC++、DDK和Driver Studio对USB驱动程序的设计方法,成功地设计了基于单片机的USB转并口设备的驱动程序。通过测试,使用该驱动的USB转并口设备运行稳定,达到了预期的效果。这种USB驱动的设计方法简化了开发难度,开发的驱动稳定可靠,必将受到USB设备开发者的广泛关注,同时也给其他的基于WDM驱动的开发提供一个新途径。
[参考文献]
[1] 荣佳波,常明志,井科伟,杨少勇.USB 设备的WDM驱动程序设计[J].应用科技,2004,31(3);39-41.
篇5
[关键词]数字电视机顶盒,驱动程序开发,软件架构,Pipeline
中图分类号:TN948 文献标识码:A 文章编号:1009-914X(2014)24-0098-01
1 背景和意义
在国际社会综合环境的影响下和从中国自身发展的实际情况出发,中国正在逐步改变和调整经济结构和产业结构,扩大内需,大力发展文化产业和电子信息产业。2010年1月13日,总理主持国务院常务会议决定加快推进电信网、广播网、互联网三网融合[1],并审议通过了推进三网融合总体方案。2010年至2012年为试点阶段,以推进广电和电信业务双向阶段性进入重点,2013年至2015年为推广阶段,国家将全面推进三网融合。
目前机顶盒软件开发中遇到的普遍问题是软件开发周期长。分析其原因,一部分是由于项目管理问题所致,本文对此因素不作讨论;另外一个因素就是随着机顶盒芯片所提供功能不断向传统PC靠拢,带来的是平台驱动软件和上层应用软件复杂
2 机顶盒软件开发传统架构
机顶盒软件开发的传统架构主要分为基本型,改进型和中间件。基本型主要是以芯片的功能模块为单元,对上层软件提供标准接口。而改进型则在基本型的基础之上,在驱动层中集成部分复杂应用(如PVR),降低了上层软件开发这些应用的难度。中间件则是为满足机顶盒应用程序的高度可移植,其对应用程序而言彻底屏蔽不同平台的差异。
2.1 基本型
在最初的标清机顶盒软件开发中,由于其所提供的功能简单,部分客户会选择在应用程序中直接调用芯片驱动程序的开发模式。
2.2 中间件
数字电视机顶盒中间件(middleware)[2]是指位于数字电视机顶盒芯片驱动程序与应用程序之间的软件部分。中间件标准的应用极大地推动数字电视机顶盒市场的发展。目前,中间件厂商主要有茁壮、NDS、爱迪德、天柏、同洲等厂商。
2.3 存在问题分析
基于中间件架构来进行数字电视机顶盒软件开发,是目前市场上比较通用的做法。由于应用程序基于中间件之上,因此其可移植。系统集成的主要工作转变为如何移植中间件到芯片厂商的平台驱动之上。在大量的项目实践中发现在目前的软件架构下仍然存在如下问题:
(1)系统集成方式:每个客户都在做着重复类似的工作。以节目直播为例,每个客户都要建立一套自己的播放流程,并建立如下设备的之间的相互关联:Tuner,Tsrouter, Demux, ES buffer, Video Decoder, Video Img,Video Output。
(2)中间件可移植性:无法彻底屏蔽驱动API函数的改变。由于在客户的中间件中直接调用芯片的驱动API函数,而这些API函数常常直接与硬件模块紧密相关。虽然芯片厂商努力保持底层API函数不要改变,但是当芯片更新换代或升级的时候,这些驱动API函数常常不可避免的也随之改变。于是,导致客户的中间件也需要做出相应的变动,并进行重新验证。
(3)驱动调用时序:无法引导客户遵循芯片厂商期望的驱动API函数调用时序。中间件的基本操作通常难以一一对应的映射到芯片的驱动程序上,在大多数情况下,中间件定义的一个基本操作需要调用底层驱动的若干api函数才能完成。最重要的是,在这些底层api函数执行的时候,常常是有时序的要求。对于芯片厂商提供的驱动程序而言,原则上不应该对驱动API函数调用时序做任何的假设。
3 pipeline技术分析
随着画中画,时移等新应用的不断出现,通过直接调用芯片驱动程序的方式来移植机顶盒中间件的方式,正变得越来越复杂。迫切需要在芯片驱动程序之上,能存在一个高度抽象层,彻底屏蔽不同平台的底层差异,简化机顶盒资源的管理,降低设备厂商中间件集成的难度,减少在系统集成中遇到的问题,缩短机顶盒软件开发周期。
关于pipeline技术,本文将分硬件设计中的Pipeline技术[3][4]和软件设计中的Pipeline模式[5]进行描述。
3.1 硬件设计中的Pipeline技术
流水线(Pipeline)技术是目前广泛应用于微处理芯片(CPU)中的一项关键技术。流水线设计就是将组合逻辑系统地分割,并在各个部分(分级)之间插入寄存器,并暂存中间数据的方法。目的是将一个大操作分解成若干的小操作,每一步小操作的时间较小,所以能提高频率,各小操作能并行执行,所以能提高数据吞吐率(提高处理速度)。
3.2 软件设计中的Pipeline模式
Pipeline设计模式的理念是使多个对象处理同一个请求,这些对象形成一条链。每个对象拥有下一个对象的引用,该对象可以进行预处理,交给下一个对象处理,然后把处理结果返回给下一对象。Pipeline像是流水线,每个对象负责一个动作,一起协作完成一件事情。
3.2.1 序列模式(sequence)
Pipeline设计的序列模式如图4所示。在序列模式中,首先由Pipeline控制中心创建整个序列中的所有模块并建立数据的流向关系, 然后把数据输入传递给第一个模块,启动Pipeline开始工作。当第一个模块完成指定功能后,根据模块序列找到下一个模块号, 并把处理过的数据传递给下一个模块, 以此类推,直到最后一个模块为止。
3.2.2 中心模式(center)
在中心模式中,每个模块都从Pipeline控制中心接收数据输入,然后把处理结果返回给Pipeline控制中心。由Pipeline控制中心决定调用下一个模块,并把上一个模块的输出作为下一个模块的输入。 以此类推,直到最后一个模块为止。
4 总结
机顶盒驱动软件架构设计,是一项涉及正确性,健壮性,可重用性,灵活性和高效性的系统设计工作。本文采用了pipeline架构来完成机顶盒驱动设计,并将机顶盒驱动设计分为流水线管理(Pipeline Manager)设计,视频输出管理(Video Presentation Manager)设计和音频输出管理(Audio Presentation Manager)设计三大部分。研究了通过流水线来统一管理数字电视机顶盒系统资源,其简化了机顶盒设备厂商系统集成的难度,减少了系统集成中所遇到的问题,缩短了数字电视机顶盒产品的软件开发周期。
参考文献
[1] 王大鹏,雒春雨,三网融合背景下机顶盒技术发展方向,2007国际有线电视技术研讨会,2007.
篇6
摘要:模块化就是把人才培养方案,专业,课程,课堂都看成模块,世界万物都是模块,学生也是模块,大模块分成小模块,小模块做好了,大模块也就做好了,《Java 程序设计》是职业学院软件技术专业必修课,学习目前世界上优秀的编程语言, 对提高学生就业能力有重要意义。然而,由于 Java 语言具有较高的抽象性、复杂性和严谨性,学生普遍感到学习难度较大;加之受传统教学模式的制约,学生往往感觉抽象、枯燥,学习兴趣不高,接受程度有限。为改变这一现状,我们将项目任务驱动法引入教学,对课程体系进行优化,对实训内容进行重新设计,以此激发学生学习热情、改善教学效果、提高教学效率,从而更好地满足职业院校培养实用型技能人才的要求。
关键词:Java程序设计;项目任务驱动;项目实训 。
Java 语言作为一种纯面向对象的程序设计语言, 是目前世界上优秀的编程语言之一, Java平台以其移动性、安全性和开放性受到g迎,在企业中得到广泛应用,尤其是近年来基于 Android 系统的Java 手机软件发展十分迅速,在形成一个新兴产业。Java 程序员的就业前景广阔,可以从事 Java 桌面软件开发、Java手机软件开发、Jsp网站开发以及其他与 Java 语言编程相关的工作。 《Java 程序设计》作为我院软件技术专业的专业必修课,力求使学生掌握 Java 面向对象程序设计能力,具备从事 Java 编程工作的基础,提高软件技术专业学生的就业能力。 对《Java 程序设计》教学进行深入改革、提高教学质量,有利于抓住当前 Java 技术广泛应用,社会对 Java 程序设计人才需求量大的有利时机,提高软件技术专业学生的就业率,提升软件技术专业的影响力。
一、《Java 程序设计》课程的教学现状
(一)课程地位和特点 计算机软件技术专业的培养目标是:培养德、智、体全面发展的学生,能掌握计算机系统基础知识和基本原理,熟悉计算机系统常用(软硬件)工具,具有一定的硬件操作和较强的软件开发能力。学生毕业后,既有大专层次的理论知识,又具有本专业较熟悉的实际操作技能适应在企事业单位计算机应用一线上直接参与管理或工作;适应在计算机软件企业从事专业的软件开发工作。 安排在第二学期,为培养学生“从 事软件开发工作”而开设。教学目标是让学生掌握 Java 面向对象程序设计能力,具备从事 Java 编程工作的基础。前导课程是《C语言程序设计》,掌握基本的编程能力基础;后续课程是《Java Web 开发技术》,学习实用的编程技术。 《Java 程序设计》是一门典型的程序设计类课程,由于程序设计本身具有的抽象性、 Java语言的复杂性和严谨性及传统教学模式的影响,学生普遍感到学习难度大,学习兴趣不高, 接受程度有限。
(二)难点和不足 由于程序设计工作本身具有的抽象性,对学生的逻辑思维能力要求较高;而 Java 语言的复杂性和严谨性,又使学生普遍感到 Java 语言学习难度大;加之传统教学采用的“先讲解后演示再练习”的方法,往往让学生感觉到过于枯燥和抽象;而当前《Java 程序设计》的课程体系更使之难以适应高职院校培养高技能人才的要求,其主要问题有: 1. 课程体系设计不合理。当前《Java 程序设计》的授课模式以理论讲授和演示为主,理论内容占主导地位,而实训环节处于从属地位。 由于当前的《Java 程序设计》高职课程体系很大程度上仍然是本科课程体系的简化版,是从本科课程体系中删除较难理论内容并增加实践内容而形成的,并没有完全摆脱本科模式的影响。然而,高职教育的培养目标是不同的。 高职教育更强调培养熟练的动手实践能力。因此,高职课程和本科课程在课程体系的设计应该是完全不同的,不仅仅是理论与实践的比例问题,而应该重新设计课程体系,使理论内容为实践内容服务,才能真正实现以培养动手实践能力为主导。 2. 实训内容设计不合理。当前《Java 程序设计》的实训内容大多属于验证性实训,与真实开发项目存在很大差距,学生难以适应实战项目实践,对培养岗位职业能力的作用非常有限。课程现有实训内容是根据理论内容设计的,是为了验证理论内容而实践,从而导致实训内容强调紧扣理论内容,而忽略了真实的岗位情境,造成实训情境过分理想化。这样即使学生能掌握一些实践技能,但是这些技能在真实的岗位情境中却难以应用。因此,必须设计好实训内容,突出 Java 语言的实用性、针对性,才能引导学生“在做中学”。 针对上述问题,我们引入项目任务驱动式教学法,对《Java 程序设计》课程教学进行改革。
二、《Java 程序设计》课程的项目任务驱动式教学改革
(一) 项目驱动是一种教学理论基础上的教学法
在教学过程中,把具体的、学生感兴趣的、有意义的具体任务作为线索,将知识点巧妙地隐含在每个任务之中;学生在预定情境下,经过思考并借助教师的引导解决问题,通过自主建构的方式获得知识、 培养职业能力。 与传统教学 “教师讲、学生听”,教师处于主动传输知识的地位,学生处于被动接受知识的 地位的模式相比,项目驱动法强调的是 “以学生为主体、以教师为主导、以任务为主线”。在 任务驱动法教学过程中,学生能充分发挥主观能动性,围绕任务要求开展实践探索,教师不再是课堂的中心,单方面地向学生灌输知识,而是在学生完成任务的过程中起到组织、引导、督促、 协助、评价的作用。采用这种教学方法,可以解决传统教学存在的无法充分调动学生的积极性和创造性,项目驱动式教学改革符合高职教育发展方向,符合国家教育部《关于全面提高高等职业教育教学质量的若干意见》 提出的高职教育的教学过程要突出实践性和职业性的要求。
(二)《Java 程序设计》课程的项目驱动式教学
1. 概述
为了更好地实施教学,切合高职教育人才培养的要求,培养适应行业需求的程序设计人才, 我们在《Java 程序设计》课程中引入任务驱动教学法,以行业流行的my Eclipse 作为开发平台,对 《Java 程序设计》课程教学进行改革。我们紧扣 教学大纲,重新梳理《Java 程序设计》课程的知识体系,设计一系列具有实用性和趣味性的任务案例,并将所有知识点融入到各项目案例中。建立一套任务驱动式课程体系。我们以培养岗位职业能力为主线,用典型任务序化知识,并将知识融入任务情景之中。按“教师提出任务->学生分析任务->学生解决任务->学生提交任务完成报告->学生相互评价->教师总结与评价”的结构组 织每一个任务。任务驱动的整个流程按照实际需要进行安排,如果不能在一个教学时间单元中完成整个流程,则可以分段进行,比如把学生解决任务这个模块放到课余时间进行,让学生自主学习与挖掘新知识,加深对知识的理解。
2. 课程体系的优化设计
《Java 程序设计》课程的内容由三大部分构 成:Java 基本语法、Java 面向对象机制、应用编程。其中 Java 面向对象机制部分具有较强的理论性和抽象性,应用编程部分则更多偏向实践性。 由于该课程的知识点覆盖面广,内容之间联系紧密、互相渗透,我们根据教学目标重新梳理知识点之间的联系,按照任务驱动的模式将知识体系划分为 14 个模块,每个模块又包括三个小任务即启发式模块、知识点任务和实践巩固任务,14 个大的模块如下所示: (1)Java 开发环境的搭建和使用。Java 特 点;Java 实现机制;Java 的体系结构;集成环境 myEclipse 。 (2)Java 基本语法。Java 应用程序结构; Java 程序编写及运行过程。Java 语言标识符和关键字;Java 语言数据类型;Java 语言运算符与表 达式;分支控制结构;循环控制结构 (3)类和对象。类与对象概念与特征、属性和方法;类与对象的关系;定义类的语法;创 建类的对象;使用对象的步骤;类的方法组成部 分;定义和使用类的方法。变量作用域;定义包和导入包的关键字;Javadoc 注释。 (4)封装和重载。封装的作用;对属性封装;用构造方法实现对象成员的初始化。方法重载;Java 中的构造方法与实例方法区别;对构造方法进行重载。 (5)继承和多态。继承的概念;继承关键 字;父类与子类之间的关系,super 关键字。多态 的概念;静态多态,动态多态;多态的实现。 终类和抽象类。 (6)接口。接口的概念,接口编程的实 现; (7)数组。声明和创建数组;数组的初始化;数组元素的使用。 (8)字符串。定义、初始化字符串;字符 串常见操作及方法;StringBuffer 类的定义和方 法。 (9)异常处理。异常的概念;异常处理结 构;抛出异常;声明异常;自定义异常。 (10)GUI 编程。Java GUI 界面的基本原 理;常用的 AWT 和 Swing 组件;布局管理器;菜 单;Java 事件组成;委托事件处理机制;常用事件类; (11)数据库编程。JDBC 的概念;JDBC 框 架结构;JDBC 驱动程序 JDBC 驱动程序编程的基本步骤。 (12)文件 I/O 编程。Java 的文件管理; Java 目录管理;文件的创建;文件类的方法;顺序文本文件;流的操作步骤;随机文本文件;文件的追加。 (13)多线程编程。Thread 类;Calendar 类;SimpleDateFormat 类;线程的状态;线程的优先级;线程的通信。 (14)网络编程。TCP/IP 协议;Socket 类; ServerSocket 类;UDP 协议;发送数据包;接收数据包。 本文提出的课程体系将教学重点放在实践 较强的应用编程部分,涵盖了GUI 编程、数据库编程、文件 I/O 编程、多线程编程、网络编程等 技术,而对理论性、抽象性较强的 Java 面向对象机制,不再深入分析其内在机理,只要求学生掌握基本的概念、原理和语法,为后面的应用编程提供基础。
3. 实训内容的优化设计
Java 程序设计具有很强的实践性,但其理论知识却很抽象,学生仅理解理论知识点是远远不 够的。传统的“先讲解理论知识点,再展示演示案例帮助学生理解,后再进行实践练习”的做法是以教师为主导,学生被动学习的灌输式教学法,这样导致学生学习兴趣不高、接受程度有限,导致演示案例和实践练习的效果大打折扣。 对此我们重新设计教学流程,摒弃这种以教师为主导的做法,突出学生在学习中的中心地位。首先在每个单元中精心设计一个有趣、具有启发性的演示案例,先让学生看到程序运行效果,激发其学习兴趣和积极性;然后从案例中引出该知识点的任务,让学生分组讨论该任务,分析该任 如何完成;接着限定任务的完成时间,让学生在该时间内完成任务并提交任务完成报告,在任务完成后学生们要进行小组互评;后教师再根据学生完成任 务的情况进行总结和评价,包括对学生任务完成 程度的评价,对任务背后的知识点的解释,对学生还没熟悉的重难点进行总结。至此,学生通过完成任务,不但对相关知识点有了一定感性认识,而且通过任务评价和总结,能够更好地理解和消化理论,提升为自己的理性认识;后根据需要再设计 1-2 个案例作为实训练习,由浅入深、由简单到复杂地巩固知识点和技能。很明显,这是一种 “从实践到理论,再从理论到实践”的做法,符合人类认识客观世界的规律。由于该任务贴近学生学习的真实情境,学生感到亲切、容易理解其次,由启发式案例提出本节要完成的任务。这里任务比启发式案例要求稍高,有利于在学生现有的基础上挖掘自己的潜力,更深的理解知识。学生在接到任务后当堂讨论并分工,这样有利于培养他们的团队合作精神,学生完成任务的过程可以放在课后进行。在任务完成后需保留源代码,对程序运行结果保留截图并用 ppt 演示任务完成流程和填写任务完成情况表;回到课堂上后学生将任务结果进行展示并对其他小组评分,教师进行评价并补充讲解重难点,包括程序结构、定义变量、数据类型、运算符和表达 式、分支控制结构、循环控制结构等。教师对知识点和关键技术步骤进行总结,对实践练习中出 现的问题进行分析,可以帮助学生构建一个 晰、完整的知识结构后,进行实践巩固练习。,以任务为驱动,教师只是起到引导的作 用,这样学生掌握的知识才是真正属于自己的知识。
三、结语
如上所述,项目任务驱动式教学的关键是合理设计项目任务,将知识点巧妙地隐藏到任务中,让任务本身具有趣味性并尽可能地贴近真实情境,使学生在完成任务的过程中不仅获取相关知识,而且发展实践能力。理论知识点不再是案例的主导, 而是作为演示案例的抽象推广。实践证明,对于《Java 程序设计》这门理论性和实践性都很强的课程,通过引入项目任务驱动教学法,进行项目实训,使理论和实践互相渗透,确实能够,激发学生的学习热情,改善教学效果,提高学生的动手实践能力,能更好地满足高职院校培养实用型技能人才的要求。
参考文献:
篇7
关键词:教学模式;任务驱动;c语言程序设计;教学实践
0 引言
《C语言程序设计》作为计算机程序设计的基础,是理工类本科学生的一门必修课,尤其是C语言对计算机硬件具有很好的编程能力,使其在工科教学中的生命力越来越强。我们学院在C语言的教学上基本上还是采取传统的教学模式:按照C语言教材自身的内容上课、上机,采取笔试形式考试。这样的教学模式使得学生过分注重C的语法、语句等规则,而忽视了对编程思路的培养,学生独立分析问题和解决问题的能力没有很大的提高,给学生参加全国等级考试以至后续课程的学习留下了隐患。下面就作者在C语言教学过程中的经验谈谈想法。
1 传统教学模式
传统教学模式是以教师作为课堂的中心,以广大学生为讲授对象,以课本作为讲授的主线。虽然现在教学环境大都采用多媒体大屏幕,操作方便,易于控制教学内容和节奏,能在规定课时内呈现较多信息量;但是学生往往处于被动学习状态,教学内容难以适应学生的个体差异,所有学生被迫按照老师的讲授速度进行学习,不利于培养思维能力与创造能力。
上机实践课上通常老师会事先布置几道编程题,但是学生上机目标不是很明确,问的问题多数是属于同一类问题。老师不停地在机房各处一一解答,既浪费时间,也没取到很好的效果。学生在机房没有紧迫感,甚至有些学生觉得无事可做,就会打游戏等。这种上机方式不利于培养学生的动手能力和自我解决问题的能力。
学生学不好C语言主要是因为C语言教学的重点不是放在如何解决问题上,而是把大部分的时间放在讲解语法规则和语句格式上,其后果就是学生一拿到任务后首先琢磨如何定义变量,用什么语句,而不是对问题进行合理的分析,考虑最佳算法,这样当然觉得很难而且也设计不出好的程序。学生参加全国等级考试的通过率很低也就不足为怪了。
2 “任务驱动式”教学模式
采用“任务驱动式”的教学方法,知识及技能的传授以完成典型“任务”为主,有利于提高学生利用计算机进行自主学习与解决问题的能力。
2.1 教学内容的改革
我们把通过全国计算机二级考试作为学习c语言的目标,针对等级考试大纲来确定教学计划以及教学内容。为此,我们从第一堂课起就强调并要求学生通过全国二级考试,既让学生明确短期学习目标,又放眼长远的努力方向,以激发学生进行自主学习的主动性。我们将教学内容分离为几个相对独立的模块,即结构模块、数组模块、指针模块、函数模块和文件模块。模块的内容要循序渐进,把握好由易到难,由简单到复杂的教学过程,否则容易使学生一开始就产生一种畏惧情绪,失去学习兴趣。然后,力求概念准确,分散难点。各模块的教学目标要十分明确,教学量适中,让学生很容易把握住教学要点,理解和掌握教学内容。
2.2 设计好实验任务
实验任务的设计包括任务的提出与分解、最终达到的目标、解决问题的方法等。目的性要强,任务要明确,这样才能很好地缓解计算机基础课程实验教学中学生无事可做,玩游戏、上网聊天等现象。要培养学生限时编程的良好习惯,要求学生在规定的时间内编写和调试好给定的程序。通过这些基本功的训练,学生在具备了扎实的计算机程序设计能力后,就较容易通过全国计算机二级考试。
在程序设计语言教学中,算法是程序设计的灵魂,学生编写不出程序的首要原因是设计不出―个合适的算法。因此,在教学中应对常用的算法结合典型实例进行详细地讲解,强调算法的步骤,让学生对算法有比较深刻地了解,并鼓励学生从不同角度去思考问题,对于同一个问题的解决用多种方法来实现。这样有助于拓展学生的思维,增加学生对学习C语言的兴趣。
例如:计算n!
我们可以采用递归法:
2.3 学习成绩评价方式的改革
采用“笔试+上机考试”的评价方法可以提前让学生体验全国等级考试的过程。同时,两种形式考试都通过才算这门课程通过,也能促使学生在学习c语言的基本知识之外加强编程实践,让学生学到c语言的语法规则的同时也掌握了程序设计的方法。
篇8
关键词 任务驱动 任务驱动教学法 网络程序设计
中图分类号:G424 文献标识码:A DOI:10.16400/ki.kjdkz.2015.11.056
Task-driven Teaching Method in Network Programming Course Teaching
XIAO Zihong
(Hu'nan Police Academy, Changsha, Hu'nan 410138)
Abstract Task-driven teaching method is suitable for practical strong, comprehensive and strong curriculum, enabling students to break through the limitations of classroom teaching, students can quickly accumulate knowledge and skills in a short time, to improve students' network programming ability, good teaching effect. This paper discusses the task-driven teaching method in Network Programming course Teaching, to provide a reference for the practice and reform of the same category.
Key words task-driven; task-driven teaching method; Network Programming design
任务驱动教学法是指在课程教学的过程中,学生在教师的引导下,紧紧围绕一个或多个特定的教学目标,在教学任务的驱动下,通过对现有知识技能和学科理论的主动应用,共同进行自主探索的互学习。任务驱动教学法要求教学任务具有非常强的目标性,要刻意营造教学情境,创设情景使整个教学工作在真实的任务驱动下进行。在整个教学过程中,教师处于中心地位,教师在安排布置学生完成教学任务时,以引导或演示的方式,启发学生给出完成该任务的思路、方法和结果。在教师安排下,学生花大量的时间自主完成自己的学习任务,在学生自己动脑、动手完成任务,从而学习和掌握相关的知识与技能。
任务驱动教学法是知识及技能的获取以任务为中心,着重培养学生分析问题、解决问题、创新问题的综合能力。它以某一具体任务为出发点,通过课堂引导、操作实践、评价反馈等方法来完成不同阶段的任务,从而达到培养学生主动获取知识、应用技能等综合能力。
1 任务驱动教学法的可行性
1.1 网络程序设计的课程特点
网络程序设计课程是一门实践性、综合性都较强的课程。该课程主要是以网络程序原理及设计思想为主线,学习网络程序设计与编写的方法,从而进一步学习分析问题、解决问题的方法,而不是单一学习任何一种特定语言的语法规则,因此在教学中非常注重学生解决问题的编程技能和程序研发能力的培养。其次,作为大学高年级专业课程,学生作为学习主体存在较大的群体差异,他们的认知水平、专业基础知识、程序研发能力参差不齐。如果以统一的教学方法来教学,则难以取得很好的教学效果。
1.2 任务驱动教学法的可行性
网络程序设计的教学知识点很多,教学内容通常可以归纳为三类:第一类是基础语法类,强调网络程序语法知识与规则的学习,使学生掌握最基本的程序语法和程序设计思想; 第二类是覆盖类,这类知识的学习能使学生的网络知识体系更加全面,这部分内容倾向于全面性的专业知识的应用;第三类是综合项目类,此部分的教学内容更加注重网络程序设计中综合研发能力的培养。通用的教学模式是按基础类、覆盖类、综合项目类的顺序实施教学,这种方法实施简单、层次性强。
任务驱动教学法旨在培养学生运用及提升技术知识水平的能力,培养学生积极探索新知识的能力。任务驱动教学法改变了通用的教学模式,从综合项目类入手,设计不同的任务,在任务的驱使下完成基础类、覆盖类的教学内容的学习。这种方法促使师生共同参与到日常课程教学中,在完成课程任务实践的过程中,部分学生会遇到暂时难以解决的问题,为了完成任务学生会自发讨论交流、查询资料,协作完成任务,这样做的结果会使课堂教学变得气氛活跃而且生动深入。教师把课堂教学的重点和难点都落实到了解决课程任务过程中发现的难题,通过交流展示等反馈机制及时了解学生的学习状况,更好地帮助教学引导学生达到预定的教学效果。任务驱动教学法是理论教学理论和实践教学理论的高效运用,非常适用于网络程序设计类的教学中。
2 任务驱动教学法的实施
2.1 任务设计的原则
任务驱动教学法以任务为中心,任务的焦点是解决某一现实问题,激发学生积极参与欲望的问题。让学生在完成教师所设计的各种任务同时,能够不断地增强知识应用技能。因此在设计任务的时候应遵循以下几个原则:
(1)整体性原则。各阶段的任务要能够涵盖教学内容的绝大多数知识点。任务的知识点要能形成一个有层次的整体,让学生在不断完成任务的过程中获得网络程序设计知识和技能。
(2)实用性原则。要使学生通过完成任务将得到有价值的结果,具有较强的实用性,激发学生的创作潜能。
(3)开放性原则。任务设置的难易程度要适中,还要在任务中为学生留出创造性能力发挥的空间。
(4)可操作性原则。任务应该是可操作的,在现有的能力水平下能够完成,要充分考虑到学生已具备的知识与技能。
(5)真实性。任务的设计要贴近学生的日常生活实践和现实需要,这样不仅有利于教师对任务的表达,而且有利于学生对任务的精准把握。
2.2 任务驱动教学法在教学中的实施
此教学法的实施可分成:创设情境,精心设计任务;引导学生进行任务分析;学生自主探究;展示交流;及时评价与总结共五个步骤。
(1)创设情境,精心设计任务。实施任务驱动教学法要营造真实、有现实意义的情境,引起学生的学习兴趣。学生的求知欲望是建立在浓厚的兴趣和丰富的情感基础上的,所以要调动学生的学习积极性,先要唤起他们的学习兴趣,引导他们进入设定的学习情境。
任务是任务驱动教学法的核心,它直接决定教学目标完成的好坏。因此,教师在实施任务驱动教学各阶段目标时,要精心分析教学目标,仔细分解或组合每个教学内容,尽量为学生设计出具有代表意义的且可操作的任务,尽可能覆盖每个知识点。
(2)引导学生进行任务分析。如果精心设计的课程任务来自学生的兴趣或现实生活需求,学生会非常感兴趣。教师应从学生的各种需求出发,设计出合适的教学任务,才有利于学生主动学习,才能突破教学重点难点。在学生跃跃欲试积极思考的时候,教师不要急于提供方法或提出解决方案,要恰当地引导学生对任务进行分析、讨论,将大的任务分解为一个个的更小级别的任务,步步为营,逐步推进,最终达到预定的教学目标。
(3)学生自主探究。这是任务驱动教学中的重点内容。经过教师课堂上的分析引导,学生了解了每一个任务中应解决的关键问题和涉及的核心技术,也都能获得各自不同的理解和技术方案。对于解决问题中的疑难点,也正是教师在教学设计时隐含在各个任务中的知识点,在下次课堂教学时教师可以将此作为典型问题引导学生解决。在学生完成任务的过程中,教师要创造一个良好的交流平台,能够实时帮助学生进行自主学习,及时解决学生遇到的疑问、降低学习难度。
(4)展示交流。学生各自完成作教师布置的任务后,通过自评自说的方式在课堂进行交流展示,各小组相互欣赏完成后的成果,进行互评;还可以通过提问的方式进行互相交流,咨询对方完成任务中好的实现方法和步骤。
(5)及时评价与总结。教师要适当地对学生的学习情况进行总结和评价,课时允许的话还可以进行自评和互评。恰当及时的评价能充分肯定他们的成果,调动他们的积极性,增强自信心。通过评价时的互相交流讨论,既培养学生的创新意识和团队精神,又培养了善于分析和接受他人建议的良好品质,还能体会到学以致用的快乐。
评价在任务驱动教学法的实施过程中是非常重要的环节,评价能够使从技术技能等方面给予学生启示,又能从师生的讨论和评价中多角度地看到自己的不足,把原理性知识与操作性技能固化为个人的程序研发能力,快速提升网络编程综合能力。
3 使用任务驱动法教学要注意的问题
(1)分解的任务必须有实用价值。分解的任务要与学生生活紧密联系起来,最好是学生乐意解决的任务,这样才能更好地激发学生的学习热情。实施时适当引用项目教学法进行辅助教学,教师可以独立研发本课程相关项目并分解成小项目,把其中一些小项目作为课程案例进行课堂讨论,以项目经理的角度指导学生如何完成任务,而将另外一些小项目作为课程任务布置给学生。
(2)应遵循循序渐进原则,教师要注意及时指导。任务驱动教学法能驱动学生从被动学习者变为自主学习者,从而使学生能在学习知识技能的同时也提高自主学习的能力。任务驱动教学法的最终目的是为了知识点的掌握和技能的获取,所以在知识点的选取方面应遵循由简到繁、由易到难的循序渐进的原则。还要求教师创建一个合适的交流平台,及时指导学生解决任务中的因难。
(3)对教师综合素质要求较高。任务驱动教学法对教师有很高的要求,如果教师引导缺乏技巧或者对整个课程任务的设计不够理想,都可以会大大影响教学效果。教师先要精心地拆分教学目标,然后将教学目标巧妙地蕴涵到某个教学任务,从而得到教学内容。这些教学任务不仅要有典型性,而且还应有挑战性,所有这些都需要教师把握学生的知识能力水平,本课程知识、技能及其内在联系。
任务驱动教学法是一种获取操作性、实践性教学内容的非常有效的方法。在使用这一方法进行教学时要充分考虑教学对象的能力与水平,对教学内容有比较精准的把握,才能保证对这一方法运用的合理、恰当。
参考文献
[1] 杨建勋.计算机教学中任务驱动教学法的实施[J].教育与职业,2013.6:159-161.
[2] 侯建花,杨长青.“C语言程序设计”实验教学的改革与实践――以淮海工学院为例[J].计算机教育,2010.1:114-115.
篇9
关键词:C语言程序设计;案例驱动;教学方法
中图分类号:G642 文献标识码:A
1引言
“C语言程序设计”是计算机专业的基础课,同时也是“数据结构”、“操作系统”、“嵌入式系统”等计算机专业课程的前导课程,它已经成为我院计算机专业的一门必修课,在整个课程体系中占有重要地位。“C语言程序设计”不仅是学生学习程序设计的开端,而且与学生形成程序设计过程理念、提高分析问题、解决问题的能力有着密切的关系。通过这门课程的学习,学生可获得程序设计语言知识,培养软件开发能力,还可以锻炼逻辑思维能力,对学生综合素质的提高具有一定的促进作用。
客观上,C语言教学过程中,教师的教法和学生的学法对教学效果会产生直接的影响。由于C语言牵涉到的概念比较复杂,规则繁多,使用灵活,容易出错,不少初学者感到学习困难。传统教学过程中,教师需要在课程规定学时内讲解C语言的语法、语义以及这门语言方方面面的规定,为了完成教学任务,教师往往在授课时先讲语法规则,再举例讲解教材上或事先准备好的简短程序代码,一味“填鸭式”的灌输,而对学生而言,他们不但要在较短时间内记住大量琐碎的知识点,还要能灵活运用知识点,融会贯通,完成教师课堂上演示的例子或课后布置的作业,但因缺少真正的编程调试及实践环节,学生逐渐感觉到学习内容的枯燥乏味,理论与实践不能有机地结合起来,解决实际问题的能力差,学习兴趣在学习过程中随时间而减退或消失,学习效果不好。本文结合笔者的实际教学经验,提出并探索了采用“案例驱动”教学方法来改善课堂教学,并将其应用于实践,与大家共勉。
2 “案例驱动”教学法的探索实践
2.1教学中存在的问题
“C语言程序设计”是一个逻辑性很强的课程,但多数学生在学起来时感到无从下手。主要原因可归结为以下两点:
一方面,目前学校使用的教材中,绝大多数结构都基本相同,即在每一章介绍完概念后,提供一些例题解释相关概念的使用方法,并在章节结束后针对本章中出现的内容提供一些练习题。考试普遍采用单选、判断及简答等方式测试学生对教材内容的掌握程度。从实际效果分析,这只测试了学生对各章节中的基本概念的记忆程度而非理解程度。
另一方面,在考试的压力下,特别是目前的应试考试中,学生更多注意的是教材中的典型例题与老师指定的重点内容,对程序的系统概念没有真正地理解,特别是没有整体程序设计的思想。通过对考试结果的分析,可以发现在考试中涉及的综合编程部分,学生的得分率很低。为了确保学生的课程通过率,教师在考试时尽可能将综合测试部分的比例压低或提供给学生统一的复习提纲,结果使学生在学习时一切围绕任课老师的讲授内容死记硬背,偏离了理论与实践相结合的轨道,无法将所学理论知识运用到实践中解决具体问题,更无法形成良好的编程思想。
2.2 “案例驱动”教学思想的提出
我院属于应用型本科院校,其教育目标着重于培养具有实际工作能力的技术型和应用型人才。“C语言程序设
计”在应用型教学中是必不可少的一门学科,而且往往在新生入学的第1学期开设,以便培养学生的编程思想,为后续课程做铺垫。因此,强调实践性成为“C语言程序设计”教学中尤为重要的问题。为了改变传统的“填鸭式”知识灌输,能够在规定的学时内加强学生的理解能力,同时其培养编程思想,以提高学生的编程能力,结合C语言的特点,反思传统教学方式的弊端,笔者提出“案例驱动”的教学思想。即将所要学习的新知识隐含在一个或几个案例之中,引导学生对案例进行剖析、讨论,明确它大体涉及哪些知识,并找出哪些是旧知识,哪些是新知识,老师指导、帮助学生找出解决问题的方法,最后通过案例的完成而实现学生对所学知识的理解、编程思想的建立和实践动手能力的提高。在选择案例的过程中,应当遵循以下的标准。
第一,所选案例往往具有真实性,一般在日常生活中能典型地反应教学内容。
第二,所选案例难易程度要适中。案例的选择要考虑学生的知识背景,过于复杂的案例,将导致学生学习兴趣下降。难易适中的案例才有利于学生学习的深入进行,提高其学习积极性和主动性。
第三,案例要能覆盖多个知识点,以便提高学生综合运用知识的能力,达到整合知识的目的。
2.3 “案例驱动”教学法的课堂组织实施
2.3.1学时调整及案例引入
为了体现精讲多练的原则并适时引入案例,我们首先对整个教学过程的学时作了重新编排:将原来的96学时调整为112学时,增加实践学时的比例,整个教学过程分两学期完成。
新生入学后第1学期的后8周完成前48学时内容的讲授,主要包括C语言基础语法知识(变量、常量)、简单的输入输出函数(scanf和printf)、三大结构、函数,并将这些知识点融汇于一个案例――计算器案例中。通过案例的分析及教师的指导,学生在实践的过程中能快速理解C语言的基本概念并初步建立编程思想。
第2学期共16周的时间完成后64学时内容的讲授,包括数组、指针、结构体、链表等,并将这些知识点整合于一个具体典型的案例――学生成绩管理系统中。这一阶段的学习实践,让学生分别用数组、结构体、链表三种数据结构去实现任务目标,学生对C语言有更深一步的认识,进一步提高了编程技能。
引入案例后,能够打破以往按照章节顺序授课的基本模式,教师可以按照不同的技能层次分学期讲授课程。这样使学生在不同的技能培养阶段,循序渐进地、稳步地提高实践能力,从而达到培养应用型人才的目的。
2.3.2案例分析
“案例分析”旨在通过教师课堂演示案例系统让学生分析案例,提出解决问题的途径和方法。对于同一个案例,不同的学生会提出不同的分析结果和实现方法。案例分析体现了一种以“应用为目的、从实例出发”的教学思路,能充分调动学生自主获取知识的学习愿望,它也体现了一种以学生为本的教学思想。
理论课部分我们主要采用了“案例分析”教学法,以教师为主体,通过教师对案例的演示讲解,说明课堂内容,使案例与课程的基本理论融为一体,构成一个完整的课程内容体系。以数组这一章为例,在讲解数组之前,给学生演示用数组实现的案例――学生成绩管理系统1.0,在正确输入用户口令后,首先,进入系统的主菜单界面,如图1所示。通过主菜单,可以分别实现学生成绩的输入、输出、查询、排序等主要功能。演示的过程中不断向学生提出问题,在学生思考的同时引出知识点。其次,借助于PPT详细讲解每一个新知识点的主要语法及功能,并用每一个小程序代码具体说明讲解,让学生在小程序例子中理解消化新知识。再次,根据学生的理解程度,将案例中的每一个功能模块单独选出来让学生分析,给出实现功能模块的主要思路。最后,回到PPT中,将整个案例中所用到的知识点分模块地进行汇总,例如,在进入系统时输入用户口令,需要用到字符数组及其相关函数。这样,每一个功能模块对应一个知识点,可使学生更好地理解其中的理论知识,也为后续的实践部分打下良好的基础。
2.3.3案例实现
“案例实现”是“案例驱动”教学中的最后一步,也是极为重要的一步。通过学生亲自编程来实现“案例分析”中提出的案例,真正地将知识点融入到实践中,实现理论与实践的有机结合。这一步的实现通常放在实践课上完成,我们在理论课的知识点讲解及“案例分析”结束后,紧接着安排实践课。根据案例涵盖知识点的多少及难易程度,合理安排实践课的学时,每一学时实践课实现一至两个功能模块。
在整个案例的实现过程中,对于比较简单的功能模块,教师根据学生对知识点的掌握情况,实时地找不同的学生到教师机上进行简短的编程,或利用他的思路,让其他学生一起编码或思考。这样,教师一边引导教师机前的学生完成编程任务,一边在教室中监督其他学生动手实践并灵活答疑。对于比较难的功能模块,教师先将函数实现的流程图给学生,然后具体讲解并按照实际编程步骤,举例带领学生一起做同步训练。这样,教师能够在把握重点的同时控制进度,让学生保持连贯而清晰的学习思路。为了达到更好的效果,我们往往在实践中将学生搭配分组,每组5~6名学生,民主选取一个编程能力比较强的同学为小组长,在老师讲解流程后,由小组长按照组员实际掌握的程度协调其成员完成整个案例,并向教师反映小组成员的完成情况,及时进行评分记录。实践课结束提交所有的案例代码及实验报告。教师根据小组长对组员的反映情况及每位同学代码的完成程度给予适当的分数,与最后的期末考试成绩按照一定的比例进行折算,最终得出既可以体现学生对理论知识的掌握情况,又可体现学生动手编程能力的期末综合成绩。
3“案例驱动”教学法实施效果分析
按照以上的实施步骤,“案例驱动”教学法取得了良好的教学效果,学生获取理论知识的能力得到了提高,实践技能也普遍增强。以采取“案例驱动”教学方式后的近两学期的期末考核情况为例,其成绩分布如图2所示。
4结束语
当今信息社会计算机的应用非常广泛,各行各业需要不同层次的计算机专业人才。在进行计算机教育中,应依据培养目标提出不同的教学要求。对于每一个学习计算机知识特别是“C语言程序设计”的学生,都有一个由浅入深、逐步提高的过程。教师在这个过程中必须激发学生的兴趣,更新教学理念,充分利用、整合各种教学资源,注重教学方法的探索,真正使“C语言”这门课程成为学生学习其他计算机知识的基石。本文针对当前应用型本科院校的教学特点,从教学实践出发,阐述了“案例驱动”教学法的应用,供大家探讨,实践证明,教学效果显著。同时,我们还会在今后的教学过程中不断改进,以求不断进步。
参考文献:
[1] 张仿,卢继勇.“启发式”教学方法与C语言教学[J]. 重庆邮电学院学报:社会科学版,2004(S1):50-60.
[2] 高秀娥. C语言教学方法探讨[J]. 中国教育学杂志:高等教育版,2006(12):146.
[3] 张建珍. C语言教学方法探究[J]. 计算机教育,2007(9):12-13.
[4] 郭芹. 对高职高专计算机专业程序设计教学的思考[J]. 中国科技信息,2008(1).
[5] 陈龙猛,王保桂,李吉忠,等. 大案例教学法在Visual Basic程序设计教学中的探究[J]. 计算机教育,2008(5):59-62.
Research and Practice on the “Case-Driven” in C Programming Language Course
Chang Mei1, Li Ying-qiu1, Li Yong2
(1.Neusoft Institute of Information, Dalian 116023, China; 2.Binzhou University,Binzhou 256600, China)
篇10
关键词:C#;案例;驱动;实践;项目
中图分类号:F49
文献标识码:A
文章编号:1672-3198(2013)24-0162-01
0 引言
案例驱动教学法是通过分析案例程序引导学生学习,以任务驱动调动学生学习主动性的教学方法。“C#程序设计”是计算机信息管理专业、软件技术、计算机应用等相关专业的一门专业必修课,具有极强的实践性和很强的工程性。在此课程的教学改革实践中,笔者采取了以项目为导向的教学模式,突出了对学生实践动手能力及综合素质的培养,为最终实现学生的零距离上岗奠定了基础,取得了良好的教学效果。
1 教学内容设计
笔者根据多年的教学经验,本着“实用为主,深入浅出”的思想,将教学内容进行整合,使学生在边做边练的过程中,轻松掌握所学知识点。教学案例的选择既要有一定的代表性和实用性,又要有趣味性。这样才能吸引学生。案例规模大小要适中,要尽可能多地涵盖主要知识点,还要求必须在规定学时内完成。现将教学中的案例举例如下:
典型案例一:四则运算训练器。在讲运算符这个知识点时,笔者设计了一个四则运算训练器,通过这个案例,学生学会了“加、减、乘、除”的使用方法,还学会了单选按钮、复选按钮等控件的使用。该案例效果如图1所示。
典型案例二:交通灯。在讲计时器和图片框控件的时候,笔者设计了一个十字路通灯的案例。这个案例一经展示出来之后,学生就非常感兴趣,觉得自己学的知识真的是学有所用了。
典型案例三:购物车。在这个淘宝网上购物盛行的时代,设计一个购物车,再实用不过了。学生对这个案例兴趣十足,教学效果非常好。
典型案例四:射击小鸟游戏。设计一个小游戏案例,寓教于乐。让学生也变成一个软件开发者,增长学生信心,调动学习积极性。
以上是笔者在教学过程中的案例,在设计案例的时候,并不一定按照教材上知识点的先后顺序,而是打破章节,根据需要综合相应知识点,使得知识点融合在案例中。让学生在做的过程中,不知不觉就把相应知识点掌握了,从而起到事半功倍的效果。
2 教学方法设计
2.1 “实践导向型”的案例教学
这种案例教学的目的是将所学知识与应用结合起来,注重学生技能培养,培养学生主动探求知识的学习习惯。该种方法的实施过程如下:教师将问题进行描述,展示案例运行效果,接下来进行案例功能分解,对该案例涉及的知识点进行教学,讲解功能实现代码,最后分析总结。通过这种教学方法,使得学生在学习过程中注意力集中,学习积极性大大提高,获取知识比较快。
2.2 “实践导向型”的讨论/辩论式教学
这种方法的教学目的是提高学习主动性,通过交流更快地学习技能,提高学生团队协作精神。实施过程如下:首先是教师发掘主题,接下来分组发动,展开讨论现场展示,最后学生总结,教师进行点评。通过这种教学方法,使得学生广泛参与学习,学生学习主动性强。
2.3 “实践导向型”的项目教学(角色扮演)
在教学过程中模拟企业环境,培养学生岗位技能。该种方法的实施过程如下:首先是教师进行角色扮演,模拟客户代表,提出项目需求,再模拟项目经理,进行需求分析,总体设计;接下来学生根据需求分析,进行项目分组,进行模块设计,包括代码编写,项目测试与调试等环节,最后学生进行项目展示,教师进行项目验收与评价。通过这种教学方法,使得学生能够更好的熟悉岗位要求,掌握岗位技能。学生在这个学习的过程中,了解了做项目的整个流程,从而可以举一反三,对以后的毕业设计和工作中都有很大的帮助。
3 教学效果分析
从传统的教学方式来看,教师在课堂上按照书本上的顺序讲解知识点,理论知识都讲完之后,学生上机实践。教师在讲理论知识的时候,学生根本就不知道老师在讲什么,也不知道学了这些知识之后能有什么用,所以学生很茫然,这样就很容易产生厌学情绪,上课就会睡觉,或者开小差。从而导致学生对理论知识的理解模糊,开发项目的技能掌握也不够熟练。严重缺乏学习的主动性,大部分学生的学习是被动的,是被家长和老师逼着才会去学习。当教师讲授完知识后,学生只能死板的接受老师讲的知识点,并不会举一反三,也不会把知识灵活的应用到实际生活中。导致学生对专业知识学习积极性越来越差。自从实施了案例驱动的教学方法之后,上课效果明显好转,以前不爱学习的学生也开始认真的做练习了,很多学生还很会创新,在老师提出的案例实现要求的基础上,还会将功能做得更加完善。以前是老师逼着学生学,现在是学生自己主动要求学,学生会希望老师快点讲,多讲些知识,这样他们就可以做出更好的作品了。完全由原来的“要我学”转变为“我要学”的模式了。整个课堂涌现出一种积极向上的学习氛围。尤其是每当学生案例做成功之后,那种难以掩饰的成就感。
4 结束语
案例驱动的教学模式自从2009年在我校计算机信息管理专业中开始探索实施,在实施过程中不断验证修改,如今已经形成了一套较为完善的教学体系。近几年的实践证明,这种教学模式还是行之有效的,学生学习的积极性、主动性有了大幅度的提高,学生的参与热情、课程设计质量、竞赛成绩、毕业生毕业设计质量都有很大的进步,达到了培养学生自学能力、实践动手能力、创新意识和团队协作的能力目标。因此,此教学方法对高职院校的计算机相关专业具有一定的参考价值。
参考文献
[1]马丽,赵伟艇.行动导向教学法在高职C}}程序设计中的应用[J].计算机教育,2010,(3).
[3]席平,杨洋,王春洁.机械粪课程实验教学改革与实践[J].实验技术与管理,2010,27(7):14-18.