驅(qū)動程序設(shè)計范文

時間:2023-04-08 16:29:44

導語:如何才能寫好一篇驅(qū)動程序設(shè)計,這就需要搜集整理更多的資料和文獻,歡迎閱讀由公務(wù)員之家整理的十篇范文,供你借鑒。

篇1

關(guān)鍵詞:wince 驅(qū)動程序;開發(fā);設(shè)計

1 引言

WINCE和Windows 98或Windows 2000不同,它可以工作在12種不同的處理器體系結(jié)構(gòu)、180余種CPU上;同時,WINCE是一個實時操作系統(tǒng)(實時系統(tǒng)的意義就是輸入的指令不必進入隊列就可以馬上處理,過去我們使用的DDS就是實時系統(tǒng)),可以滿足應(yīng)用程序所需要的實時性要求。

Windows CE的模塊化設(shè)計使得它能夠在大量的平臺上定制使用,從客戶電子設(shè)備到專用的工業(yè)控制器。由于它是模塊化的,因而我們可以使用滿足平臺系統(tǒng)需求的最小軟件模塊和組件集合來設(shè)計嵌入式系統(tǒng)平臺,從而使內(nèi)存用量最小,但最大可能地提高操作系統(tǒng)的性能。因此外圍擴展設(shè)備就必須要有硬件驅(qū)動才能正常工作。

和其它的操作系統(tǒng)一樣,Windows CE也提供設(shè)備驅(qū)動軟件,這些軟件的目的是驅(qū)動內(nèi)部和外圍的硬件設(shè)備,或為它們提供接口。設(shè)備驅(qū)動程序?qū)⒉僮飨到y(tǒng)和設(shè)備鏈接起來,使得操作系統(tǒng)能夠識別設(shè)備或者為應(yīng)用程序提供設(shè)備服務(wù)。

Windows CE支持廣泛的基于各種CE平臺的設(shè)備驅(qū)動程序。也提供一些用于驅(qū)動程序開發(fā)的模型(model) ,其中包括來自其它操作系統(tǒng)的驅(qū)動程序模型(model),因為這些豐富多變的驅(qū)動程序模型, Windows CE適應(yīng)大部分的內(nèi)部和外圍設(shè)備口Microsoft Windows CE設(shè)備驅(qū)動程序工具包配備了文檔資料,這些文檔資料使得你能夠為Windows CE創(chuàng)建設(shè)備驅(qū)動程序。目前,Windows CE提供了四種設(shè)備模型,其中兩種是專用于Windows CE的模型,另外兩種外部模型來自其它操作系統(tǒng)。

2 驅(qū)動程序開發(fā)簡介

2.1 開發(fā)工具

Windows CE驅(qū)動可以使用Platform Builder或者Visual Studio開發(fā),但是開發(fā)人員一般都使用Platform Builder開發(fā)設(shè)備驅(qū)動程序,對于部分驅(qū)動也會使用Visual Studio開發(fā),應(yīng)用程序開發(fā)人員更多的使用Visual Studio開發(fā)驅(qū)驅(qū)動程序。作為BSP(Board Support Package)的一部分進行整體編譯開發(fā)。

2.2 驅(qū)動分類

2.2.1 按加載方式和接口類型分類

1) 本機驅(qū)動程序(Built-In Drivers)

通常由GWES加載,驅(qū)動接口一般都是定制的(Custom Purpose)。

2) 流驅(qū)動程序(Stream Drivers)

通常由Device Manager加載,驅(qū)動接口是標準的流式接口。

3) 混和型驅(qū)動程序

同時有定制式和流驅(qū)動兩套驅(qū)動接口,但是和系統(tǒng)交互只使用流式驅(qū)動接口,比如PC卡槽驅(qū)動。

2.2.2 按驅(qū)動層次分類

1) 層次型驅(qū)動程序(Layered Driver)

> MDD(Model Device Driver),與硬件無關(guān),面向上層應(yīng)用程序,一般由微軟建立統(tǒng)一框架;

> PDD(Platform Dependent Driver),針對具體硬件平臺的操作代碼,一般由驅(qū)動開發(fā)商實現(xiàn)MDD和PDD之間通過標準的設(shè)備驅(qū)動服務(wù)供應(yīng)商接口DDSI連接。

2) 獨立型驅(qū)動程序(Monolithic Driver)

> 獨立驅(qū)動程序包含了MDD面向上層應(yīng)用和PDD面向硬件平臺兩方面的代碼;

> 適用于操作不復雜的驅(qū)動;

> 減少了MDD和PDD傳遞之間傳遞信息的開銷,實時性更強;

3 流驅(qū)動程序的實現(xiàn)

    流驅(qū)動程序必須實現(xiàn)一套標準接口,流驅(qū)動程序適用于IO操作,這也是嵌入式系統(tǒng)中最常見的設(shè)備驅(qū)動,操作接口和文件系統(tǒng)操作相似,通過CreateFile,ReadFile,WriteFile,IOControl函數(shù)等來操作應(yīng)用程序和流驅(qū)動交互,可以把設(shè)備當作文件操作。

3.1 文件前綴名確定

    根據(jù)文件前綴名在系統(tǒng)中必須唯一這一特點,在定義文件前綴名必須是三個字母,若有多個同類設(shè)備,由后綴一個阿拉伯數(shù)字區(qū)分,例如COM1,LPT3等等。文件前綴名將會在驅(qū)動的標準接口函數(shù)中體現(xiàn),比如XXX_Init,XXX_Close等。

3.2 通用函數(shù)

    根據(jù)設(shè)備的不同,所需函數(shù)不同,通用函數(shù)如下所示:

1) XXX_Init:通知設(shè)備管理器為設(shè)備初始化分配資源;

2) XXX_Deinit:通知設(shè)備管理器回收設(shè)備初始化時分配的資源;

3) XXX_Open:打開設(shè)備。應(yīng)用程序調(diào)用CreateFile時,通過文件系統(tǒng)映射為XXX_Open;

4) XXX_Close:關(guān)閉設(shè)備。應(yīng)用程序調(diào)用CloseFile時,通過文件系統(tǒng)映射為XXX_Close;

5) XXX_PowerUp:設(shè)備上電時,操作系統(tǒng)調(diào)用該函數(shù)完成必要的上電操作;

6) XXX_PowerDown:設(shè)備掉電時,操作系統(tǒng)調(diào)用該函數(shù)完成必要的關(guān)機操作

7) XXX_Read:從打開的設(shè)備文件中讀取數(shù)據(jù),可以通過ReadFile映射;

8) XXX_Write:向打開的設(shè)備文件寫數(shù)據(jù),可以通過WriteFile映射;

9) XXX_Seek:文件定位,根據(jù)設(shè)備情況決定是否支持;

10) XXX_IOControl:IO操作擴展,可以根據(jù)設(shè)備情況來決定支持何種特殊的操作模式。

3.3 DEF文件建立

    流驅(qū)動一般以DLL形式存在,DEF文件定義了DLL需要導出的接口集,因此DEF文件的名稱與設(shè)備驅(qū)動名稱相同。

3.4 寫注冊表

    在wince中任何設(shè)備的識別都是通過注冊表來實現(xiàn)的,因此必須在注冊表中添加具體的設(shè)備驅(qū)動項,以便系統(tǒng)識別。具體方法如下:

在注冊表中增加驅(qū)動程序入口點,找到注冊表項,注冊項位于注冊表的Root Key下,一般為[HKEY_LOCAL_MACHINEDriversBuiltInSampleDrv],建立必要的子鍵和鍵值,“Prefix”和“DLL”是兩個重要,而且是必須的鍵,分別描述了設(shè)備前綴名和驅(qū)動程序的動態(tài)連接庫名,然后根據(jù)具體設(shè)備的需要建立驅(qū)動程序需要的其子他鍵。

4 調(diào)試驅(qū)動程序

驅(qū)動程序編寫完畢后,就應(yīng)該進行硬件的調(diào)試。具體方法如下:

4.1 調(diào)試區(qū)信息(Debug Zone)

調(diào)試區(qū)一般和WinCE的控制臺調(diào)試工具Cesh.exe配合調(diào)試,在不打斷OS運行情況下,進行驅(qū)動的實時調(diào)試,利用宏開關(guān),可以選擇需要輸出的調(diào)試區(qū)信息,可以得到進程,線程和調(diào)試狀態(tài)信息。并且可以利用IDE環(huán)境,動態(tài)選擇開關(guān)調(diào)試區(qū)信息,但是打印驅(qū)動程序輸出調(diào)試信。必須借助于至少一種外設(shè)顯示調(diào)試信息,比如串口或者網(wǎng)卡或者其他通過調(diào)用RETAILMSG或者DEBUGMSG完成,不影響OS的運行,保證驅(qū)動程序運行的真實性,動態(tài)輸出設(shè)備的狀態(tài)信息,調(diào)試相對簡單,也是最廣泛使用的一種調(diào)試方法。

4.2 核心調(diào)試工具(Kernel Debugger)

核心調(diào)試工具將會禁止所有硬件中斷,掛起操作系統(tǒng),因此可以單步調(diào)試OS或者核心代碼,可以訪問堆棧信息,但是必須在Platform的環(huán)境下,利用至少一種外設(shè)進行通信。

4.3 硬件輔助調(diào)試方法

利用硬件調(diào)試工具可以觀察物理設(shè)備的真實狀態(tài),一般常用的方法可以利用JTAG工具實時查看CPU內(nèi)部寄存器,利用邏輯分析儀或者示波器實時查看物理外設(shè)的輸入輸出狀態(tài)。利用指示LED來顯示驅(qū)動程序?qū)崟r狀態(tài)信息。

4.4 Visual Studio調(diào)試

可以利用VS內(nèi)置的調(diào)試工具進行單步跟蹤,狀態(tài)調(diào)試等。

5 測試驅(qū)動程序

驅(qū)動程序經(jīng)過調(diào)試以后就需要對驅(qū)動的功能進行測試。其常用的方法如下:

1) 寫一個應(yīng)用程序來測試驅(qū)動程序的正確性

2) 模擬各種可能發(fā)生的硬件輸入狀態(tài)來測試驅(qū)動程序的正確性

3) 利用Windows CE自帶的測試工具CETK來測試驅(qū)動程序的性能和完備性

6 驅(qū)動程序的集合和

6.1 驅(qū)動程序集成

驅(qū)動程序經(jīng)過調(diào)試和測試確定其正確性后,就可以對驅(qū)動程序進行集成了。具體過程如下:

1) 在BSP的Driver目錄下建立新的驅(qū)動文件夾MyDrv

2) 實現(xiàn)MyDrv驅(qū)動以及相關(guān)的DEF文件

3) 如果需要用到硬件中斷資源,修改原BSP中的相關(guān)中斷處理函數(shù)OEMInterruptEnable,OEMInterruptDisable,OEMInterruptDone,OEMInterruptHandler

4) 在Platform.reg中,增加驅(qū)動程序相關(guān)項

5) 在Platform.bib中,增加驅(qū)動程序的相關(guān)注冊表項MyDrv.Dll$(_FLATRELEASEDIR)MyDrv.dll NK SH

6.2 驅(qū)動程序

驅(qū)動程序進過集成以后就可以使用了,具體的過程如下所示:

1) 利用CAB Wizard生成.cab驅(qū)動包

2) 直接提供驅(qū)動程序文件夾以及相關(guān)注冊表項和修改說明

7 總結(jié)

本為詳細的介紹了,wince下驅(qū)動開發(fā)的流程,介紹了驅(qū)動程序開發(fā)到的詳細過程,并詳細說明了各個部分的實現(xiàn)和操作方法,使是初學者對wince下驅(qū)動程序的開發(fā)流程和一般的開發(fā)工具有了初步的了解。

篇2

關(guān)鍵詞:嵌入式操作系統(tǒng);Win CE;SPI;驅(qū)動程序

中圖分類號: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 引 言

嵌入式是“以應(yīng)用為中心,以計算機技術(shù)為基礎(chǔ),軟硬件可裁剪,適合應(yīng)用系統(tǒng)對功能、可靠性、成本、體積、功耗嚴格要求的計算機系統(tǒng)”。Windows 是Microsoft推出的功能強大的緊湊、高效、可伸縮的32位嵌入式操作系統(tǒng),主要面對各種各樣嵌入式系統(tǒng)的產(chǎn)品[1,2]。

該系統(tǒng)具有多線程、多任務(wù)、完全搶占式的特點,是為各種具有嚴格資源限制的硬件系統(tǒng)所設(shè)計的。為了將操作系統(tǒng)和硬件設(shè)備連接起來,硬件和軟件的驅(qū)動聯(lián)系就顯得很重要。SPI是一種高速、全雙工、同步的通信總線,在芯片的管腳上只占用4根線,節(jié)約了芯片的管腳,同時為PCB的布局節(jié)省了空間,提供了方便,正是出于這種簡單易用的特性,現(xiàn)在越來越多的芯片都集成了這種通信協(xié)議。SPI的工作模式有兩種:主模式和從模式,SPI總線可以配置成單主單從、單主多從、互為主從。為了充分利用芯片的SPI接口進行相應(yīng)的驅(qū)動程序設(shè)計以及應(yīng)用程序設(shè)計,通用方法的研究就顯得十分重要。

1 Win CE提供的驅(qū)動模型

Win CE操作系統(tǒng)支持兩種類型的驅(qū)動程序,一種為本地驅(qū)動程序,是把設(shè)備驅(qū)動程序作為獨立的任務(wù)實現(xiàn)的,直接在頂層任務(wù)中實現(xiàn)硬件操作,因此有明確和專一的目的。本地驅(qū)動程序適合于那些集成到Win CE平臺的設(shè)備,諸如鍵盤、觸摸屏等設(shè)備。另一種是具有定制接口的流接口驅(qū)動程序,它是一般類型的設(shè)備驅(qū)動程序,為用戶一級的動態(tài)鏈接庫(DLL)文件,用來實現(xiàn)一組固定的函數(shù)稱為“流接口函數(shù)”,這些流接口函數(shù)使得應(yīng)用程序可以通過文件系統(tǒng)訪問這些驅(qū)動程序。這里論述的SPI驅(qū)動就屬于流接口驅(qū)動。

2 SPI驅(qū)動程序的設(shè)計

2.1 EP9315芯片及SPI接口簡介

EP9315是一款基于ARM920T,由Cirrus Logic公司生產(chǎn)的工業(yè)級芯片[3,4] ,內(nèi)帶MMU,16 KB的指令Cache,16 KB的數(shù)據(jù)Cache和數(shù)學協(xié)處理器,主頻為200 MHz,系統(tǒng)總線為100 MHz。該芯片擁有一組SPI接口,利用它可方便實現(xiàn)與SPI器件進行通信,可大大簡化工程應(yīng)用的硬件設(shè)計軟件。

SPI驅(qū)動程序采用Win CE流驅(qū)動的標準形式。下面從驅(qū)動程序具體設(shè)計步驟以及驅(qū)動代碼的編寫兩個方面做較為詳細的闡述。

2.2 SPI驅(qū)動程序設(shè)計步驟

在Platform Builder 4.2下設(shè)計Win CE流接口驅(qū)動程序可按照以下步驟進行[5-7]:

(1) 在C:\\Win CE420\\PLATFORM\\ep931x\\drivers目錄下新建一個目錄SPI;

(2) 從其他驅(qū)動目錄下復制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內(nèi)核映射時自動將SPI.dll加入到內(nèi)核映像中,添加內(nèi)容如下:

SPI.dll MYM(_FLATRELEASEDIR)\ SPI.dll NK SH

(6)具體的流接口驅(qū)動程序跟注冊表密不可分,在Platform Builder 4.2中打開platform.reg文件,在該文件最后加入如下所示注冊表信息,以使在生成操作系統(tǒng)映像時,Platform Builder將注冊表信息加入到注冊表中。在Platform.reg中添加內(nèi)容如下:

[HKEY_LOCAL_MACHINE\\Drivers\\BuiltIn\\SPI]

"Prefix"=" SPI "

"Dll"=" SPI.dll"

"FriendlyName"=" SPI Driver"

"Index"=dword:1

"Order"=dword:0

篇3

關(guān)鍵詞:VxWorks操作系統(tǒng);串口驅(qū)動程序;共享中斷

中圖分類號: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操作系統(tǒng)是美國Wind River公司開發(fā)的一種嵌入式實時操作系統(tǒng),由于其高可靠性、強實時性以及可裁減性,廣泛應(yīng)用于航空航天、軍事、民用通信和工業(yè)控制等領(lǐng)域。

在某大型控制系統(tǒng)中,我們需要開發(fā)一個具有4路串口通訊、1路CAN通訊以及2路以太網(wǎng)通訊的多種通訊方式并存的通訊設(shè)備??紤]到通訊能力以及通訊的實時性要求,CPU選用盛博公司PC104+總線的Pentium III處理器,串口選用具有PC104總線接口的4路串口擴展板,采用VxWorks操作系統(tǒng)來實現(xiàn)以上需求。由于每種通訊方式都采用中斷方式觸發(fā),而系統(tǒng)硬件提供的中斷源是有限的,針對這種情況,為了節(jié)省系統(tǒng)的中斷資源,本文設(shè)計了一個基于VxWorks的多串口共享中斷的驅(qū)動程序,并對該驅(qū)動程序的功能進行了長時間測試驗證。

1 串行設(shè)備驅(qū)動的結(jié)構(gòu)

在VxWorks操作系統(tǒng)中,串行設(shè)備作為一種特殊的字符型設(shè)備,操作系統(tǒng)為其提供一個簡單、統(tǒng)一、獨立于設(shè)備的接口,在應(yīng)用層對于串行設(shè)備的任何操作都可以視為對一個文件的操作,而具體的實現(xiàn)是通過串行設(shè)備的驅(qū)動程序來完成。

在VxWorks中串行設(shè)備驅(qū)動采用3層抽象的軟件結(jié)構(gòu),即I/O系統(tǒng)、虛擬設(shè)備ttyLib或tyLib以及硬件驅(qū)動,其結(jié)構(gòu)示意圖如圖1所示。在VxWorks中,I/O系統(tǒng)并不直接與具體的硬件驅(qū)動進行交互,而是將驅(qū)動程序中與硬件無關(guān)的部分放在虛擬設(shè)備ttyLib中實現(xiàn),再利用虛擬設(shè)備ttyLib與I/O系統(tǒng)進行通訊,使得I/O系統(tǒng)獨立于具體的硬件驅(qū)動,而驅(qū)動程序的開發(fā)者只需要實現(xiàn)系統(tǒng)所提供的接口并且將其掛載到虛擬設(shè)備ttyLib就能完成具體串行設(shè)備驅(qū)動的設(shè)計,從而保證驅(qū)動代碼的可復用性和接口的統(tǒng)一性。

2 串行設(shè)備驅(qū)動的實現(xiàn)

VxWorks在啟動過程中對串行設(shè)備驅(qū)動的實現(xiàn)主要包括兩部分:串口的初始化和串行設(shè)備的創(chuàng)建。串口的初始化主要包括初始化串口設(shè)備,分配串口所需的資源以及完成串口中斷程序的系統(tǒng)掛接;串行設(shè)備的創(chuàng)建包括tty驅(qū)動的初始化和對tty設(shè)備的創(chuàng)建,即建立起I/O系統(tǒng)與硬件驅(qū)動層的聯(lián)系。

2.1 串口的初始化

sysInit()作為VxWorks操作系統(tǒng)啟動的入口程序會調(diào)用第一個C程序函數(shù)usrInit(),完成用戶定義系統(tǒng)的初始化工作,而串口的硬件初始化是在usrInit()函數(shù)的子函數(shù)sysHwInit()中完成。對于VxWorks現(xiàn)有的Intel8250驅(qū)動(Tornado目錄/target/src/drv/sio/i8250Sio.c),sysHwInit()還會調(diào)用sysSerial.c文件下的sysSerialHwInit(),sysSerialHwInit()函數(shù)主要對串行設(shè)備的設(shè)備描述符進行初始化,在初始化過程中還會調(diào)用底層的i8250HrdInit()對串行設(shè)備的端口進行初始化。在完成系統(tǒng)硬件和VxWorks內(nèi)核的初始化以后,系統(tǒng)會啟動一個函數(shù)名為usrRoot()的任務(wù),usrRoot()作為VxWorks操作系統(tǒng)的根任務(wù)調(diào)用sysClkConnect()對系統(tǒng)時鐘中斷進行配置,而具體的工作是由sysClkConnect()的子函數(shù)sysHwInit2()完成,其中sysHwInit2()會調(diào)用sysSerialHwInit2()來完成串行設(shè)備的中斷掛接。

2.2 串行設(shè)備的創(chuàng)建

在usrRoot()中通過調(diào)用ttyDrv()完成tty驅(qū)動的初始化,而ttyDrv()則調(diào)用iosDrvInstall()將tty驅(qū)動添加到系統(tǒng)的驅(qū)動程序列表中,并且完成與I/O系統(tǒng)層的各系統(tǒng)操作函數(shù)的連接。tty虛擬設(shè)備層與底層硬件驅(qū)動的連接則是通過ttyDevCreate()來完成,并實現(xiàn)各個串行設(shè)備的創(chuàng)建。

3 多串口共享中斷的驅(qū)動程序開發(fā)

串口擴展板選用的是盛博的A3-CSD板卡,采用PC104總線接口,集成了4路16C554兼容的光電隔離異步串行口,每個串行口能獨立控制發(fā)送與接受,且具有16字節(jié)FIFO以減少中斷請求次數(shù),此外該擴展板還具有一個串口中斷狀態(tài)指示寄存器,可以指示產(chǎn)生中斷的串口。根據(jù)上述硬件配置,可以在現(xiàn)有Intel8250驅(qū)動的基礎(chǔ)上進行改進來完成多串口共享中斷的驅(qū)動程序設(shè)計。

3.1 串口設(shè)備的初始化

每個串口設(shè)備都需要有一個的描述自身屬性的結(jié)構(gòu)體I8250_CHAN_EX,即設(shè)備描述符,且結(jié)構(gòu)體的第一個成員必須為指向SIO_DRV_FUNCS結(jié)構(gòu)的指針,該結(jié)構(gòu)體還包含描述16C554芯片各個端口的信息以及提供給高層協(xié)議的回調(diào)函數(shù)。在系統(tǒng)啟動過程中通過調(diào)用sysSerialHwInitEx()完成對該結(jié)構(gòu)體的初始化并且將自定義的全局指針數(shù)組pi8250ChanEx[4]中各元素分別指向4個串口的I8250_CHAN_EX結(jié)構(gòu)體,初始化過程中會調(diào)用i8250HrdInitEx()將串口驅(qū)動程序的設(shè)備操作入口函數(shù)安裝到SIO_DRV_FUNCS結(jié)構(gòu)中,然后調(diào)用sysSerialHwInitEx2()完成串口中斷的系統(tǒng)連接。其中sysSerialHwInitEx2()的實現(xiàn)代碼為:

void sysSerialHwInitEx2 (void)

{

int i;

for (i = 0; i < N_UART_CHANNELS_EX; i++)

if (i8250ChanEx[i].int_vec)

{/*將四個串口設(shè)備的中斷服務(wù)程序i8250ShareIntEx ()連接到同一中斷*/

(void) intConnect (INUM_TO_IVEC (i8250ChanEx[i].int_vec),

i8250ShareIntEx, (int)&i8250ChanEx[i] );

if (sysBp)

sysIntEnablePIC (devParasEx[i].intLevel);/*中斷使能*/

}}

其中,宏N_UART_CHANNELS_EX表示串口設(shè)備的個數(shù),i8250ChanEx結(jié)構(gòu)的成員變量int_vec表示該串口的系統(tǒng)中斷號,這里每個i8250ChanEx結(jié)構(gòu)的int_vec項值都是相同的。

3.2 串口驅(qū)動程序的入口點函數(shù)編寫

編寫串口設(shè)備驅(qū)動程序需要完成串口設(shè)備的入口點函數(shù),這些函數(shù)包括控制命令函數(shù)i8250IoctlEx(),啟動發(fā)送循環(huán)函數(shù)i8250StartupEx(),輪詢方式輸入函數(shù)i8250PRxCharEx(),輪詢方式輸出函數(shù)i8250PTxCharEx(),回調(diào)安裝函數(shù)i8250CallbackInstallEx(),單串口中斷服務(wù)函數(shù)i8250IntEx(),多串口共享中斷服務(wù)函數(shù)i8250ShareIntEx()等函數(shù)。這里只列出多串口共享中斷服務(wù)函數(shù)i8250ShareIntEx(),其余函數(shù)可以參考i8250Sio.c文件的各相應(yīng)函數(shù)。

void i8250ShareIntEx (I8250_CHAN_EX*pChan)

{

FASTintoldlevel;

oldlevel = intLock(); /*關(guān)閉系統(tǒng)中斷*/

IntStatus = sysInByte(UART_INT_STATUS); /*讀串口中斷狀態(tài)指示寄存器* /

while(( IntStatus & 0x0F) != 0x00 )/*判斷是否有串口中斷產(chǎn)生*/

{

if (IntStatus & COM0_ INT _FLAG)

i8250IntEx(pi8250ChanEx[0]);/*串口1產(chǎn)生了中斷*/

……………

if (IntStatus & COM3_ INT _FLAG)

i8250IntEx(pi8250ChanEx[3]);/*串口4產(chǎn)生了中斷*/

}

intUnlock(oldlevel); /*開啟系統(tǒng)中斷*/

}

其中,全局變量pi8250ChanEx為I8250_CHAN_EX結(jié)構(gòu)的指針數(shù)組,分別指向4個串口設(shè)備所對應(yīng)的I8250_CHAN_EX結(jié)構(gòu),宏UART_INT_STATUS表示串口中斷狀態(tài)指示寄存器地址。

在進入i8250ShareIntEx()后首先關(guān)閉系統(tǒng)中斷,通過查詢串口中斷狀態(tài)指示寄存器來判斷產(chǎn)生中斷的串口設(shè)備,然后將產(chǎn)生此中斷的串口描述符結(jié)構(gòu)體,即pi8250ChanEx[4]中對應(yīng)的元素,作為參數(shù)傳遞給單串口中斷服務(wù)函數(shù)i8250IntEx(),最后重新開啟系統(tǒng)中斷。

3.3 以模塊加載串口驅(qū)動程序

在config.h中加入#undef INCLUDE_TTY_DEV,執(zhí)行下面的代碼后生成一個o格式的串口驅(qū)動的庫文件8250SioEx.o,然后在應(yīng)用程序中利用loadModule()將8250SioEx.o動態(tài)加載到內(nèi)存中運行。

sysSerialHwInitEx();/*初始化串口設(shè)備*/

sysSerialHwInitEx2(); /*串口中斷的系統(tǒng)掛接*/

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); /*創(chuàng)建tty設(shè)備*/

}

}

其中sysSerialChanExGet()返回一個描述串口設(shè)備的I8250_CHAN_EX結(jié)構(gòu)體。

4 結(jié)束語

本文詳細分析了串行設(shè)備驅(qū)動程序的結(jié)構(gòu)以及在VxWorks啟動過程中串行設(shè)備驅(qū)動程序的加載過程,設(shè)計了一個多串口共享中斷的驅(qū)動程序,利用該驅(qū)動程序?qū)?個串口同時進行了連續(xù)10小時的數(shù)據(jù)收發(fā)測試,4個串口都能穩(wěn)定地發(fā)送和接收數(shù)據(jù)。此外,在測試過程中發(fā)現(xiàn)在進入多串口共享中斷服務(wù)函數(shù)后需要將系統(tǒng)中斷關(guān)閉,待執(zhí)行完中斷處理后再開啟系統(tǒng)中斷,否則會引起串口工作的不穩(wěn)定。

參考文獻:

[1] 周啟平.VxWorks下設(shè)備驅(qū)動程序及BSP開發(fā)指南[M].北京:中國電力出版社,2004.

[2] 陳智育,溫彥軍,陳琪.VxWorks程序開發(fā)實踐[M].北京:人民郵電出版社,2004.

[3] VxWorks programmer’s guide version 2.0[Z].Wind River System Inc,1999.

[4] TL16C550 asynchronous communications element[Z].1998.

篇4

[關(guān)鍵詞]USB ECP Driver Studio 設(shè)備驅(qū)動程序

[中圖分類號]TP[文獻標識碼]A[文章編號]1007-9416(2010)02-0029-02

1 引言

由于現(xiàn)在大多數(shù)計算機沒有并行口而具有多個USB接口,因此很多并行口設(shè)備無法和計算機直接連接使用。利用基于單片機STC11F32XE的USB 轉(zhuǎn) ECP 模式并行口可以連接其他ECP模式并口設(shè)備,以達到讓具有ECP接口的設(shè)備可以和沒有并口的PC進行數(shù)據(jù)通信的目的。并口采用的是IEEE 1284-A接口, USB 接口驅(qū)動芯片采用Philips 半導體公司的PDIUSBD12,該芯片的數(shù)據(jù)端口D0-D7接單片機的P0 口,引腳WR_N、RD_N、及A0 分別接單片機的P3.6、P3.7、P3.5 引腳。整個硬件電路圖如圖 1 所示。當 USB 設(shè)備硬件設(shè)計完成之后,接著就必須根據(jù)硬件特點和需要完成的功能,設(shè)計出合乎產(chǎn)品的USB驅(qū)動程序,否則,設(shè)備將無法被PC機識別,不能正常使用。

2 WDM型的USB驅(qū)動程序結(jié)構(gòu)

USB設(shè)備的驅(qū)動程序是一種典型的WDM驅(qū)動程序。WDM驅(qū)動程序是分層的。對于USB設(shè)備驅(qū)動程序來說,其驅(qū)動程序包括兩個層次:設(shè)備(功能)驅(qū)動程序?qū)雍涂偩€(底層)驅(qū)動程序?qū)?。USB底層驅(qū)動程序由操作系統(tǒng)提供,不要開發(fā)者自己編寫,它位于USB功能驅(qū)動程序的下面,負責與實際的USB硬件打交道,實現(xiàn)復雜而繁瑣的底層通信;USB功能驅(qū)動程序必須要由開發(fā)者編寫,它不與實際的USB硬件打交道,是把包含URB(USB Request Block,USB 請求塊)的IRP發(fā)送到USB底層驅(qū)動程序,來實現(xiàn)對USB設(shè)備信息的發(fā)送和接收。(圖2) 給出了USB 驅(qū)動程序的結(jié)構(gòu)模型。

3 USB驅(qū)動開發(fā)編程環(huán)境的建立

開發(fā)一個WMD 驅(qū)動程序,必須要搭建合適的開發(fā)環(huán)境以此來減小開發(fā)難度。對于WDM 驅(qū)動的開發(fā),一般必須使用的軟件是VC++6.0和DDk (Driver Development Kit,驅(qū)動程序開發(fā)工具包)。但為了進一步降低開發(fā)難度,選擇使用了第三方驅(qū)動開發(fā)工具--Driver Studio。它以類的方式對DDK 進行封裝,可以十分容易地利用它提供的向?qū)懋a(chǎn)生一個必需的驅(qū)動程序框架。

一般首先安裝VC++6.0,接著安裝DDK,如果需要的話,還可以安裝Windows SDK 來輔助開發(fā),最后安裝Driver Studio 3.2。因為Driver Studio的類庫要使用DDK庫函數(shù),所以在安裝好Driver Studio 之后必須首先要編譯出一個庫文件,否則會提示找不到庫文件vdw_wdm.lib 等錯誤。編譯該庫文件的步驟如下:啟動VC++6.0,找到并打開Driver Studio3.2 安裝目錄下的vdwLibs.dsw工程文件,然后選擇DriverStudio->DDK Build Settings,在彈出的對話框中設(shè)置DDK的安裝路徑和運行的操作系統(tǒng)。然后選擇菜單Build->Batch Build,要根據(jù)驅(qū)動運行的平臺來選擇對應(yīng)的工程文件,這里選擇了x86對應(yīng)的工程,正確選擇之后,單擊Rebuild All 按鈕,開始編譯庫文件。這個類庫只需編譯一次,以后開發(fā)其他的驅(qū)動就不必再次編譯了。

4 USB驅(qū)動創(chuàng)建方法及步驟

該驅(qū)動程序的主要功能包括:端點0采用控制傳輸,可以保證傳輸過程中的數(shù)據(jù)的完整性和正確性,主要負責USB枚舉過程中的數(shù)據(jù)的讀寫。另外,又增加了端點1和端點2。端點1采用中斷傳輸,這種傳輸主要用在數(shù)據(jù)量不大,但對時間要求較嚴格的設(shè)備中。因此,模塊滿足了實時性的特點;端點2采用批量傳輸,該種傳輸通常用在數(shù)據(jù)量大、對數(shù)據(jù)的實時性要求不高的場合中,利用該方式可以完成大量數(shù)據(jù)的快速傳輸,可以與高速的ECP并行口相匹配,因此,模塊滿足了高速數(shù)據(jù)傳輸?shù)囊蟆?/p>

單擊VC菜單欄下的DriverStudio菜單項,選擇Driver Wizard菜單,會出現(xiàn)一個驅(qū)動向?qū)υ捒?。單擊Start a new Driver Project 將創(chuàng)建一個新的驅(qū)動工程。然后按照向?qū)稍擈?qū)動程序的框架。具體步驟如下:①設(shè)置工程名和路徑。在彈出的對話框中,設(shè)置工程名為UsbToECP、路徑為D:\。②選擇驅(qū)動工程的類型。在對話框中選擇 WDM Driver,驅(qū)動框架選擇DriverWorks C++ Framework。③選擇WDM驅(qū)動類型。在彈出的對話框中選擇 WDM Function Driver。④選擇驅(qū)動總線的類型。在對話框中選擇為 USB 總線,然后在分別設(shè)定USB Vendor ID 和USB Product ID。 ⑤設(shè)置USB 的端點資源。單擊Add增加端點。這里增加 4 個端點,Pipe Name 分別是Ep1_In、Ep1_Out、Ep2_In和Ep2_Out。其中Ep1_In和Ep1_Out選擇中斷傳輸,端點地址均為1,傳輸方向分別為輸入和輸出,最大包長為8字節(jié),最大傳輸大小為 4096字節(jié)。Ep2_In和Ep2_Out選擇批量傳輸,端點地址均為2,傳輸方向分別為輸入和輸出,最大包長為64字節(jié),最大傳輸大小為 40960字節(jié)。⑥選擇需要處理請求類型。這里選擇IRP_MJ_DEVICE_CONTROL、IRP_MJ_READ和IRP_MJ_WRITE。它們分別與API函數(shù) DeviceIoControl、ReadFile和WriteFile一一對應(yīng)。⑦設(shè)備I/O操作方式。配置IRP_MJ_READ和IRP_MJ_WRITE的緩沖方式分別為Buffered。另外還需要增加4個IO Control 的控制代碼:EP1_READ、EP1_WRITE、EP2_READ、EP2_WRITE。打開方式選擇Interface。⑧添加注冊表項??梢愿鶕?jù)自己需要增加,這里增加了一個設(shè)備名稱。⑨設(shè)置電源管理。選擇Device requires an inrush of power at startup,說明該設(shè)備啟動時需要大電流,這樣做的目的是防止相同的設(shè)備同時上電,減少對電源的沖擊。步驟10-13按默認配置即可。

5 驅(qū)動的編程

USB驅(qū)動程序的編程最主要的就是編寫端點1和端點2的數(shù)據(jù)處理函數(shù),其中主要編寫的是UsbToECPDevice類成員函數(shù)Read()、Write()、及DeviceControl()中調(diào)用的4 個IoControl()函數(shù)。

Read()函數(shù)對應(yīng)著WIN32 API的ReadFile函數(shù),其參數(shù)通過KIrp I傳遞過來。因為端點1指定的緩沖方式為Buffered 方式,所以調(diào)用KIrp類的成員函數(shù)I.BufferedReadDest()來獲取保存數(shù)據(jù)的緩沖區(qū)地址,調(diào)用I.ReadSize()來獲取讀到的數(shù)據(jù)長度。如果獲取到的緩沖區(qū)地址為NULL,則說明參數(shù)無效,則以USB_STATUS_INVALID_PARAMETER來完成該IRP,然后返回USB_STATUS_INVALID_PARAMETER。若讀取的字節(jié)數(shù)是0,就直接完成該IRP,不需要進行數(shù)據(jù)處理。接著創(chuàng)建一個URB來完成數(shù)據(jù)的處理。因為端點1采用的是中斷傳輸,所以必須創(chuàng)建一個中斷傳輸?shù)?URB并提交它,端點管道KUsbPipe類提供一個創(chuàng)建中斷傳輸URB的函數(shù)BuildInterruptTransfer。這樣底層的USB 總線驅(qū)動程序就會負責從端點 1 讀取數(shù)據(jù),當完成數(shù)據(jù)的讀取后,提交相應(yīng)URB的函數(shù)就會返回。當URB創(chuàng)建成功后,利用KUsbPipe類的成員函數(shù)SubmitUrb()來提交這個URB,否則返回資源不足的錯誤信息。SubmitUrb()函數(shù)返回后,可以用URB的成員變量TransferBufferLength來獲取實際讀到的字節(jié)數(shù),最后刪除創(chuàng)建的URB。

本文為全文原貌 未安裝PDF瀏覽器用戶請先下載安裝 原版全文

Write()函數(shù)的處理方法與Read()函數(shù)的方法非常相似,不同之處在于利用KIrp類I的成員函數(shù) BufferedWriteSource()和WriteSize()來分別獲取緩沖區(qū)的地址和傳輸?shù)淖止?jié)數(shù)。另外,函數(shù)EP1_READ_Handler()和EP1_WRITE_Handler()的實現(xiàn)與Read()和Write()函數(shù)基本是一樣的,略有不同。

端點2 的EP2_READ_Handler(KIrp I)和EP2_WRITE_Handler(KIrp I)與端點 1的EP1_READ_Handler(KIrp I)和EP1_WRITE_Handler(KIrp I)處理方式幾乎是一樣的,主要的不同是在創(chuàng)建URB時要用到創(chuàng)建批量傳輸URB 的函數(shù)BuildBulkTransfer(),其參數(shù)及意義與BuildInterruptTransfer()相同。

6 驅(qū)動的安裝

在對端點1和端點2編程完成之后,然后對其進行編譯,如果沒有錯誤,可以看到編譯報告中有一行“MODULE=.\objfre\i386\UsbToECP.sys”,這個就是所要的驅(qū)動文件,另外,在目錄下還產(chǎn)生一個inf文件,其也是安裝驅(qū)動時需要的一個重要的文件,它里面有一些重要的安裝信息,可以根據(jù)需要進行修改。一般主要是對inf的Stings 進行修改,表1給出了該驅(qū)動的Strings 段的幾個重要屬性的修改。

將該設(shè)備與PC機連接,系統(tǒng)會提示安裝驅(qū)動,首先指定驅(qū)動安裝所要使用的inf文件所在的位置,該inf文件可以在驅(qū)動工程目錄的driver目錄下找到,是由向?qū)ё詣由傻?。然后選擇安裝驅(qū)動所需要的UsbToECP.sys文件,該文件在D:\ UsbToECP\driver\objfre\i386下。正確安裝驅(qū)動之后,打開計算機的設(shè)備管理器,將會看到該USB設(shè)備。如下圖3所示。打開圖3中的Class for BinBinUsb devices下的BinBinUsb Device屬性,選擇相應(yīng)標簽,將會看到如下圖4的驅(qū)動信息。

7 結(jié)語

USB設(shè)備驅(qū)動的開發(fā)是設(shè)備開發(fā)過程中必不可少的一項任務(wù)。通過研究利用VC++、DDK和Driver Studio對USB驅(qū)動程序的設(shè)計方法,成功地設(shè)計了基于單片機的USB轉(zhuǎn)并口設(shè)備的驅(qū)動程序。通過測試,使用該驅(qū)動的USB轉(zhuǎn)并口設(shè)備運行穩(wěn)定,達到了預期的效果。這種USB驅(qū)動的設(shè)計方法簡化了開發(fā)難度,開發(fā)的驅(qū)動穩(wěn)定可靠,必將受到USB設(shè)備開發(fā)者的廣泛關(guān)注,同時也給其他的基于WDM驅(qū)動的開發(fā)提供一個新途徑。

[參考文獻]

[1] 榮佳波,常明志,井科偉,楊少勇.USB 設(shè)備的WDM驅(qū)動程序設(shè)計[J].應(yīng)用科技,2004,31(3);39-41.

篇5

[關(guān)鍵詞]數(shù)字電視機頂盒,驅(qū)動程序開發(fā),軟件架構(gòu),Pipeline

中圖分類號:TN948 文獻標識碼:A 文章編號:1009-914X(2014)24-0098-01

1 背景和意義

在國際社會綜合環(huán)境的影響下和從中國自身發(fā)展的實際情況出發(fā),中國正在逐步改變和調(diào)整經(jīng)濟結(jié)構(gòu)和產(chǎn)業(yè)結(jié)構(gòu),擴大內(nèi)需,大力發(fā)展文化產(chǎn)業(yè)和電子信息產(chǎn)業(yè)。2010年1月13日,總理主持國務(wù)院常務(wù)會議決定加快推進電信網(wǎng)、廣播網(wǎng)、互聯(lián)網(wǎng)三網(wǎng)融合[1],并審議通過了推進三網(wǎng)融合總體方案。2010年至2012年為試點階段,以推進廣電和電信業(yè)務(wù)雙向階段性進入重點,2013年至2015年為推廣階段,國家將全面推進三網(wǎng)融合。

目前機頂盒軟件開發(fā)中遇到的普遍問題是軟件開發(fā)周期長。分析其原因,一部分是由于項目管理問題所致,本文對此因素不作討論;另外一個因素就是隨著機頂盒芯片所提供功能不斷向傳統(tǒng)PC靠攏,帶來的是平臺驅(qū)動軟件和上層應(yīng)用軟件復雜

2 機頂盒軟件開發(fā)傳統(tǒng)架構(gòu)

機頂盒軟件開發(fā)的傳統(tǒng)架構(gòu)主要分為基本型,改進型和中間件?;拘椭饕且孕酒墓δ苣K為單元,對上層軟件提供標準接口。而改進型則在基本型的基礎(chǔ)之上,在驅(qū)動層中集成部分復雜應(yīng)用(如PVR),降低了上層軟件開發(fā)這些應(yīng)用的難度。中間件則是為滿足機頂盒應(yīng)用程序的高度可移植,其對應(yīng)用程序而言徹底屏蔽不同平臺的差異。

2.1 基本型

在最初的標清機頂盒軟件開發(fā)中,由于其所提供的功能簡單,部分客戶會選擇在應(yīng)用程序中直接調(diào)用芯片驅(qū)動程序的開發(fā)模式。

2.2 中間件

數(shù)字電視機頂盒中間件(middleware)[2]是指位于數(shù)字電視機頂盒芯片驅(qū)動程序與應(yīng)用程序之間的軟件部分。中間件標準的應(yīng)用極大地推動數(shù)字電視機頂盒市場的發(fā)展。目前,中間件廠商主要有茁壯、NDS、愛迪德、天柏、同洲等廠商。

2.3 存在問題分析

基于中間件架構(gòu)來進行數(shù)字電視機頂盒軟件開發(fā),是目前市場上比較通用的做法。由于應(yīng)用程序基于中間件之上,因此其可移植。系統(tǒng)集成的主要工作轉(zhuǎn)變?yōu)槿绾我浦仓虚g件到芯片廠商的平臺驅(qū)動之上。在大量的項目實踐中發(fā)現(xiàn)在目前的軟件架構(gòu)下仍然存在如下問題:

(1)系統(tǒng)集成方式:每個客戶都在做著重復類似的工作。以節(jié)目直播為例,每個客戶都要建立一套自己的播放流程,并建立如下設(shè)備的之間的相互關(guān)聯(lián):Tuner,Tsrouter, Demux, ES buffer, Video Decoder, Video Img,Video Output。

(2)中間件可移植性:無法徹底屏蔽驅(qū)動API函數(shù)的改變。由于在客戶的中間件中直接調(diào)用芯片的驅(qū)動API函數(shù),而這些API函數(shù)常常直接與硬件模塊緊密相關(guān)。雖然芯片廠商努力保持底層API函數(shù)不要改變,但是當芯片更新?lián)Q代或升級的時候,這些驅(qū)動API函數(shù)常常不可避免的也隨之改變。于是,導致客戶的中間件也需要做出相應(yīng)的變動,并進行重新驗證。

(3)驅(qū)動調(diào)用時序:無法引導客戶遵循芯片廠商期望的驅(qū)動API函數(shù)調(diào)用時序。中間件的基本操作通常難以一一對應(yīng)的映射到芯片的驅(qū)動程序上,在大多數(shù)情況下,中間件定義的一個基本操作需要調(diào)用底層驅(qū)動的若干api函數(shù)才能完成。最重要的是,在這些底層api函數(shù)執(zhí)行的時候,常常是有時序的要求。對于芯片廠商提供的驅(qū)動程序而言,原則上不應(yīng)該對驅(qū)動API函數(shù)調(diào)用時序做任何的假設(shè)。

3 pipeline技術(shù)分析

隨著畫中畫,時移等新應(yīng)用的不斷出現(xiàn),通過直接調(diào)用芯片驅(qū)動程序的方式來移植機頂盒中間件的方式,正變得越來越復雜。迫切需要在芯片驅(qū)動程序之上,能存在一個高度抽象層,徹底屏蔽不同平臺的底層差異,簡化機頂盒資源的管理,降低設(shè)備廠商中間件集成的難度,減少在系統(tǒng)集成中遇到的問題,縮短機頂盒軟件開發(fā)周期。

關(guān)于pipeline技術(shù),本文將分硬件設(shè)計中的Pipeline技術(shù)[3][4]和軟件設(shè)計中的Pipeline模式[5]進行描述。

3.1 硬件設(shè)計中的Pipeline技術(shù)

流水線(Pipeline)技術(shù)是目前廣泛應(yīng)用于微處理芯片(CPU)中的一項關(guān)鍵技術(shù)。流水線設(shè)計就是將組合邏輯系統(tǒng)地分割,并在各個部分(分級)之間插入寄存器,并暫存中間數(shù)據(jù)的方法。目的是將一個大操作分解成若干的小操作,每一步小操作的時間較小,所以能提高頻率,各小操作能并行執(zhí)行,所以能提高數(shù)據(jù)吞吐率(提高處理速度)。

3.2 軟件設(shè)計中的Pipeline模式

Pipeline設(shè)計模式的理念是使多個對象處理同一個請求,這些對象形成一條鏈。每個對象擁有下一個對象的引用,該對象可以進行預處理,交給下一個對象處理,然后把處理結(jié)果返回給下一對象。Pipeline像是流水線,每個對象負責一個動作,一起協(xié)作完成一件事情。

3.2.1 序列模式(sequence)

Pipeline設(shè)計的序列模式如圖4所示。在序列模式中,首先由Pipeline控制中心創(chuàng)建整個序列中的所有模塊并建立數(shù)據(jù)的流向關(guān)系, 然后把數(shù)據(jù)輸入傳遞給第一個模塊,啟動Pipeline開始工作。當?shù)谝粋€模塊完成指定功能后,根據(jù)模塊序列找到下一個模塊號, 并把處理過的數(shù)據(jù)傳遞給下一個模塊, 以此類推,直到最后一個模塊為止。

3.2.2 中心模式(center)

在中心模式中,每個模塊都從Pipeline控制中心接收數(shù)據(jù)輸入,然后把處理結(jié)果返回給Pipeline控制中心。由Pipeline控制中心決定調(diào)用下一個模塊,并把上一個模塊的輸出作為下一個模塊的輸入。 以此類推,直到最后一個模塊為止。

4 總結(jié)

機頂盒驅(qū)動軟件架構(gòu)設(shè)計,是一項涉及正確性,健壯性,可重用性,靈活性和高效性的系統(tǒng)設(shè)計工作。本文采用了pipeline架構(gòu)來完成機頂盒驅(qū)動設(shè)計,并將機頂盒驅(qū)動設(shè)計分為流水線管理(Pipeline Manager)設(shè)計,視頻輸出管理(Video Presentation Manager)設(shè)計和音頻輸出管理(Audio Presentation Manager)設(shè)計三大部分。研究了通過流水線來統(tǒng)一管理數(shù)字電視機頂盒系統(tǒng)資源,其簡化了機頂盒設(shè)備廠商系統(tǒng)集成的難度,減少了系統(tǒng)集成中所遇到的問題,縮短了數(shù)字電視機頂盒產(chǎn)品的軟件開發(fā)周期。

參考文獻

[1] 王大鵬,雒春雨,三網(wǎng)融合背景下機頂盒技術(shù)發(fā)展方向,2007國際有線電視技術(shù)研討會,2007.

篇6

摘要:模塊化就是把人才培養(yǎng)方案,專業(yè),課程,課堂都看成模塊,世界萬物都是模塊,學生也是模塊,大模塊分成小模塊,小模塊做好了,大模塊也就做好了,《Java 程序設(shè)計》是職業(yè)學院軟件技術(shù)專業(yè)必修課,學習目前世界上優(yōu)秀的編程語言, 對提高學生就業(yè)能力有重要意義。然而,由于 Java 語言具有較高的抽象性、復雜性和嚴謹性,學生普遍感到學習難度較大;加之受傳統(tǒng)教學模式的制約,學生往往感覺抽象、枯燥,學習興趣不高,接受程度有限。為改變這一現(xiàn)狀,我們將項目任務(wù)驅(qū)動法引入教學,對課程體系進行優(yōu)化,對實訓內(nèi)容進行重新設(shè)計,以此激發(fā)學生學習熱情、改善教學效果、提高教學效率,從而更好地滿足職業(yè)院校培養(yǎng)實用型技能人才的要求。

關(guān)鍵詞:Java程序設(shè)計;項目任務(wù)驅(qū)動;項目實訓 。

Java 語言作為一種純面向?qū)ο蟮某绦蛟O(shè)計語言, 是目前世界上優(yōu)秀的編程語言之一, Java平臺以其移動性、安全性和開放性受到g迎,在企業(yè)中得到廣泛應(yīng)用,尤其是近年來基于 Android 系統(tǒng)的Java 手機軟件發(fā)展十分迅速,在形成一個新興產(chǎn)業(yè)。Java 程序員的就業(yè)前景廣闊,可以從事 Java 桌面軟件開發(fā)、Java手機軟件開發(fā)、Jsp網(wǎng)站開發(fā)以及其他與 Java 語言編程相關(guān)的工作。 《Java 程序設(shè)計》作為我院軟件技術(shù)專業(yè)的專業(yè)必修課,力求使學生掌握 Java 面向?qū)ο蟪绦蛟O(shè)計能力,具備從事 Java 編程工作的基礎(chǔ),提高軟件技術(shù)專業(yè)學生的就業(yè)能力。 對《Java 程序設(shè)計》教學進行深入改革、提高教學質(zhì)量,有利于抓住當前 Java 技術(shù)廣泛應(yīng)用,社會對 Java 程序設(shè)計人才需求量大的有利時機,提高軟件技術(shù)專業(yè)學生的就業(yè)率,提升軟件技術(shù)專業(yè)的影響力。

一、《Java 程序設(shè)計》課程的教學現(xiàn)狀

(一)課程地位和特點 計算機軟件技術(shù)專業(yè)的培養(yǎng)目標是:培養(yǎng)德、智、體全面發(fā)展的學生,能掌握計算機系統(tǒng)基礎(chǔ)知識和基本原理,熟悉計算機系統(tǒng)常用(軟硬件)工具,具有一定的硬件操作和較強的軟件開發(fā)能力。學生畢業(yè)后,既有大專層次的理論知識,又具有本專業(yè)較熟悉的實際操作技能適應(yīng)在企事業(yè)單位計算機應(yīng)用一線上直接參與管理或工作;適應(yīng)在計算機軟件企業(yè)從事專業(yè)的軟件開發(fā)工作。 安排在第二學期,為培養(yǎng)學生“從 事軟件開發(fā)工作”而開設(shè)。教學目標是讓學生掌握 Java 面向?qū)ο蟪绦蛟O(shè)計能力,具備從事 Java 編程工作的基礎(chǔ)。前導課程是《C語言程序設(shè)計》,掌握基本的編程能力基礎(chǔ);后續(xù)課程是《Java Web 開發(fā)技術(shù)》,學習實用的編程技術(shù)。 《Java 程序設(shè)計》是一門典型的程序設(shè)計類課程,由于程序設(shè)計本身具有的抽象性、 Java語言的復雜性和嚴謹性及傳統(tǒng)教學模式的影響,學生普遍感到學習難度大,學習興趣不高, 接受程度有限。

(二)難點和不足 由于程序設(shè)計工作本身具有的抽象性,對學生的邏輯思維能力要求較高;而 Java 語言的復雜性和嚴謹性,又使學生普遍感到 Java 語言學習難度大;加之傳統(tǒng)教學采用的“先講解后演示再練習”的方法,往往讓學生感覺到過于枯燥和抽象;而當前《Java 程序設(shè)計》的課程體系更使之難以適應(yīng)高職院校培養(yǎng)高技能人才的要求,其主要問題有: 1. 課程體系設(shè)計不合理。當前《Java 程序設(shè)計》的授課模式以理論講授和演示為主,理論內(nèi)容占主導地位,而實訓環(huán)節(jié)處于從屬地位。 由于當前的《Java 程序設(shè)計》高職課程體系很大程度上仍然是本科課程體系的簡化版,是從本科課程體系中刪除較難理論內(nèi)容并增加實踐內(nèi)容而形成的,并沒有完全擺脫本科模式的影響。然而,高職教育的培養(yǎng)目標是不同的。 高職教育更強調(diào)培養(yǎng)熟練的動手實踐能力。因此,高職課程和本科課程在課程體系的設(shè)計應(yīng)該是完全不同的,不僅僅是理論與實踐的比例問題,而應(yīng)該重新設(shè)計課程體系,使理論內(nèi)容為實踐內(nèi)容服務(wù),才能真正實現(xiàn)以培養(yǎng)動手實踐能力為主導。 2. 實訓內(nèi)容設(shè)計不合理。當前《Java 程序設(shè)計》的實訓內(nèi)容大多屬于驗證性實訓,與真實開發(fā)項目存在很大差距,學生難以適應(yīng)實戰(zhàn)項目實踐,對培養(yǎng)崗位職業(yè)能力的作用非常有限。課程現(xiàn)有實訓內(nèi)容是根據(jù)理論內(nèi)容設(shè)計的,是為了驗證理論內(nèi)容而實踐,從而導致實訓內(nèi)容強調(diào)緊扣理論內(nèi)容,而忽略了真實的崗位情境,造成實訓情境過分理想化。這樣即使學生能掌握一些實踐技能,但是這些技能在真實的崗位情境中卻難以應(yīng)用。因此,必須設(shè)計好實訓內(nèi)容,突出 Java 語言的實用性、針對性,才能引導學生“在做中學”。 針對上述問題,我們引入項目任務(wù)驅(qū)動式教學法,對《Java 程序設(shè)計》課程教學進行改革。

二、《Java 程序設(shè)計》課程的項目任務(wù)驅(qū)動式教學改革

(一) 項目驅(qū)動是一種教學理論基礎(chǔ)上的教學法

在教學過程中,把具體的、學生感興趣的、有意義的具體任務(wù)作為線索,將知識點巧妙地隱含在每個任務(wù)之中;學生在預定情境下,經(jīng)過思考并借助教師的引導解決問題,通過自主建構(gòu)的方式獲得知識、 培養(yǎng)職業(yè)能力。 與傳統(tǒng)教學 “教師講、學生聽”,教師處于主動傳輸知識的地位,學生處于被動接受知識的 地位的模式相比,項目驅(qū)動法強調(diào)的是 “以學生為主體、以教師為主導、以任務(wù)為主線”。在 任務(wù)驅(qū)動法教學過程中,學生能充分發(fā)揮主觀能動性,圍繞任務(wù)要求開展實踐探索,教師不再是課堂的中心,單方面地向?qū)W生灌輸知識,而是在學生完成任務(wù)的過程中起到組織、引導、督促、 協(xié)助、評價的作用。采用這種教學方法,可以解決傳統(tǒng)教學存在的無法充分調(diào)動學生的積極性和創(chuàng)造性,項目驅(qū)動式教學改革符合高職教育發(fā)展方向,符合國家教育部《關(guān)于全面提高高等職業(yè)教育教學質(zhì)量的若干意見》 提出的高職教育的教學過程要突出實踐性和職業(yè)性的要求。

(二)《Java 程序設(shè)計》課程的項目驅(qū)動式教學

1. 概述

為了更好地實施教學,切合高職教育人才培養(yǎng)的要求,培養(yǎng)適應(yīng)行業(yè)需求的程序設(shè)計人才, 我們在《Java 程序設(shè)計》課程中引入任務(wù)驅(qū)動教學法,以行業(yè)流行的my Eclipse 作為開發(fā)平臺,對 《Java 程序設(shè)計》課程教學進行改革。我們緊扣 教學大綱,重新梳理《Java 程序設(shè)計》課程的知識體系,設(shè)計一系列具有實用性和趣味性的任務(wù)案例,并將所有知識點融入到各項目案例中。建立一套任務(wù)驅(qū)動式課程體系。我們以培養(yǎng)崗位職業(yè)能力為主線,用典型任務(wù)序化知識,并將知識融入任務(wù)情景之中。按“教師提出任務(wù)->學生分析任務(wù)->學生解決任務(wù)->學生提交任務(wù)完成報告->學生相互評價->教師總結(jié)與評價”的結(jié)構(gòu)組 織每一個任務(wù)。任務(wù)驅(qū)動的整個流程按照實際需要進行安排,如果不能在一個教學時間單元中完成整個流程,則可以分段進行,比如把學生解決任務(wù)這個模塊放到課余時間進行,讓學生自主學習與挖掘新知識,加深對知識的理解。

2. 課程體系的優(yōu)化設(shè)計

《Java 程序設(shè)計》課程的內(nèi)容由三大部分構(gòu) 成:Java 基本語法、Java 面向?qū)ο髾C制、應(yīng)用編程。其中 Java 面向?qū)ο髾C制部分具有較強的理論性和抽象性,應(yīng)用編程部分則更多偏向?qū)嵺`性。 由于該課程的知識點覆蓋面廣,內(nèi)容之間聯(lián)系緊密、互相滲透,我們根據(jù)教學目標重新梳理知識點之間的聯(lián)系,按照任務(wù)驅(qū)動的模式將知識體系劃分為 14 個模塊,每個模塊又包括三個小任務(wù)即啟發(fā)式模塊、知識點任務(wù)和實踐鞏固任務(wù),14 個大的模塊如下所示: (1)Java 開發(fā)環(huán)境的搭建和使用。Java 特 點;Java 實現(xiàn)機制;Java 的體系結(jié)構(gòu);集成環(huán)境 myEclipse 。 (2)Java 基本語法。Java 應(yīng)用程序結(jié)構(gòu); Java 程序編寫及運行過程。Java 語言標識符和關(guān)鍵字;Java 語言數(shù)據(jù)類型;Java 語言運算符與表 達式;分支控制結(jié)構(gòu);循環(huán)控制結(jié)構(gòu) (3)類和對象。類與對象概念與特征、屬性和方法;類與對象的關(guān)系;定義類的語法;創(chuàng) 建類的對象;使用對象的步驟;類的方法組成部 分;定義和使用類的方法。變量作用域;定義包和導入包的關(guān)鍵字;Javadoc 注釋。 (4)封裝和重載。封裝的作用;對屬性封裝;用構(gòu)造方法實現(xiàn)對象成員的初始化。方法重載;Java 中的構(gòu)造方法與實例方法區(qū)別;對構(gòu)造方法進行重載。 (5)繼承和多態(tài)。繼承的概念;繼承關(guān)鍵 字;父類與子類之間的關(guān)系,super 關(guān)鍵字。多態(tài) 的概念;靜態(tài)多態(tài),動態(tài)多態(tài);多態(tài)的實現(xiàn)。 終類和抽象類。 (6)接口。接口的概念,接口編程的實 現(xiàn); (7)數(shù)組。聲明和創(chuàng)建數(shù)組;數(shù)組的初始化;數(shù)組元素的使用。 (8)字符串。定義、初始化字符串;字符 串常見操作及方法;StringBuffer 類的定義和方 法。 (9)異常處理。異常的概念;異常處理結(jié) 構(gòu);拋出異常;聲明異常;自定義異常。 (10)GUI 編程。Java GUI 界面的基本原 理;常用的 AWT 和 Swing 組件;布局管理器;菜 單;Java 事件組成;委托事件處理機制;常用事件類; (11)數(shù)據(jù)庫編程。JDBC 的概念;JDBC 框 架結(jié)構(gòu);JDBC 驅(qū)動程序 JDBC 驅(qū)動程序編程的基本步驟。 (12)文件 I/O 編程。Java 的文件管理; Java 目錄管理;文件的創(chuàng)建;文件類的方法;順序文本文件;流的操作步驟;隨機文本文件;文件的追加。 (13)多線程編程。Thread 類;Calendar 類;SimpleDateFormat 類;線程的狀態(tài);線程的優(yōu)先級;線程的通信。 (14)網(wǎng)絡(luò)編程。TCP/IP 協(xié)議;Socket 類; ServerSocket 類;UDP 協(xié)議;發(fā)送數(shù)據(jù)包;接收數(shù)據(jù)包。 本文提出的課程體系將教學重點放在實踐 較強的應(yīng)用編程部分,涵蓋了GUI 編程、數(shù)據(jù)庫編程、文件 I/O 編程、多線程編程、網(wǎng)絡(luò)編程等 技術(shù),而對理論性、抽象性較強的 Java 面向?qū)ο髾C制,不再深入分析其內(nèi)在機理,只要求學生掌握基本的概念、原理和語法,為后面的應(yīng)用編程提供基礎(chǔ)。

3. 實訓內(nèi)容的優(yōu)化設(shè)計

Java 程序設(shè)計具有很強的實踐性,但其理論知識卻很抽象,學生僅理解理論知識點是遠遠不 夠的。傳統(tǒng)的“先講解理論知識點,再展示演示案例幫助學生理解,后再進行實踐練習”的做法是以教師為主導,學生被動學習的灌輸式教學法,這樣導致學生學習興趣不高、接受程度有限,導致演示案例和實踐練習的效果大打折扣。 對此我們重新設(shè)計教學流程,摒棄這種以教師為主導的做法,突出學生在學習中的中心地位。首先在每個單元中精心設(shè)計一個有趣、具有啟發(fā)性的演示案例,先讓學生看到程序運行效果,激發(fā)其學習興趣和積極性;然后從案例中引出該知識點的任務(wù),讓學生分組討論該任務(wù),分析該任 如何完成;接著限定任務(wù)的完成時間,讓學生在該時間內(nèi)完成任務(wù)并提交任務(wù)完成報告,在任務(wù)完成后學生們要進行小組互評;后教師再根據(jù)學生完成任 務(wù)的情況進行總結(jié)和評價,包括對學生任務(wù)完成 程度的評價,對任務(wù)背后的知識點的解釋,對學生還沒熟悉的重難點進行總結(jié)。至此,學生通過完成任務(wù),不但對相關(guān)知識點有了一定感性認識,而且通過任務(wù)評價和總結(jié),能夠更好地理解和消化理論,提升為自己的理性認識;后根據(jù)需要再設(shè)計 1-2 個案例作為實訓練習,由淺入深、由簡單到復雜地鞏固知識點和技能。很明顯,這是一種 “從實踐到理論,再從理論到實踐”的做法,符合人類認識客觀世界的規(guī)律。由于該任務(wù)貼近學生學習的真實情境,學生感到親切、容易理解其次,由啟發(fā)式案例提出本節(jié)要完成的任務(wù)。這里任務(wù)比啟發(fā)式案例要求稍高,有利于在學生現(xiàn)有的基礎(chǔ)上挖掘自己的潛力,更深的理解知識。學生在接到任務(wù)后當堂討論并分工,這樣有利于培養(yǎng)他們的團隊合作精神,學生完成任務(wù)的過程可以放在課后進行。在任務(wù)完成后需保留源代碼,對程序運行結(jié)果保留截圖并用 ppt 演示任務(wù)完成流程和填寫任務(wù)完成情況表;回到課堂上后學生將任務(wù)結(jié)果進行展示并對其他小組評分,教師進行評價并補充講解重難點,包括程序結(jié)構(gòu)、定義變量、數(shù)據(jù)類型、運算符和表達 式、分支控制結(jié)構(gòu)、循環(huán)控制結(jié)構(gòu)等。教師對知識點和關(guān)鍵技術(shù)步驟進行總結(jié),對實踐練習中出 現(xiàn)的問題進行分析,可以幫助學生構(gòu)建一個 晰、完整的知識結(jié)構(gòu)后,進行實踐鞏固練習。,以任務(wù)為驅(qū)動,教師只是起到引導的作 用,這樣學生掌握的知識才是真正屬于自己的知識。

三、結(jié)語

如上所述,項目任務(wù)驅(qū)動式教學的關(guān)鍵是合理設(shè)計項目任務(wù),將知識點巧妙地隱藏到任務(wù)中,讓任務(wù)本身具有趣味性并盡可能地貼近真實情境,使學生在完成任務(wù)的過程中不僅獲取相關(guān)知識,而且發(fā)展實踐能力。理論知識點不再是案例的主導, 而是作為演示案例的抽象推廣。實踐證明,對于《Java 程序設(shè)計》這門理論性和實踐性都很強的課程,通過引入項目任務(wù)驅(qū)動教學法,進行項目實訓,使理論和實踐互相滲透,確實能夠,激發(fā)學生的學習熱情,改善教學效果,提高學生的動手實踐能力,能更好地滿足高職院校培養(yǎng)實用型技能人才的要求。

參考文獻:

篇7

一、兩種任務(wù)驅(qū)動教學方式定義

1、正向任務(wù)驅(qū)動

(1)對應(yīng)學生學習階段:初級階段---認知程序。

(2)任務(wù)驅(qū)動方式:根據(jù)任務(wù)編寫程序,運行程序,得出結(jié)果。

(3)任務(wù)驅(qū)動目標:已知程序清單,完成程序運行結(jié)果,并對結(jié)果進行分析。

2、逆向任務(wù)驅(qū)動

(1)τρ生學習階段:中級階段---剖析程序

(2)任務(wù)驅(qū)動方式:根據(jù)結(jié)果完成程序填空,運行程序,得出結(jié)果。

(3)任務(wù)驅(qū)動目標:已知程序結(jié)果,完成程序填空,并對運行結(jié)果進行驗證。

二、正向任務(wù)驅(qū)動式

正向任務(wù)驅(qū)動式是在任務(wù)和程序已知的情況下,只需運行程序,得出結(jié)果,再對結(jié)果進行分析來完成任務(wù)。其任務(wù)形式是”任務(wù)->程序->?”,需要完成結(jié)果,故稱為正向任務(wù)驅(qū)動。

教學一例:

1、提出任務(wù):(1)求5!的值。(2)問s設(shè)定為什么類型的數(shù)據(jù)變量可以容納積值?

要求:通過程序運行和結(jié)果分析,實現(xiàn)對程序的理解和對知識點的掌握。

2、給出條件:給出二組程序。給出條件。

方法一:

#include

main( )

{ int s;

s=5*4*3*2*1;

printf(“s=%d”,s); }

方法二:

#include

main( )

{ float s;

s=5*4*3*2;

printf(“s=%f”,s); }

要求:通過運行程序,記錄結(jié)果,達到看懂程序。

3、收集學生對求5!任務(wù)解決的方法及結(jié)果分析。

方法一:輸出結(jié)果:s=120

方法二:輸出結(jié)果:s=120.000000

兩種方法運行結(jié)果一致。

同學們得出:s變量設(shè)定為int和float類型時都可以容納正確積值。

要求:在對結(jié)果分析后,學生應(yīng)該掌握數(shù)據(jù)變量與容納數(shù)據(jù)大小之間的關(guān)系。

4、任務(wù)驅(qū)動反思:”任務(wù)->程序->?”的任務(wù)驅(qū)動形式難度系數(shù)小,多用于知識入門階段。任務(wù)通過結(jié)果對比完成。在新知識入門階段學習中,有利于同學們熟悉程序,掌握知識點。同時可以提高學生學習興趣,樹立學習自信心。

要求:教師應(yīng)歸納知識要點。

三、逆向任務(wù)驅(qū)動式

逆向任務(wù)驅(qū)動式是在任務(wù)和結(jié)果已知的情況下,需要補寫程序,運行程序,再對結(jié)果進行驗證來完成任務(wù)。其任務(wù)形式是”任務(wù)->?->結(jié)果”,需要完成填空,故稱為逆向任務(wù)驅(qū)動。

教學一例:

1、提出任務(wù):求1+2+ … +99+100的值。(1)對程序填空(共2空);(2)運行程序,記錄結(jié)果,并驗證結(jié)果。

要求:通過程序補寫和結(jié)果驗證,實現(xiàn)掌握循環(huán)控制語句的使用方法。

2、給出條件:部分程序和輸出結(jié)果已給出。

#include

main( )

{ int i=1,sum=__⑴__;

while(i

{ sum=sum+i; __⑵__ ; }

printf("sum=%d\n",sum); }

給出結(jié)果:sum=5050

要求:重點掌握循環(huán)控制變量i的初值、終值和步長值設(shè)定,以及用于累加和變量的初值清零工作。

3、收集學生對任務(wù)解決的方法及結(jié)果分析。

方法一填空:(1)0 (2)i=i+1

程序運行結(jié)果:sum=5050(程序運行結(jié)果和給出結(jié)果一致)

結(jié)論:這部份同學認識到,變量sum用于存放累加值,初值應(yīng)清零。

因此:⑴空填0;而數(shù)列每項值是加1遞增,因此:⑵空填i=i+1。

方法二填空:(1)1 (2)i=i+1

程序運行結(jié)果:sum=5051(程序運行結(jié)果和給出結(jié)果不一致,計算結(jié)果錯誤。)

結(jié)論:少數(shù)同學忽視了變量sum初值應(yīng)該清零。

因此:⑴空填1 ;而數(shù)列每項值是加1遞增,因此:⑵空填i=i+1。

要求:在完成程序填空后,學生應(yīng)該掌握循環(huán)控制變量初值、終值、步長值的設(shè)定方法。

4、任務(wù)驅(qū)動反思:”任務(wù)->?->結(jié)果”的任務(wù)驅(qū)動形式難度系數(shù)中,多用于知識鞏固階段。任務(wù)通過程序填空和結(jié)果驗證實現(xiàn)。

要求:教師應(yīng)歸納知識要點。循環(huán)控制變量三要素(初值、終值、步長值)的設(shè)定是完成任務(wù)的重要前提。

篇8

關(guān)鍵詞 任務(wù)驅(qū)動 任務(wù)驅(qū)動教學法 網(wǎng)絡(luò)程序設(shè)計

中圖分類號: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

任務(wù)驅(qū)動教學法是指在課程教學的過程中,學生在教師的引導下,緊緊圍繞一個或多個特定的教學目標,在教學任務(wù)的驅(qū)動下,通過對現(xiàn)有知識技能和學科理論的主動應(yīng)用,共同進行自主探索的互學習。任務(wù)驅(qū)動教學法要求教學任務(wù)具有非常強的目標性,要刻意營造教學情境,創(chuàng)設(shè)情景使整個教學工作在真實的任務(wù)驅(qū)動下進行。在整個教學過程中,教師處于中心地位,教師在安排布置學生完成教學任務(wù)時,以引導或演示的方式,啟發(fā)學生給出完成該任務(wù)的思路、方法和結(jié)果。在教師安排下,學生花大量的時間自主完成自己的學習任務(wù),在學生自己動腦、動手完成任務(wù),從而學習和掌握相關(guān)的知識與技能。

任務(wù)驅(qū)動教學法是知識及技能的獲取以任務(wù)為中心,著重培養(yǎng)學生分析問題、解決問題、創(chuàng)新問題的綜合能力。它以某一具體任務(wù)為出發(fā)點,通過課堂引導、操作實踐、評價反饋等方法來完成不同階段的任務(wù),從而達到培養(yǎng)學生主動獲取知識、應(yīng)用技能等綜合能力。

1 任務(wù)驅(qū)動教學法的可行性

1.1 網(wǎng)絡(luò)程序設(shè)計的課程特點

網(wǎng)絡(luò)程序設(shè)計課程是一門實踐性、綜合性都較強的課程。該課程主要是以網(wǎng)絡(luò)程序原理及設(shè)計思想為主線,學習網(wǎng)絡(luò)程序設(shè)計與編寫的方法,從而進一步學習分析問題、解決問題的方法,而不是單一學習任何一種特定語言的語法規(guī)則,因此在教學中非常注重學生解決問題的編程技能和程序研發(fā)能力的培養(yǎng)。其次,作為大學高年級專業(yè)課程,學生作為學習主體存在較大的群體差異,他們的認知水平、專業(yè)基礎(chǔ)知識、程序研發(fā)能力參差不齊。如果以統(tǒng)一的教學方法來教學,則難以取得很好的教學效果。

1.2 任務(wù)驅(qū)動教學法的可行性

網(wǎng)絡(luò)程序設(shè)計的教學知識點很多,教學內(nèi)容通常可以歸納為三類:第一類是基礎(chǔ)語法類,強調(diào)網(wǎng)絡(luò)程序語法知識與規(guī)則的學習,使學生掌握最基本的程序語法和程序設(shè)計思想; 第二類是覆蓋類,這類知識的學習能使學生的網(wǎng)絡(luò)知識體系更加全面,這部分內(nèi)容傾向于全面性的專業(yè)知識的應(yīng)用;第三類是綜合項目類,此部分的教學內(nèi)容更加注重網(wǎng)絡(luò)程序設(shè)計中綜合研發(fā)能力的培養(yǎng)。通用的教學模式是按基礎(chǔ)類、覆蓋類、綜合項目類的順序?qū)嵤┙虒W,這種方法實施簡單、層次性強。

任務(wù)驅(qū)動教學法旨在培養(yǎng)學生運用及提升技術(shù)知識水平的能力,培養(yǎng)學生積極探索新知識的能力。任務(wù)驅(qū)動教學法改變了通用的教學模式,從綜合項目類入手,設(shè)計不同的任務(wù),在任務(wù)的驅(qū)使下完成基礎(chǔ)類、覆蓋類的教學內(nèi)容的學習。這種方法促使師生共同參與到日常課程教學中,在完成課程任務(wù)實踐的過程中,部分學生會遇到暫時難以解決的問題,為了完成任務(wù)學生會自發(fā)討論交流、查詢資料,協(xié)作完成任務(wù),這樣做的結(jié)果會使課堂教學變得氣氛活躍而且生動深入。教師把課堂教學的重點和難點都落實到了解決課程任務(wù)過程中發(fā)現(xiàn)的難題,通過交流展示等反饋機制及時了解學生的學習狀況,更好地幫助教學引導學生達到預定的教學效果。任務(wù)驅(qū)動教學法是理論教學理論和實踐教學理論的高效運用,非常適用于網(wǎng)絡(luò)程序設(shè)計類的教學中。

2 任務(wù)驅(qū)動教學法的實施

2.1 任務(wù)設(shè)計的原則

任務(wù)驅(qū)動教學法以任務(wù)為中心,任務(wù)的焦點是解決某一現(xiàn)實問題,激發(fā)學生積極參與欲望的問題。讓學生在完成教師所設(shè)計的各種任務(wù)同時,能夠不斷地增強知識應(yīng)用技能。因此在設(shè)計任務(wù)的時候應(yīng)遵循以下幾個原則:

(1)整體性原則。各階段的任務(wù)要能夠涵蓋教學內(nèi)容的絕大多數(shù)知識點。任務(wù)的知識點要能形成一個有層次的整體,讓學生在不斷完成任務(wù)的過程中獲得網(wǎng)絡(luò)程序設(shè)計知識和技能。

(2)實用性原則。要使學生通過完成任務(wù)將得到有價值的結(jié)果,具有較強的實用性,激發(fā)學生的創(chuàng)作潛能。

(3)開放性原則。任務(wù)設(shè)置的難易程度要適中,還要在任務(wù)中為學生留出創(chuàng)造性能力發(fā)揮的空間。

(4)可操作性原則。任務(wù)應(yīng)該是可操作的,在現(xiàn)有的能力水平下能夠完成,要充分考慮到學生已具備的知識與技能。

(5)真實性。任務(wù)的設(shè)計要貼近學生的日常生活實踐和現(xiàn)實需要,這樣不僅有利于教師對任務(wù)的表達,而且有利于學生對任務(wù)的精準把握。

2.2 任務(wù)驅(qū)動教學法在教學中的實施

此教學法的實施可分成:創(chuàng)設(shè)情境,精心設(shè)計任務(wù);引導學生進行任務(wù)分析;學生自主探究;展示交流;及時評價與總結(jié)共五個步驟。

(1)創(chuàng)設(shè)情境,精心設(shè)計任務(wù)。實施任務(wù)驅(qū)動教學法要營造真實、有現(xiàn)實意義的情境,引起學生的學習興趣。學生的求知欲望是建立在濃厚的興趣和豐富的情感基礎(chǔ)上的,所以要調(diào)動學生的學習積極性,先要喚起他們的學習興趣,引導他們進入設(shè)定的學習情境。

任務(wù)是任務(wù)驅(qū)動教學法的核心,它直接決定教學目標完成的好壞。因此,教師在實施任務(wù)驅(qū)動教學各階段目標時,要精心分析教學目標,仔細分解或組合每個教學內(nèi)容,盡量為學生設(shè)計出具有代表意義的且可操作的任務(wù),盡可能覆蓋每個知識點。

(2)引導學生進行任務(wù)分析。如果精心設(shè)計的課程任務(wù)來自學生的興趣或現(xiàn)實生活需求,學生會非常感興趣。教師應(yīng)從學生的各種需求出發(fā),設(shè)計出合適的教學任務(wù),才有利于學生主動學習,才能突破教學重點難點。在學生躍躍欲試積極思考的時候,教師不要急于提供方法或提出解決方案,要恰當?shù)匾龑W生對任務(wù)進行分析、討論,將大的任務(wù)分解為一個個的更小級別的任務(wù),步步為營,逐步推進,最終達到預定的教學目標。

(3)學生自主探究。這是任務(wù)驅(qū)動教學中的重點內(nèi)容。經(jīng)過教師課堂上的分析引導,學生了解了每一個任務(wù)中應(yīng)解決的關(guān)鍵問題和涉及的核心技術(shù),也都能獲得各自不同的理解和技術(shù)方案。對于解決問題中的疑難點,也正是教師在教學設(shè)計時隱含在各個任務(wù)中的知識點,在下次課堂教學時教師可以將此作為典型問題引導學生解決。在學生完成任務(wù)的過程中,教師要創(chuàng)造一個良好的交流平臺,能夠?qū)崟r幫助學生進行自主學習,及時解決學生遇到的疑問、降低學習難度。

(4)展示交流。學生各自完成作教師布置的任務(wù)后,通過自評自說的方式在課堂進行交流展示,各小組相互欣賞完成后的成果,進行互評;還可以通過提問的方式進行互相交流,咨詢對方完成任務(wù)中好的實現(xiàn)方法和步驟。

(5)及時評價與總結(jié)。教師要適當?shù)貙W生的學習情況進行總結(jié)和評價,課時允許的話還可以進行自評和互評。恰當及時的評價能充分肯定他們的成果,調(diào)動他們的積極性,增強自信心。通過評價時的互相交流討論,既培養(yǎng)學生的創(chuàng)新意識和團隊精神,又培養(yǎng)了善于分析和接受他人建議的良好品質(zhì),還能體會到學以致用的快樂。

評價在任務(wù)驅(qū)動教學法的實施過程中是非常重要的環(huán)節(jié),評價能夠使從技術(shù)技能等方面給予學生啟示,又能從師生的討論和評價中多角度地看到自己的不足,把原理性知識與操作性技能固化為個人的程序研發(fā)能力,快速提升網(wǎng)絡(luò)編程綜合能力。

3 使用任務(wù)驅(qū)動法教學要注意的問題

(1)分解的任務(wù)必須有實用價值。分解的任務(wù)要與學生生活緊密聯(lián)系起來,最好是學生樂意解決的任務(wù),這樣才能更好地激發(fā)學生的學習熱情。實施時適當引用項目教學法進行輔助教學,教師可以獨立研發(fā)本課程相關(guān)項目并分解成小項目,把其中一些小項目作為課程案例進行課堂討論,以項目經(jīng)理的角度指導學生如何完成任務(wù),而將另外一些小項目作為課程任務(wù)布置給學生。

(2)應(yīng)遵循循序漸進原則,教師要注意及時指導。任務(wù)驅(qū)動教學法能驅(qū)動學生從被動學習者變?yōu)樽灾鲗W習者,從而使學生能在學習知識技能的同時也提高自主學習的能力。任務(wù)驅(qū)動教學法的最終目的是為了知識點的掌握和技能的獲取,所以在知識點的選取方面應(yīng)遵循由簡到繁、由易到難的循序漸進的原則。還要求教師創(chuàng)建一個合適的交流平臺,及時指導學生解決任務(wù)中的因難。

(3)對教師綜合素質(zhì)要求較高。任務(wù)驅(qū)動教學法對教師有很高的要求,如果教師引導缺乏技巧或者對整個課程任務(wù)的設(shè)計不夠理想,都可以會大大影響教學效果。教師先要精心地拆分教學目標,然后將教學目標巧妙地蘊涵到某個教學任務(wù),從而得到教學內(nèi)容。這些教學任務(wù)不僅要有典型性,而且還應(yīng)有挑戰(zhàn)性,所有這些都需要教師把握學生的知識能力水平,本課程知識、技能及其內(nèi)在聯(lián)系。

任務(wù)驅(qū)動教學法是一種獲取操作性、實踐性教學內(nèi)容的非常有效的方法。在使用這一方法進行教學時要充分考慮教學對象的能力與水平,對教學內(nèi)容有比較精準的把握,才能保證對這一方法運用的合理、恰當。

參考文獻

[1] 楊建勛.計算機教學中任務(wù)驅(qū)動教學法的實施[J].教育與職業(yè),2013.6:159-161.

[2] 侯建花,楊長青.“C語言程序設(shè)計”實驗教學的改革與實踐――以淮海工學院為例[J].計算機教育,2010.1:114-115.

篇9

關(guān)鍵詞:任務(wù)驅(qū)動法 案例

中圖分類號:TP312 文獻標識碼:A 文章編號:1007-9416(2013)02-0206-01

任務(wù)驅(qū)動教學法通過選擇合適的案例幫助人們學習知識,提高能力。由于該方法具有生動、形象和教學效果好的特點,符合人們認知事物的規(guī)律,在教學中被廣泛采用。

在講授C++程序設(shè)計的過程中,傳統(tǒng)的講授方法么不僅教師備課復雜,而且學生負擔重,對達到良好教學效果收效甚微。可借鑒任務(wù)驅(qū)動教學法,在每個課時中穿插相應(yīng)的任務(wù)案例于課堂,讓學生在完成任務(wù)中學到知識,以此改善教學效果。

1 選擇任務(wù)案例的方法

1.1 難度適中

要注意控制任務(wù)的難度。任務(wù)太簡單會引不起學生興趣,任務(wù)太困難又可能導致學生失去信心,這些都會造成傳授知識的失敗??紤]到學生群體是大一第二學期的學生,剛接觸編程,沒有實際的編程實踐,選擇相對不太困難和相關(guān)專業(yè)知識聯(lián)系緊密的任務(wù)會比較效果好。

1.2 大小適中

應(yīng)該注意選擇合適大小的案例,在課時允許的范圍內(nèi)要盡量選擇不大并且涉及知識內(nèi)容比較集中的案例,如此更能夠突出教學目的,從而不會偏離大綱,更容易達到理想的教學效果。

1.3 選題合理

在案例的選擇方面應(yīng)著眼于貼近生活和容易引起學生興趣的選題,他們對這樣的案例更容易理解,因而上課時的精力就會更加集中,更能發(fā)揮學習的主觀能動性,達到良好的教學效果。

1.4 選擇具有通用性的數(shù)據(jù)結(jié)構(gòu)算法

任務(wù)中所需要的算法和數(shù)據(jù)結(jié)構(gòu)應(yīng)該具有通用性。算法的通用性是指算法本身的規(guī)律性和其它算法的共性,由此可以使學生以后再次面臨相似的問題時,可以根據(jù)以前的方法解決問題,對促進學生學習有更好的效果。教師應(yīng)該盡量向?qū)W生引入一些典型的算法,如冒泡法、貪心算法、分治算法等。這些經(jīng)典算法對培養(yǎng)學生編程素養(yǎng)、形成編程思維有很大幫助。

1.5 選擇一個大型任務(wù)貫穿整個課程

教師應(yīng)該在時間允許的情況下指導學生建立一下比較復雜的大任務(wù),這樣不但可以鞏固和貫通所學知識,而且對學生建立系統(tǒng)工程的思維有幫助。

2 通過任務(wù)驅(qū)動整個理論知識學習過程

在教學過程中,需要緊密結(jié)合授課內(nèi)容和任務(wù)案例,從而達到預期的教學效果。

教學開始時,應(yīng)該通過提出問題的方法引導學生發(fā)現(xiàn)問題的關(guān)鍵點,然后結(jié)合要講解專業(yè)知識啟發(fā)學生進行思考。例如,既然問題的關(guān)鍵是選擇什么樣的數(shù)據(jù)結(jié)構(gòu),那么可以提示學生設(shè)計解決問題所需要的數(shù)據(jù)結(jié)構(gòu)。對任務(wù)案例做具體分析,說明解決問題的思路,尤其是需要涉及當前正在講授的C++相關(guān)的語法內(nèi)容,然后和學生一起書寫對應(yīng)的源程序,同時講解源程序中體現(xiàn)C++語法的部分。

3 學生管理系統(tǒng)實例分析

下面介紹一個有關(guān)學生管理系統(tǒng)的一個案例。在上課之前,先演示做好的學生管理系統(tǒng),使學生從用戶的角度分析需要什么樣的功能。接下來參考傳統(tǒng)教學方法中講述C++語法知識的手段,根據(jù)課本的理論脈絡(luò)強調(diào)其使用的方法,將任務(wù)驅(qū)動教學和傳統(tǒng)教學手段結(jié)合在一起達到了理想的教學效果。

(1)描述學生基本信息的數(shù)據(jù)結(jié)構(gòu)

typedef struct{

unsigned int stuno;//引入整型變量

char stuname[16];//介紹字符數(shù)組

int gender;//借助整型描述布爾型數(shù)據(jù)

unsigned int room;//宿舍號

}Student;//介紹結(jié)構(gòu)體定義

(2)描述學生學習成績的數(shù)據(jù)結(jié)構(gòu)

typedef struct{

unsigned int stuno;//學號,整型變量

char courNo[8];//課程號,字符數(shù)組

char courName[28];//課程名,字符數(shù)組

int credit;//學分

float score1;//平時成績

float score2;//卷面成績

float score;//綜合成績

}ScoreInfo;//介紹結(jié)構(gòu)體定義

(3)按照案例介紹循環(huán)設(shè)計,如for(;;),模塊定義實現(xiàn),子函數(shù)設(shè)計,開關(guān)語句switch。

for (;;)

{

int opt;

ShowMenu();//顯示程序運行主菜單

cin>>opt;//用戶選擇要執(zhí)行的功能

switch(opt)

{

case 1: IntputData();break;//輸入數(shù)據(jù)

case 2:QueryData();break;//查詢數(shù)據(jù)

case 3:DeleteData();break;//刪除數(shù)據(jù)

case 4:SortData();break;//數(shù)據(jù)排序

case 5:exit(0);//退出系統(tǒng)

}

}

最后根據(jù)學生管理系統(tǒng)的各個子函數(shù)模塊,對C++程序設(shè)計中的三種控制結(jié)構(gòu)、函數(shù)定義和文件讀寫等知識點進行比較。幫助學生在編程實踐中體會設(shè)計軟件的完整過程,逐漸過渡到自行編程和調(diào)試C++程序?qū)W習中。

篇10

關(guān)鍵詞:C#;案例;驅(qū)動;實踐;項目

中圖分類號:F49

文獻標識碼:A

文章編號:1672-3198(2013)24-0162-01

0 引言

案例驅(qū)動教學法是通過分析案例程序引導學生學習,以任務(wù)驅(qū)動調(diào)動學生學習主動性的教學方法?!癈#程序設(shè)計”是計算機信息管理專業(yè)、軟件技術(shù)、計算機應(yīng)用等相關(guān)專業(yè)的一門專業(yè)必修課,具有極強的實踐性和很強的工程性。在此課程的教學改革實踐中,筆者采取了以項目為導向的教學模式,突出了對學生實踐動手能力及綜合素質(zhì)的培養(yǎng),為最終實現(xiàn)學生的零距離上崗奠定了基礎(chǔ),取得了良好的教學效果。

1 教學內(nèi)容設(shè)計

筆者根據(jù)多年的教學經(jīng)驗,本著“實用為主,深入淺出”的思想,將教學內(nèi)容進行整合,使學生在邊做邊練的過程中,輕松掌握所學知識點。教學案例的選擇既要有一定的代表性和實用性,又要有趣味性。這樣才能吸引學生。案例規(guī)模大小要適中,要盡可能多地涵蓋主要知識點,還要求必須在規(guī)定學時內(nèi)完成。現(xiàn)將教學中的案例舉例如下:

典型案例一:四則運算訓練器。在講運算符這個知識點時,筆者設(shè)計了一個四則運算訓練器,通過這個案例,學生學會了“加、減、乘、除”的使用方法,還學會了單選按鈕、復選按鈕等控件的使用。該案例效果如圖1所示。

典型案例二:交通燈。在講計時器和圖片框控件的時候,筆者設(shè)計了一個十字路通燈的案例。這個案例一經(jīng)展示出來之后,學生就非常感興趣,覺得自己學的知識真的是學有所用了。

典型案例三:購物車。在這個淘寶網(wǎng)上購物盛行的時代,設(shè)計一個購物車,再實用不過了。學生對這個案例興趣十足,教學效果非常好。

典型案例四:射擊小鳥游戲。設(shè)計一個小游戲案例,寓教于樂。讓學生也變成一個軟件開發(fā)者,增長學生信心,調(diào)動學習積極性。

以上是筆者在教學過程中的案例,在設(shè)計案例的時候,并不一定按照教材上知識點的先后順序,而是打破章節(jié),根據(jù)需要綜合相應(yīng)知識點,使得知識點融合在案例中。讓學生在做的過程中,不知不覺就把相應(yīng)知識點掌握了,從而起到事半功倍的效果。

2 教學方法設(shè)計

2.1 “實踐導向型”的案例教學

這種案例教學的目的是將所學知識與應(yīng)用結(jié)合起來,注重學生技能培養(yǎng),培養(yǎng)學生主動探求知識的學習習慣。該種方法的實施過程如下:教師將問題進行描述,展示案例運行效果,接下來進行案例功能分解,對該案例涉及的知識點進行教學,講解功能實現(xiàn)代碼,最后分析總結(jié)。通過這種教學方法,使得學生在學習過程中注意力集中,學習積極性大大提高,獲取知識比較快。

2.2 “實踐導向型”的討論/辯論式教學

這種方法的教學目的是提高學習主動性,通過交流更快地學習技能,提高學生團隊協(xié)作精神。實施過程如下:首先是教師發(fā)掘主題,接下來分組發(fā)動,展開討論現(xiàn)場展示,最后學生總結(jié),教師進行點評。通過這種教學方法,使得學生廣泛參與學習,學生學習主動性強。

2.3 “實踐導向型”的項目教學(角色扮演)

在教學過程中模擬企業(yè)環(huán)境,培養(yǎng)學生崗位技能。該種方法的實施過程如下:首先是教師進行角色扮演,模擬客戶代表,提出項目需求,再模擬項目經(jīng)理,進行需求分析,總體設(shè)計;接下來學生根據(jù)需求分析,進行項目分組,進行模塊設(shè)計,包括代碼編寫,項目測試與調(diào)試等環(huán)節(jié),最后學生進行項目展示,教師進行項目驗收與評價。通過這種教學方法,使得學生能夠更好的熟悉崗位要求,掌握崗位技能。學生在這個學習的過程中,了解了做項目的整個流程,從而可以舉一反三,對以后的畢業(yè)設(shè)計和工作中都有很大的幫助。

3 教學效果分析

從傳統(tǒng)的教學方式來看,教師在課堂上按照書本上的順序講解知識點,理論知識都講完之后,學生上機實踐。教師在講理論知識的時候,學生根本就不知道老師在講什么,也不知道學了這些知識之后能有什么用,所以學生很茫然,這樣就很容易產(chǎn)生厭學情緒,上課就會睡覺,或者開小差。從而導致學生對理論知識的理解模糊,開發(fā)項目的技能掌握也不夠熟練。嚴重缺乏學習的主動性,大部分學生的學習是被動的,是被家長和老師逼著才會去學習。當教師講授完知識后,學生只能死板的接受老師講的知識點,并不會舉一反三,也不會把知識靈活的應(yīng)用到實際生活中。導致學生對專業(yè)知識學習積極性越來越差。自從實施了案例驅(qū)動的教學方法之后,上課效果明顯好轉(zhuǎn),以前不愛學習的學生也開始認真的做練習了,很多學生還很會創(chuàng)新,在老師提出的案例實現(xiàn)要求的基礎(chǔ)上,還會將功能做得更加完善。以前是老師逼著學生學,現(xiàn)在是學生自己主動要求學,學生會希望老師快點講,多講些知識,這樣他們就可以做出更好的作品了。完全由原來的“要我學”轉(zhuǎn)變?yōu)椤拔乙獙W”的模式了。整個課堂涌現(xiàn)出一種積極向上的學習氛圍。尤其是每當學生案例做成功之后,那種難以掩飾的成就感。

4 結(jié)束語

案例驅(qū)動的教學模式自從2009年在我校計算機信息管理專業(yè)中開始探索實施,在實施過程中不斷驗證修改,如今已經(jīng)形成了一套較為完善的教學體系。近幾年的實踐證明,這種教學模式還是行之有效的,學生學習的積極性、主動性有了大幅度的提高,學生的參與熱情、課程設(shè)計質(zhì)量、競賽成績、畢業(yè)生畢業(yè)設(shè)計質(zhì)量都有很大的進步,達到了培養(yǎng)學生自學能力、實踐動手能力、創(chuàng)新意識和團隊協(xié)作的能力目標。因此,此教學方法對高職院校的計算機相關(guān)專業(yè)具有一定的參考價值。

參考文獻

[1]馬麗,趙偉艇.行動導向教學法在高職C}}程序設(shè)計中的應(yīng)用[J].計算機教育,2010,(3).

[3]席平,楊洋,王春潔.機械糞課程實驗教學改革與實踐[J].實驗技術(shù)與管理,2010,27(7):14-18.