驅(qū)動(dòng)程序設(shè)計(jì)范文
時(shí)間:2023-04-08 16:29:44
導(dǎo)語:如何才能寫好一篇驅(qū)動(dòng)程序設(shè)計(jì),這就需要搜集整理更多的資料和文獻(xiàn),歡迎閱讀由公務(wù)員之家整理的十篇范文,供你借鑒。
篇1
關(guān)鍵詞:wince 驅(qū)動(dòng)程序;開發(fā);設(shè)計(jì)
1 引言
WINCE和Windows 98或Windows 2000不同,它可以工作在12種不同的處理器體系結(jié)構(gòu)、180余種CPU上;同時(shí),WINCE是一個(gè)實(shí)時(shí)操作系統(tǒng)(實(shí)時(shí)系統(tǒng)的意義就是輸入的指令不必進(jìn)入隊(duì)列就可以馬上處理,過去我們使用的DDS就是實(shí)時(shí)系統(tǒng)),可以滿足應(yīng)用程序所需要的實(shí)時(shí)性要求。
Windows CE的模塊化設(shè)計(jì)使得它能夠在大量的平臺(tái)上定制使用,從客戶電子設(shè)備到專用的工業(yè)控制器。由于它是模塊化的,因而我們可以使用滿足平臺(tái)系統(tǒng)需求的最小軟件模塊和組件集合來設(shè)計(jì)嵌入式系統(tǒng)平臺(tái),從而使內(nèi)存用量最小,但最大可能地提高操作系統(tǒng)的性能。因此外圍擴(kuò)展設(shè)備就必須要有硬件驅(qū)動(dòng)才能正常工作。
和其它的操作系統(tǒng)一樣,Windows CE也提供設(shè)備驅(qū)動(dòng)軟件,這些軟件的目的是驅(qū)動(dòng)內(nèi)部和外圍的硬件設(shè)備,或?yàn)樗鼈兲峁┙涌?。設(shè)備驅(qū)動(dòng)程序?qū)⒉僮飨到y(tǒng)和設(shè)備鏈接起來,使得操作系統(tǒng)能夠識(shí)別設(shè)備或者為應(yīng)用程序提供設(shè)備服務(wù)。
Windows CE支持廣泛的基于各種CE平臺(tái)的設(shè)備驅(qū)動(dòng)程序。也提供一些用于驅(qū)動(dòng)程序開發(fā)的模型(model) ,其中包括來自其它操作系統(tǒng)的驅(qū)動(dòng)程序模型(model),因?yàn)檫@些豐富多變的驅(qū)動(dòng)程序模型, Windows CE適應(yīng)大部分的內(nèi)部和外圍設(shè)備口Microsoft Windows CE設(shè)備驅(qū)動(dòng)程序工具包配備了文檔資料,這些文檔資料使得你能夠?yàn)閃indows CE創(chuàng)建設(shè)備驅(qū)動(dòng)程序。目前,Windows CE提供了四種設(shè)備模型,其中兩種是專用于Windows CE的模型,另外兩種外部模型來自其它操作系統(tǒng)。
2 驅(qū)動(dòng)程序開發(fā)簡介
2.1 開發(fā)工具
Windows CE驅(qū)動(dòng)可以使用Platform Builder或者Visual Studio開發(fā),但是開發(fā)人員一般都使用Platform Builder開發(fā)設(shè)備驅(qū)動(dòng)程序,對(duì)于部分驅(qū)動(dòng)也會(huì)使用Visual Studio開發(fā),應(yīng)用程序開發(fā)人員更多的使用Visual Studio開發(fā)驅(qū)驅(qū)動(dòng)程序。作為BSP(Board Support Package)的一部分進(jìn)行整體編譯開發(fā)。
2.2 驅(qū)動(dòng)分類
2.2.1 按加載方式和接口類型分類
1) 本機(jī)驅(qū)動(dòng)程序(Built-In Drivers)
通常由GWES加載,驅(qū)動(dòng)接口一般都是定制的(Custom Purpose)。
2) 流驅(qū)動(dòng)程序(Stream Drivers)
通常由Device Manager加載,驅(qū)動(dòng)接口是標(biāo)準(zhǔn)的流式接口。
3) 混和型驅(qū)動(dòng)程序
同時(shí)有定制式和流驅(qū)動(dòng)兩套驅(qū)動(dòng)接口,但是和系統(tǒng)交互只使用流式驅(qū)動(dòng)接口,比如PC卡槽驅(qū)動(dòng)。
2.2.2 按驅(qū)動(dòng)層次分類
1) 層次型驅(qū)動(dòng)程序(Layered Driver)
> MDD(Model Device Driver),與硬件無關(guān),面向上層應(yīng)用程序,一般由微軟建立統(tǒng)一框架;
> PDD(Platform Dependent Driver),針對(duì)具體硬件平臺(tái)的操作代碼,一般由驅(qū)動(dòng)開發(fā)商實(shí)現(xiàn)MDD和PDD之間通過標(biāo)準(zhǔn)的設(shè)備驅(qū)動(dòng)服務(wù)供應(yīng)商接口DDSI連接。
2) 獨(dú)立型驅(qū)動(dòng)程序(Monolithic Driver)
> 獨(dú)立驅(qū)動(dòng)程序包含了MDD面向上層應(yīng)用和PDD面向硬件平臺(tái)兩方面的代碼;
> 適用于操作不復(fù)雜的驅(qū)動(dòng);
> 減少了MDD和PDD傳遞之間傳遞信息的開銷,實(shí)時(shí)性更強(qiáng);
3 流驅(qū)動(dòng)程序的實(shí)現(xiàn)
流驅(qū)動(dòng)程序必須實(shí)現(xiàn)一套標(biāo)準(zhǔn)接口,流驅(qū)動(dòng)程序適用于IO操作,這也是嵌入式系統(tǒng)中最常見的設(shè)備驅(qū)動(dòng),操作接口和文件系統(tǒng)操作相似,通過CreateFile,ReadFile,WriteFile,IOControl函數(shù)等來操作應(yīng)用程序和流驅(qū)動(dòng)交互,可以把設(shè)備當(dāng)作文件操作。
3.1 文件前綴名確定
根據(jù)文件前綴名在系統(tǒng)中必須唯一這一特點(diǎn),在定義文件前綴名必須是三個(gè)字母,若有多個(gè)同類設(shè)備,由后綴一個(gè)阿拉伯?dāng)?shù)字區(qū)分,例如COM1,LPT3等等。文件前綴名將會(huì)在驅(qū)動(dòng)的標(biāo)準(zhǔn)接口函數(shù)中體現(xiàn),比如XXX_Init,XXX_Close等。
3.2 通用函數(shù)
根據(jù)設(shè)備的不同,所需函數(shù)不同,通用函數(shù)如下所示:
1) XXX_Init:通知設(shè)備管理器為設(shè)備初始化分配資源;
2) XXX_Deinit:通知設(shè)備管理器回收設(shè)備初始化時(shí)分配的資源;
3) XXX_Open:打開設(shè)備。應(yīng)用程序調(diào)用CreateFile時(shí),通過文件系統(tǒng)映射為XXX_Open;
4) XXX_Close:關(guān)閉設(shè)備。應(yīng)用程序調(diào)用CloseFile時(shí),通過文件系統(tǒng)映射為XXX_Close;
5) XXX_PowerUp:設(shè)備上電時(shí),操作系統(tǒng)調(diào)用該函數(shù)完成必要的上電操作;
6) XXX_PowerDown:設(shè)備掉電時(shí),操作系統(tǒng)調(diào)用該函數(shù)完成必要的關(guān)機(jī)操作
7) XXX_Read:從打開的設(shè)備文件中讀取數(shù)據(jù),可以通過ReadFile映射;
8) XXX_Write:向打開的設(shè)備文件寫數(shù)據(jù),可以通過WriteFile映射;
9) XXX_Seek:文件定位,根據(jù)設(shè)備情況決定是否支持;
10) XXX_IOControl:IO操作擴(kuò)展,可以根據(jù)設(shè)備情況來決定支持何種特殊的操作模式。
3.3 DEF文件建立
流驅(qū)動(dòng)一般以DLL形式存在,DEF文件定義了DLL需要導(dǎo)出的接口集,因此DEF文件的名稱與設(shè)備驅(qū)動(dòng)名稱相同。
3.4 寫注冊(cè)表
在wince中任何設(shè)備的識(shí)別都是通過注冊(cè)表來實(shí)現(xiàn)的,因此必須在注冊(cè)表中添加具體的設(shè)備驅(qū)動(dòng)項(xiàng),以便系統(tǒng)識(shí)別。具體方法如下:
在注冊(cè)表中增加驅(qū)動(dòng)程序入口點(diǎn),找到注冊(cè)表項(xiàng),注冊(cè)項(xiàng)位于注冊(cè)表的Root Key下,一般為[HKEY_LOCAL_MACHINEDriversBuiltInSampleDrv],建立必要的子鍵和鍵值,“Prefix”和“DLL”是兩個(gè)重要,而且是必須的鍵,分別描述了設(shè)備前綴名和驅(qū)動(dòng)程序的動(dòng)態(tài)連接庫名,然后根據(jù)具體設(shè)備的需要建立驅(qū)動(dòng)程序需要的其子他鍵。
4 調(diào)試驅(qū)動(dòng)程序
驅(qū)動(dòng)程序編寫完畢后,就應(yīng)該進(jìn)行硬件的調(diào)試。具體方法如下:
4.1 調(diào)試區(qū)信息(Debug Zone)
調(diào)試區(qū)一般和WinCE的控制臺(tái)調(diào)試工具Cesh.exe配合調(diào)試,在不打斷OS運(yùn)行情況下,進(jìn)行驅(qū)動(dòng)的實(shí)時(shí)調(diào)試,利用宏開關(guān),可以選擇需要輸出的調(diào)試區(qū)信息,可以得到進(jìn)程,線程和調(diào)試狀態(tài)信息。并且可以利用IDE環(huán)境,動(dòng)態(tài)選擇開關(guān)調(diào)試區(qū)信息,但是打印驅(qū)動(dòng)程序輸出調(diào)試信。必須借助于至少一種外設(shè)顯示調(diào)試信息,比如串口或者網(wǎng)卡或者其他通過調(diào)用RETAILMSG或者DEBUGMSG完成,不影響OS的運(yùn)行,保證驅(qū)動(dòng)程序運(yùn)行的真實(shí)性,動(dòng)態(tài)輸出設(shè)備的狀態(tài)信息,調(diào)試相對(duì)簡單,也是最廣泛使用的一種調(diào)試方法。
4.2 核心調(diào)試工具(Kernel Debugger)
核心調(diào)試工具將會(huì)禁止所有硬件中斷,掛起操作系統(tǒng),因此可以單步調(diào)試OS或者核心代碼,可以訪問堆棧信息,但是必須在Platform的環(huán)境下,利用至少一種外設(shè)進(jìn)行通信。
4.3 硬件輔助調(diào)試方法
利用硬件調(diào)試工具可以觀察物理設(shè)備的真實(shí)狀態(tài),一般常用的方法可以利用JTAG工具實(shí)時(shí)查看CPU內(nèi)部寄存器,利用邏輯分析儀或者示波器實(shí)時(shí)查看物理外設(shè)的輸入輸出狀態(tài)。利用指示LED來顯示驅(qū)動(dòng)程序?qū)崟r(shí)狀態(tài)信息。
4.4 Visual Studio調(diào)試
可以利用VS內(nèi)置的調(diào)試工具進(jìn)行單步跟蹤,狀態(tài)調(diào)試等。
5 測試驅(qū)動(dòng)程序
驅(qū)動(dòng)程序經(jīng)過調(diào)試以后就需要對(duì)驅(qū)動(dòng)的功能進(jìn)行測試。其常用的方法如下:
1) 寫一個(gè)應(yīng)用程序來測試驅(qū)動(dòng)程序的正確性
2) 模擬各種可能發(fā)生的硬件輸入狀態(tài)來測試驅(qū)動(dòng)程序的正確性
3) 利用Windows CE自帶的測試工具CETK來測試驅(qū)動(dòng)程序的性能和完備性
6 驅(qū)動(dòng)程序的集合和
6.1 驅(qū)動(dòng)程序集成
驅(qū)動(dòng)程序經(jīng)過調(diào)試和測試確定其正確性后,就可以對(duì)驅(qū)動(dòng)程序進(jìn)行集成了。具體過程如下:
1) 在BSP的Driver目錄下建立新的驅(qū)動(dòng)文件夾MyDrv
2) 實(shí)現(xiàn)MyDrv驅(qū)動(dòng)以及相關(guān)的DEF文件
3) 如果需要用到硬件中斷資源,修改原BSP中的相關(guān)中斷處理函數(shù)OEMInterruptEnable,OEMInterruptDisable,OEMInterruptDone,OEMInterruptHandler
4) 在Platform.reg中,增加驅(qū)動(dòng)程序相關(guān)項(xiàng)
5) 在Platform.bib中,增加驅(qū)動(dòng)程序的相關(guān)注冊(cè)表項(xiàng)MyDrv.Dll$(_FLATRELEASEDIR)MyDrv.dll NK SH
6.2 驅(qū)動(dòng)程序
驅(qū)動(dòng)程序進(jìn)過集成以后就可以使用了,具體的過程如下所示:
1) 利用CAB Wizard生成.cab驅(qū)動(dòng)包
2) 直接提供驅(qū)動(dòng)程序文件夾以及相關(guān)注冊(cè)表項(xiàng)和修改說明
7 總結(jié)
本為詳細(xì)的介紹了,wince下驅(qū)動(dòng)開發(fā)的流程,介紹了驅(qū)動(dòng)程序開發(fā)到的詳細(xì)過程,并詳細(xì)說明了各個(gè)部分的實(shí)現(xiàn)和操作方法,使是初學(xué)者對(duì)wince下驅(qū)動(dòng)程序的開發(fā)流程和一般的開發(fā)工具有了初步的了解。
篇2
關(guān)鍵詞:嵌入式操作系統(tǒng);Win CE;SPI;驅(qū)動(dòng)程序
中圖分類號(hào):TP311文獻(xiàn)標(biāo)識(shí)碼:B
文章編號(hào):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)用為中心,以計(jì)算機(jī)技術(shù)為基礎(chǔ),軟硬件可裁剪,適合應(yīng)用系統(tǒng)對(duì)功能、可靠性、成本、體積、功耗嚴(yán)格要求的計(jì)算機(jī)系統(tǒng)”。Windows 是Microsoft推出的功能強(qiáng)大的緊湊、高效、可伸縮的32位嵌入式操作系統(tǒng),主要面對(duì)各種各樣嵌入式系統(tǒng)的產(chǎn)品[1,2]。
該系統(tǒng)具有多線程、多任務(wù)、完全搶占式的特點(diǎn),是為各種具有嚴(yán)格資源限制的硬件系統(tǒng)所設(shè)計(jì)的。為了將操作系統(tǒng)和硬件設(shè)備連接起來,硬件和軟件的驅(qū)動(dòng)聯(lián)系就顯得很重要。SPI是一種高速、全雙工、同步的通信總線,在芯片的管腳上只占用4根線,節(jié)約了芯片的管腳,同時(shí)為PCB的布局節(jié)省了空間,提供了方便,正是出于這種簡單易用的特性,現(xiàn)在越來越多的芯片都集成了這種通信協(xié)議。SPI的工作模式有兩種:主模式和從模式,SPI總線可以配置成單主單從、單主多從、互為主從。為了充分利用芯片的SPI接口進(jìn)行相應(yīng)的驅(qū)動(dòng)程序設(shè)計(jì)以及應(yīng)用程序設(shè)計(jì),通用方法的研究就顯得十分重要。
1 Win CE提供的驅(qū)動(dòng)模型
Win CE操作系統(tǒng)支持兩種類型的驅(qū)動(dòng)程序,一種為本地驅(qū)動(dòng)程序,是把設(shè)備驅(qū)動(dòng)程序作為獨(dú)立的任務(wù)實(shí)現(xiàn)的,直接在頂層任務(wù)中實(shí)現(xiàn)硬件操作,因此有明確和專一的目的。本地驅(qū)動(dòng)程序適合于那些集成到Win CE平臺(tái)的設(shè)備,諸如鍵盤、觸摸屏等設(shè)備。另一種是具有定制接口的流接口驅(qū)動(dòng)程序,它是一般類型的設(shè)備驅(qū)動(dòng)程序,為用戶一級(jí)的動(dòng)態(tài)鏈接庫(DLL)文件,用來實(shí)現(xiàn)一組固定的函數(shù)稱為“流接口函數(shù)”,這些流接口函數(shù)使得應(yīng)用程序可以通過文件系統(tǒng)訪問這些驅(qū)動(dòng)程序。這里論述的SPI驅(qū)動(dòng)就屬于流接口驅(qū)動(dòng)。
2 SPI驅(qū)動(dòng)程序的設(shè)計(jì)
2.1 EP9315芯片及SPI接口簡介
EP9315是一款基于ARM920T,由Cirrus Logic公司生產(chǎn)的工業(yè)級(jí)芯片[3,4] ,內(nèi)帶MMU,16 KB的指令Cache,16 KB的數(shù)據(jù)Cache和數(shù)學(xué)協(xié)處理器,主頻為200 MHz,系統(tǒng)總線為100 MHz。該芯片擁有一組SPI接口,利用它可方便實(shí)現(xiàn)與SPI器件進(jìn)行通信,可大大簡化工程應(yīng)用的硬件設(shè)計(jì)軟件。
SPI驅(qū)動(dòng)程序采用Win CE流驅(qū)動(dòng)的標(biāo)準(zhǔn)形式。下面從驅(qū)動(dòng)程序具體設(shè)計(jì)步驟以及驅(qū)動(dòng)代碼的編寫兩個(gè)方面做較為詳細(xì)的闡述。
2.2 SPI驅(qū)動(dòng)程序設(shè)計(jì)步驟
在Platform Builder 4.2下設(shè)計(jì)Win CE流接口驅(qū)動(dòng)程序可按照以下步驟進(jìn)行[5-7]:
(1) 在C:\\Win CE420\\PLATFORM\\ep931x\\drivers目錄下新建一個(gè)目錄SPI;
(2) 從其他驅(qū)動(dòng)目錄下復(fù)制makefile文件到SPI目錄下;
(3) 用文本編輯器建立4個(gè)文本文件,文件名分別為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)核映射時(shí)自動(dòng)將SPI.dll加入到內(nèi)核映像中,添加內(nèi)容如下:
SPI.dll MYM(_FLATRELEASEDIR)\ SPI.dll NK SH
(6)具體的流接口驅(qū)動(dòng)程序跟注冊(cè)表密不可分,在Platform Builder 4.2中打開platform.reg文件,在該文件最后加入如下所示注冊(cè)表信息,以使在生成操作系統(tǒng)映像時(shí),Platform Builder將注冊(cè)表信息加入到注冊(cè)表中。在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ū)動(dòng)程序;共享中斷
中圖分類號(hào):TP316文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):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ā)的一種嵌入式實(shí)時(shí)操作系統(tǒng),由于其高可靠性、強(qiáng)實(shí)時(shí)性以及可裁減性,廣泛應(yīng)用于航空航天、軍事、民用通信和工業(yè)控制等領(lǐng)域。
在某大型控制系統(tǒng)中,我們需要開發(fā)一個(gè)具有4路串口通訊、1路CAN通訊以及2路以太網(wǎng)通訊的多種通訊方式并存的通訊設(shè)備??紤]到通訊能力以及通訊的實(shí)時(shí)性要求,CPU選用盛博公司PC104+總線的Pentium III處理器,串口選用具有PC104總線接口的4路串口擴(kuò)展板,采用VxWorks操作系統(tǒng)來實(shí)現(xiàn)以上需求。由于每種通訊方式都采用中斷方式觸發(fā),而系統(tǒng)硬件提供的中斷源是有限的,針對(duì)這種情況,為了節(jié)省系統(tǒng)的中斷資源,本文設(shè)計(jì)了一個(gè)基于VxWorks的多串口共享中斷的驅(qū)動(dòng)程序,并對(duì)該驅(qū)動(dòng)程序的功能進(jìn)行了長時(shí)間測試驗(yàn)證。
1 串行設(shè)備驅(qū)動(dòng)的結(jié)構(gòu)
在VxWorks操作系統(tǒng)中,串行設(shè)備作為一種特殊的字符型設(shè)備,操作系統(tǒng)為其提供一個(gè)簡單、統(tǒng)一、獨(dú)立于設(shè)備的接口,在應(yīng)用層對(duì)于串行設(shè)備的任何操作都可以視為對(duì)一個(gè)文件的操作,而具體的實(shí)現(xiàn)是通過串行設(shè)備的驅(qū)動(dòng)程序來完成。
在VxWorks中串行設(shè)備驅(qū)動(dòng)采用3層抽象的軟件結(jié)構(gòu),即I/O系統(tǒng)、虛擬設(shè)備ttyLib或tyLib以及硬件驅(qū)動(dòng),其結(jié)構(gòu)示意圖如圖1所示。在VxWorks中,I/O系統(tǒng)并不直接與具體的硬件驅(qū)動(dòng)進(jìn)行交互,而是將驅(qū)動(dòng)程序中與硬件無關(guān)的部分放在虛擬設(shè)備ttyLib中實(shí)現(xiàn),再利用虛擬設(shè)備ttyLib與I/O系統(tǒng)進(jìn)行通訊,使得I/O系統(tǒng)獨(dú)立于具體的硬件驅(qū)動(dòng),而驅(qū)動(dòng)程序的開發(fā)者只需要實(shí)現(xiàn)系統(tǒng)所提供的接口并且將其掛載到虛擬設(shè)備ttyLib就能完成具體串行設(shè)備驅(qū)動(dòng)的設(shè)計(jì),從而保證驅(qū)動(dòng)代碼的可復(fù)用性和接口的統(tǒng)一性。
2 串行設(shè)備驅(qū)動(dòng)的實(shí)現(xiàn)
VxWorks在啟動(dòng)過程中對(duì)串行設(shè)備驅(qū)動(dòng)的實(shí)現(xiàn)主要包括兩部分:串口的初始化和串行設(shè)備的創(chuàng)建。串口的初始化主要包括初始化串口設(shè)備,分配串口所需的資源以及完成串口中斷程序的系統(tǒng)掛接;串行設(shè)備的創(chuàng)建包括tty驅(qū)動(dòng)的初始化和對(duì)tty設(shè)備的創(chuàng)建,即建立起I/O系統(tǒng)與硬件驅(qū)動(dòng)層的聯(lián)系。
2.1 串口的初始化
sysInit()作為VxWorks操作系統(tǒng)啟動(dòng)的入口程序會(huì)調(diào)用第一個(gè)C程序函數(shù)usrInit(),完成用戶定義系統(tǒng)的初始化工作,而串口的硬件初始化是在usrInit()函數(shù)的子函數(shù)sysHwInit()中完成。對(duì)于VxWorks現(xiàn)有的Intel8250驅(qū)動(dòng)(Tornado目錄/target/src/drv/sio/i8250Sio.c),sysHwInit()還會(huì)調(diào)用sysSerial.c文件下的sysSerialHwInit(),sysSerialHwInit()函數(shù)主要對(duì)串行設(shè)備的設(shè)備描述符進(jìn)行初始化,在初始化過程中還會(huì)調(diào)用底層的i8250HrdInit()對(duì)串行設(shè)備的端口進(jìn)行初始化。在完成系統(tǒng)硬件和VxWorks內(nèi)核的初始化以后,系統(tǒng)會(huì)啟動(dòng)一個(gè)函數(shù)名為usrRoot()的任務(wù),usrRoot()作為VxWorks操作系統(tǒng)的根任務(wù)調(diào)用sysClkConnect()對(duì)系統(tǒng)時(shí)鐘中斷進(jìn)行配置,而具體的工作是由sysClkConnect()的子函數(shù)sysHwInit2()完成,其中sysHwInit2()會(huì)調(diào)用sysSerialHwInit2()來完成串行設(shè)備的中斷掛接。
2.2 串行設(shè)備的創(chuàng)建
在usrRoot()中通過調(diào)用ttyDrv()完成tty驅(qū)動(dòng)的初始化,而ttyDrv()則調(diào)用iosDrvInstall()將tty驅(qū)動(dòng)添加到系統(tǒng)的驅(qū)動(dòng)程序列表中,并且完成與I/O系統(tǒng)層的各系統(tǒng)操作函數(shù)的連接。tty虛擬設(shè)備層與底層硬件驅(qū)動(dòng)的連接則是通過ttyDevCreate()來完成,并實(shí)現(xiàn)各個(gè)串行設(shè)備的創(chuàng)建。
3 多串口共享中斷的驅(qū)動(dòng)程序開發(fā)
串口擴(kuò)展板選用的是盛博的A3-CSD板卡,采用PC104總線接口,集成了4路16C554兼容的光電隔離異步串行口,每個(gè)串行口能獨(dú)立控制發(fā)送與接受,且具有16字節(jié)FIFO以減少中斷請(qǐng)求次數(shù),此外該擴(kuò)展板還具有一個(gè)串口中斷狀態(tài)指示寄存器,可以指示產(chǎn)生中斷的串口。根據(jù)上述硬件配置,可以在現(xiàn)有Intel8250驅(qū)動(dòng)的基礎(chǔ)上進(jìn)行改進(jìn)來完成多串口共享中斷的驅(qū)動(dòng)程序設(shè)計(jì)。
3.1 串口設(shè)備的初始化
每個(gè)串口設(shè)備都需要有一個(gè)的描述自身屬性的結(jié)構(gòu)體I8250_CHAN_EX,即設(shè)備描述符,且結(jié)構(gòu)體的第一個(gè)成員必須為指向SIO_DRV_FUNCS結(jié)構(gòu)的指針,該結(jié)構(gòu)體還包含描述16C554芯片各個(gè)端口的信息以及提供給高層協(xié)議的回調(diào)函數(shù)。在系統(tǒng)啟動(dòng)過程中通過調(diào)用sysSerialHwInitEx()完成對(duì)該結(jié)構(gòu)體的初始化并且將自定義的全局指針數(shù)組pi8250ChanEx[4]中各元素分別指向4個(gè)串口的I8250_CHAN_EX結(jié)構(gòu)體,初始化過程中會(huì)調(diào)用i8250HrdInitEx()將串口驅(qū)動(dòng)程序的設(shè)備操作入口函數(shù)安裝到SIO_DRV_FUNCS結(jié)構(gòu)中,然后調(diào)用sysSerialHwInitEx2()完成串口中斷的系統(tǒng)連接。其中sysSerialHwInitEx2()的實(shí)現(xiàn)代碼為:
void sysSerialHwInitEx2 (void)
{
int i;
for (i = 0; i < N_UART_CHANNELS_EX; i++)
if (i8250ChanEx[i].int_vec)
{/*將四個(gè)串口設(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è)備的個(gè)數(shù),i8250ChanEx結(jié)構(gòu)的成員變量int_vec表示該串口的系統(tǒng)中斷號(hào),這里每個(gè)i8250ChanEx結(jié)構(gòu)的int_vec項(xiàng)值都是相同的。
3.2 串口驅(qū)動(dòng)程序的入口點(diǎn)函數(shù)編寫
編寫串口設(shè)備驅(qū)動(dòng)程序需要完成串口設(shè)備的入口點(diǎn)函數(shù),這些函數(shù)包括控制命令函數(shù)i8250IoctlEx(),啟動(dòng)發(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個(gè)串口設(shè)備所對(duì)應(yīng)的I8250_CHAN_EX結(jié)構(gòu),宏UART_INT_STATUS表示串口中斷狀態(tài)指示寄存器地址。
在進(jìn)入i8250ShareIntEx()后首先關(guān)閉系統(tǒng)中斷,通過查詢串口中斷狀態(tài)指示寄存器來判斷產(chǎn)生中斷的串口設(shè)備,然后將產(chǎn)生此中斷的串口描述符結(jié)構(gòu)體,即pi8250ChanEx[4]中對(duì)應(yīng)的元素,作為參數(shù)傳遞給單串口中斷服務(wù)函數(shù)i8250IntEx(),最后重新開啟系統(tǒng)中斷。
3.3 以模塊加載串口驅(qū)動(dòng)程序
在config.h中加入#undef INCLUDE_TTY_DEV,執(zhí)行下面的代碼后生成一個(gè)o格式的串口驅(qū)動(dòng)的庫文件8250SioEx.o,然后在應(yīng)用程序中利用loadModule()將8250SioEx.o動(dòng)態(tài)加載到內(nèi)存中運(yùn)行。
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()返回一個(gè)描述串口設(shè)備的I8250_CHAN_EX結(jié)構(gòu)體。
4 結(jié)束語
本文詳細(xì)分析了串行設(shè)備驅(qū)動(dòng)程序的結(jié)構(gòu)以及在VxWorks啟動(dòng)過程中串行設(shè)備驅(qū)動(dòng)程序的加載過程,設(shè)計(jì)了一個(gè)多串口共享中斷的驅(qū)動(dòng)程序,利用該驅(qū)動(dòng)程序?qū)?個(gè)串口同時(shí)進(jìn)行了連續(xù)10小時(shí)的數(shù)據(jù)收發(fā)測試,4個(gè)串口都能穩(wěn)定地發(fā)送和接收數(shù)據(jù)。此外,在測試過程中發(fā)現(xiàn)在進(jìn)入多串口共享中斷服務(wù)函數(shù)后需要將系統(tǒng)中斷關(guān)閉,待執(zhí)行完中斷處理后再開啟系統(tǒng)中斷,否則會(huì)引起串口工作的不穩(wěn)定。
參考文獻(xiàn):
[1] 周啟平.VxWorks下設(shè)備驅(qū)動(dòng)程序及BSP開發(fā)指南[M].北京:中國電力出版社,2004.
[2] 陳智育,溫彥軍,陳琪.VxWorks程序開發(fā)實(shí)踐[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ū)動(dòng)程序
[中圖分類號(hào)]TP[文獻(xiàn)標(biāo)識(shí)碼]A[文章編號(hào)]1007-9416(2010)02-0029-02
1 引言
由于現(xiàn)在大多數(shù)計(jì)算機(jī)沒有并行口而具有多個(gè)USB接口,因此很多并行口設(shè)備無法和計(jì)算機(jī)直接連接使用。利用基于單片機(jī)STC11F32XE的USB 轉(zhuǎn) ECP 模式并行口可以連接其他ECP模式并口設(shè)備,以達(dá)到讓具有ECP接口的設(shè)備可以和沒有并口的PC進(jìn)行數(shù)據(jù)通信的目的。并口采用的是IEEE 1284-A接口, USB 接口驅(qū)動(dòng)芯片采用Philips 半導(dǎo)體公司的PDIUSBD12,該芯片的數(shù)據(jù)端口D0-D7接單片機(jī)的P0 口,引腳WR_N、RD_N、及A0 分別接單片機(jī)的P3.6、P3.7、P3.5 引腳。整個(gè)硬件電路圖如圖 1 所示。當(dāng) USB 設(shè)備硬件設(shè)計(jì)完成之后,接著就必須根據(jù)硬件特點(diǎn)和需要完成的功能,設(shè)計(jì)出合乎產(chǎn)品的USB驅(qū)動(dòng)程序,否則,設(shè)備將無法被PC機(jī)識(shí)別,不能正常使用。
2 WDM型的USB驅(qū)動(dòng)程序結(jié)構(gòu)
USB設(shè)備的驅(qū)動(dòng)程序是一種典型的WDM驅(qū)動(dòng)程序。WDM驅(qū)動(dòng)程序是分層的。對(duì)于USB設(shè)備驅(qū)動(dòng)程序來說,其驅(qū)動(dòng)程序包括兩個(gè)層次:設(shè)備(功能)驅(qū)動(dòng)程序?qū)雍涂偩€(底層)驅(qū)動(dòng)程序?qū)?。USB底層驅(qū)動(dòng)程序由操作系統(tǒng)提供,不要開發(fā)者自己編寫,它位于USB功能驅(qū)動(dòng)程序的下面,負(fù)責(zé)與實(shí)際的USB硬件打交道,實(shí)現(xiàn)復(fù)雜而繁瑣的底層通信;USB功能驅(qū)動(dòng)程序必須要由開發(fā)者編寫,它不與實(shí)際的USB硬件打交道,是把包含URB(USB Request Block,USB 請(qǐng)求塊)的IRP發(fā)送到USB底層驅(qū)動(dòng)程序,來實(shí)現(xiàn)對(duì)USB設(shè)備信息的發(fā)送和接收。(圖2) 給出了USB 驅(qū)動(dòng)程序的結(jié)構(gòu)模型。
3 USB驅(qū)動(dòng)開發(fā)編程環(huán)境的建立
開發(fā)一個(gè)WMD 驅(qū)動(dòng)程序,必須要搭建合適的開發(fā)環(huán)境以此來減小開發(fā)難度。對(duì)于WDM 驅(qū)動(dòng)的開發(fā),一般必須使用的軟件是VC++6.0和DDk (Driver Development Kit,驅(qū)動(dòng)程序開發(fā)工具包)。但為了進(jìn)一步降低開發(fā)難度,選擇使用了第三方驅(qū)動(dòng)開發(fā)工具--Driver Studio。它以類的方式對(duì)DDK 進(jìn)行封裝,可以十分容易地利用它提供的向?qū)懋a(chǎn)生一個(gè)必需的驅(qū)動(dòng)程序框架。
一般首先安裝VC++6.0,接著安裝DDK,如果需要的話,還可以安裝Windows SDK 來輔助開發(fā),最后安裝Driver Studio 3.2。因?yàn)镈river Studio的類庫要使用DDK庫函數(shù),所以在安裝好Driver Studio 之后必須首先要編譯出一個(gè)庫文件,否則會(huì)提示找不到庫文件vdw_wdm.lib 等錯(cuò)誤。編譯該庫文件的步驟如下:啟動(dòng)VC++6.0,找到并打開Driver Studio3.2 安裝目錄下的vdwLibs.dsw工程文件,然后選擇DriverStudio->DDK Build Settings,在彈出的對(duì)話框中設(shè)置DDK的安裝路徑和運(yùn)行的操作系統(tǒng)。然后選擇菜單Build->Batch Build,要根據(jù)驅(qū)動(dòng)運(yùn)行的平臺(tái)來選擇對(duì)應(yīng)的工程文件,這里選擇了x86對(duì)應(yīng)的工程,正確選擇之后,單擊Rebuild All 按鈕,開始編譯庫文件。這個(gè)類庫只需編譯一次,以后開發(fā)其他的驅(qū)動(dòng)就不必再次編譯了。
4 USB驅(qū)動(dòng)創(chuàng)建方法及步驟
該驅(qū)動(dòng)程序的主要功能包括:端點(diǎn)0采用控制傳輸,可以保證傳輸過程中的數(shù)據(jù)的完整性和正確性,主要負(fù)責(zé)USB枚舉過程中的數(shù)據(jù)的讀寫。另外,又增加了端點(diǎn)1和端點(diǎn)2。端點(diǎn)1采用中斷傳輸,這種傳輸主要用在數(shù)據(jù)量不大,但對(duì)時(shí)間要求較嚴(yán)格的設(shè)備中。因此,模塊滿足了實(shí)時(shí)性的特點(diǎn);端點(diǎn)2采用批量傳輸,該種傳輸通常用在數(shù)據(jù)量大、對(duì)數(shù)據(jù)的實(shí)時(shí)性要求不高的場合中,利用該方式可以完成大量數(shù)據(jù)的快速傳輸,可以與高速的ECP并行口相匹配,因此,模塊滿足了高速數(shù)據(jù)傳輸?shù)囊蟆?/p>
單擊VC菜單欄下的DriverStudio菜單項(xiàng),選擇Driver Wizard菜單,會(huì)出現(xiàn)一個(gè)驅(qū)動(dòng)向?qū)?duì)話框。單擊Start a new Driver Project 將創(chuàng)建一個(gè)新的驅(qū)動(dòng)工程。然后按照向?qū)稍擈?qū)動(dòng)程序的框架。具體步驟如下:①設(shè)置工程名和路徑。在彈出的對(duì)話框中,設(shè)置工程名為UsbToECP、路徑為D:\。②選擇驅(qū)動(dòng)工程的類型。在對(duì)話框中選擇 WDM Driver,驅(qū)動(dòng)框架選擇DriverWorks C++ Framework。③選擇WDM驅(qū)動(dòng)類型。在彈出的對(duì)話框中選擇 WDM Function Driver。④選擇驅(qū)動(dòng)總線的類型。在對(duì)話框中選擇為 USB 總線,然后在分別設(shè)定USB Vendor ID 和USB Product ID。 ⑤設(shè)置USB 的端點(diǎn)資源。單擊Add增加端點(diǎn)。這里增加 4 個(gè)端點(diǎn),Pipe Name 分別是Ep1_In、Ep1_Out、Ep2_In和Ep2_Out。其中Ep1_In和Ep1_Out選擇中斷傳輸,端點(diǎn)地址均為1,傳輸方向分別為輸入和輸出,最大包長為8字節(jié),最大傳輸大小為 4096字節(jié)。Ep2_In和Ep2_Out選擇批量傳輸,端點(diǎn)地址均為2,傳輸方向分別為輸入和輸出,最大包長為64字節(jié),最大傳輸大小為 40960字節(jié)。⑥選擇需要處理請(qǐng)求類型。這里選擇IRP_MJ_DEVICE_CONTROL、IRP_MJ_READ和IRP_MJ_WRITE。它們分別與API函數(shù) DeviceIoControl、ReadFile和WriteFile一一對(duì)應(yīng)。⑦設(shè)備I/O操作方式。配置IRP_MJ_READ和IRP_MJ_WRITE的緩沖方式分別為Buffered。另外還需要增加4個(gè)IO Control 的控制代碼:EP1_READ、EP1_WRITE、EP2_READ、EP2_WRITE。打開方式選擇Interface。⑧添加注冊(cè)表項(xiàng)??梢愿鶕?jù)自己需要增加,這里增加了一個(gè)設(shè)備名稱。⑨設(shè)置電源管理。選擇Device requires an inrush of power at startup,說明該設(shè)備啟動(dòng)時(shí)需要大電流,這樣做的目的是防止相同的設(shè)備同時(shí)上電,減少對(duì)電源的沖擊。步驟10-13按默認(rèn)配置即可。
5 驅(qū)動(dòng)的編程
USB驅(qū)動(dòng)程序的編程最主要的就是編寫端點(diǎn)1和端點(diǎn)2的數(shù)據(jù)處理函數(shù),其中主要編寫的是UsbToECPDevice類成員函數(shù)Read()、Write()、及DeviceControl()中調(diào)用的4 個(gè)IoControl()函數(shù)。
Read()函數(shù)對(duì)應(yīng)著WIN32 API的ReadFile函數(shù),其參數(shù)通過KIrp I傳遞過來。因?yàn)槎它c(diǎn)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,不需要進(jìn)行數(shù)據(jù)處理。接著創(chuàng)建一個(gè)URB來完成數(shù)據(jù)的處理。因?yàn)槎它c(diǎn)1采用的是中斷傳輸,所以必須創(chuàng)建一個(gè)中斷傳輸?shù)?URB并提交它,端點(diǎn)管道KUsbPipe類提供一個(gè)創(chuàng)建中斷傳輸U(kuò)RB的函數(shù)BuildInterruptTransfer。這樣底層的USB 總線驅(qū)動(dòng)程序就會(huì)負(fù)責(zé)從端點(diǎn) 1 讀取數(shù)據(jù),當(dāng)完成數(shù)據(jù)的讀取后,提交相應(yīng)URB的函數(shù)就會(huì)返回。當(dāng)URB創(chuàng)建成功后,利用KUsbPipe類的成員函數(shù)SubmitUrb()來提交這個(gè)URB,否則返回資源不足的錯(cuò)誤信息。SubmitUrb()函數(shù)返回后,可以用URB的成員變量TransferBufferLength來獲取實(shí)際讀到的字節(jié)數(shù),最后刪除創(chuàng)建的URB。
本文為全文原貌 未安裝PDF瀏覽器用戶請(qǐng)先下載安裝 原版全文
Write()函數(shù)的處理方法與Read()函數(shù)的方法非常相似,不同之處在于利用KIrp類I的成員函數(shù) BufferedWriteSource()和WriteSize()來分別獲取緩沖區(qū)的地址和傳輸?shù)淖止?jié)數(shù)。另外,函數(shù)EP1_READ_Handler()和EP1_WRITE_Handler()的實(shí)現(xiàn)與Read()和Write()函數(shù)基本是一樣的,略有不同。
端點(diǎn)2 的EP2_READ_Handler(KIrp I)和EP2_WRITE_Handler(KIrp I)與端點(diǎn) 1的EP1_READ_Handler(KIrp I)和EP1_WRITE_Handler(KIrp I)處理方式幾乎是一樣的,主要的不同是在創(chuàng)建URB時(shí)要用到創(chuàng)建批量傳輸U(kuò)RB 的函數(shù)BuildBulkTransfer(),其參數(shù)及意義與BuildInterruptTransfer()相同。
6 驅(qū)動(dòng)的安裝
在對(duì)端點(diǎn)1和端點(diǎn)2編程完成之后,然后對(duì)其進(jìn)行編譯,如果沒有錯(cuò)誤,可以看到編譯報(bào)告中有一行“MODULE=.\objfre\i386\UsbToECP.sys”,這個(gè)就是所要的驅(qū)動(dòng)文件,另外,在目錄下還產(chǎn)生一個(gè)inf文件,其也是安裝驅(qū)動(dòng)時(shí)需要的一個(gè)重要的文件,它里面有一些重要的安裝信息,可以根據(jù)需要進(jìn)行修改。一般主要是對(duì)inf的Stings 進(jìn)行修改,表1給出了該驅(qū)動(dòng)的Strings 段的幾個(gè)重要屬性的修改。
將該設(shè)備與PC機(jī)連接,系統(tǒng)會(huì)提示安裝驅(qū)動(dòng),首先指定驅(qū)動(dòng)安裝所要使用的inf文件所在的位置,該inf文件可以在驅(qū)動(dòng)工程目錄的driver目錄下找到,是由向?qū)ё詣?dòng)生成的。然后選擇安裝驅(qū)動(dòng)所需要的UsbToECP.sys文件,該文件在D:\ UsbToECP\driver\objfre\i386下。正確安裝驅(qū)動(dòng)之后,打開計(jì)算機(jī)的設(shè)備管理器,將會(huì)看到該USB設(shè)備。如下圖3所示。打開圖3中的Class for BinBinUsb devices下的BinBinUsb Device屬性,選擇相應(yīng)標(biāo)簽,將會(huì)看到如下圖4的驅(qū)動(dòng)信息。
7 結(jié)語
USB設(shè)備驅(qū)動(dòng)的開發(fā)是設(shè)備開發(fā)過程中必不可少的一項(xiàng)任務(wù)。通過研究利用VC++、DDK和Driver Studio對(duì)USB驅(qū)動(dòng)程序的設(shè)計(jì)方法,成功地設(shè)計(jì)了基于單片機(jī)的USB轉(zhuǎn)并口設(shè)備的驅(qū)動(dòng)程序。通過測試,使用該驅(qū)動(dòng)的USB轉(zhuǎn)并口設(shè)備運(yùn)行穩(wěn)定,達(dá)到了預(yù)期的效果。這種USB驅(qū)動(dòng)的設(shè)計(jì)方法簡化了開發(fā)難度,開發(fā)的驅(qū)動(dòng)穩(wěn)定可靠,必將受到USB設(shè)備開發(fā)者的廣泛關(guān)注,同時(shí)也給其他的基于WDM驅(qū)動(dòng)的開發(fā)提供一個(gè)新途徑。
[參考文獻(xiàn)]
[1] 榮佳波,常明志,井科偉,楊少勇.USB 設(shè)備的WDM驅(qū)動(dòng)程序設(shè)計(jì)[J].應(yīng)用科技,2004,31(3);39-41.
篇5
[關(guān)鍵詞]數(shù)字電視機(jī)頂盒,驅(qū)動(dòng)程序開發(fā),軟件架構(gòu),Pipeline
中圖分類號(hào):TN948 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-914X(2014)24-0098-01
1 背景和意義
在國際社會(huì)綜合環(huán)境的影響下和從中國自身發(fā)展的實(shí)際情況出發(fā),中國正在逐步改變和調(diào)整經(jīng)濟(jì)結(jié)構(gòu)和產(chǎn)業(yè)結(jié)構(gòu),擴(kuò)大內(nèi)需,大力發(fā)展文化產(chǎn)業(yè)和電子信息產(chǎn)業(yè)。2010年1月13日,總理主持國務(wù)院常務(wù)會(huì)議決定加快推進(jìn)電信網(wǎng)、廣播網(wǎng)、互聯(lián)網(wǎng)三網(wǎng)融合[1],并審議通過了推進(jìn)三網(wǎng)融合總體方案。2010年至2012年為試點(diǎn)階段,以推進(jìn)廣電和電信業(yè)務(wù)雙向階段性進(jìn)入重點(diǎn),2013年至2015年為推廣階段,國家將全面推進(jìn)三網(wǎng)融合。
目前機(jī)頂盒軟件開發(fā)中遇到的普遍問題是軟件開發(fā)周期長。分析其原因,一部分是由于項(xiàng)目管理問題所致,本文對(duì)此因素不作討論;另外一個(gè)因素就是隨著機(jī)頂盒芯片所提供功能不斷向傳統(tǒng)PC靠攏,帶來的是平臺(tái)驅(qū)動(dòng)軟件和上層應(yīng)用軟件復(fù)雜
2 機(jī)頂盒軟件開發(fā)傳統(tǒng)架構(gòu)
機(jī)頂盒軟件開發(fā)的傳統(tǒng)架構(gòu)主要分為基本型,改進(jìn)型和中間件。基本型主要是以芯片的功能模塊為單元,對(duì)上層軟件提供標(biāo)準(zhǔn)接口。而改進(jìn)型則在基本型的基礎(chǔ)之上,在驅(qū)動(dòng)層中集成部分復(fù)雜應(yīng)用(如PVR),降低了上層軟件開發(fā)這些應(yīng)用的難度。中間件則是為滿足機(jī)頂盒應(yīng)用程序的高度可移植,其對(duì)應(yīng)用程序而言徹底屏蔽不同平臺(tái)的差異。
2.1 基本型
在最初的標(biāo)清機(jī)頂盒軟件開發(fā)中,由于其所提供的功能簡單,部分客戶會(huì)選擇在應(yīng)用程序中直接調(diào)用芯片驅(qū)動(dòng)程序的開發(fā)模式。
2.2 中間件
數(shù)字電視機(jī)頂盒中間件(middleware)[2]是指位于數(shù)字電視機(jī)頂盒芯片驅(qū)動(dòng)程序與應(yīng)用程序之間的軟件部分。中間件標(biāo)準(zhǔn)的應(yīng)用極大地推動(dòng)數(shù)字電視機(jī)頂盒市場的發(fā)展。目前,中間件廠商主要有茁壯、NDS、愛迪德、天柏、同洲等廠商。
2.3 存在問題分析
基于中間件架構(gòu)來進(jìn)行數(shù)字電視機(jī)頂盒軟件開發(fā),是目前市場上比較通用的做法。由于應(yīng)用程序基于中間件之上,因此其可移植。系統(tǒng)集成的主要工作轉(zhuǎn)變?yōu)槿绾我浦仓虚g件到芯片廠商的平臺(tái)驅(qū)動(dòng)之上。在大量的項(xiàng)目實(shí)踐中發(fā)現(xiàn)在目前的軟件架構(gòu)下仍然存在如下問題:
(1)系統(tǒng)集成方式:每個(gè)客戶都在做著重復(fù)類似的工作。以節(jié)目直播為例,每個(gè)客戶都要建立一套自己的播放流程,并建立如下設(shè)備的之間的相互關(guān)聯(lián):Tuner,Tsrouter, Demux, ES buffer, Video Decoder, Video Img,Video Output。
(2)中間件可移植性:無法徹底屏蔽驅(qū)動(dòng)API函數(shù)的改變。由于在客戶的中間件中直接調(diào)用芯片的驅(qū)動(dòng)API函數(shù),而這些API函數(shù)常常直接與硬件模塊緊密相關(guān)。雖然芯片廠商努力保持底層API函數(shù)不要改變,但是當(dāng)芯片更新?lián)Q代或升級(jí)的時(shí)候,這些驅(qū)動(dòng)API函數(shù)常常不可避免的也隨之改變。于是,導(dǎo)致客戶的中間件也需要做出相應(yīng)的變動(dòng),并進(jìn)行重新驗(yàn)證。
(3)驅(qū)動(dòng)調(diào)用時(shí)序:無法引導(dǎo)客戶遵循芯片廠商期望的驅(qū)動(dòng)API函數(shù)調(diào)用時(shí)序。中間件的基本操作通常難以一一對(duì)應(yīng)的映射到芯片的驅(qū)動(dòng)程序上,在大多數(shù)情況下,中間件定義的一個(gè)基本操作需要調(diào)用底層驅(qū)動(dòng)的若干api函數(shù)才能完成。最重要的是,在這些底層api函數(shù)執(zhí)行的時(shí)候,常常是有時(shí)序的要求。對(duì)于芯片廠商提供的驅(qū)動(dòng)程序而言,原則上不應(yīng)該對(duì)驅(qū)動(dòng)API函數(shù)調(diào)用時(shí)序做任何的假設(shè)。
3 pipeline技術(shù)分析
隨著畫中畫,時(shí)移等新應(yīng)用的不斷出現(xiàn),通過直接調(diào)用芯片驅(qū)動(dòng)程序的方式來移植機(jī)頂盒中間件的方式,正變得越來越復(fù)雜。迫切需要在芯片驅(qū)動(dòng)程序之上,能存在一個(gè)高度抽象層,徹底屏蔽不同平臺(tái)的底層差異,簡化機(jī)頂盒資源的管理,降低設(shè)備廠商中間件集成的難度,減少在系統(tǒng)集成中遇到的問題,縮短機(jī)頂盒軟件開發(fā)周期。
關(guān)于pipeline技術(shù),本文將分硬件設(shè)計(jì)中的Pipeline技術(shù)[3][4]和軟件設(shè)計(jì)中的Pipeline模式[5]進(jìn)行描述。
3.1 硬件設(shè)計(jì)中的Pipeline技術(shù)
流水線(Pipeline)技術(shù)是目前廣泛應(yīng)用于微處理芯片(CPU)中的一項(xiàng)關(guān)鍵技術(shù)。流水線設(shè)計(jì)就是將組合邏輯系統(tǒng)地分割,并在各個(gè)部分(分級(jí))之間插入寄存器,并暫存中間數(shù)據(jù)的方法。目的是將一個(gè)大操作分解成若干的小操作,每一步小操作的時(shí)間較小,所以能提高頻率,各小操作能并行執(zhí)行,所以能提高數(shù)據(jù)吞吐率(提高處理速度)。
3.2 軟件設(shè)計(jì)中的Pipeline模式
Pipeline設(shè)計(jì)模式的理念是使多個(gè)對(duì)象處理同一個(gè)請(qǐng)求,這些對(duì)象形成一條鏈。每個(gè)對(duì)象擁有下一個(gè)對(duì)象的引用,該對(duì)象可以進(jìn)行預(yù)處理,交給下一個(gè)對(duì)象處理,然后把處理結(jié)果返回給下一對(duì)象。Pipeline像是流水線,每個(gè)對(duì)象負(fù)責(zé)一個(gè)動(dòng)作,一起協(xié)作完成一件事情。
3.2.1 序列模式(sequence)
Pipeline設(shè)計(jì)的序列模式如圖4所示。在序列模式中,首先由Pipeline控制中心創(chuàng)建整個(gè)序列中的所有模塊并建立數(shù)據(jù)的流向關(guān)系, 然后把數(shù)據(jù)輸入傳遞給第一個(gè)模塊,啟動(dòng)Pipeline開始工作。當(dāng)?shù)谝粋€(gè)模塊完成指定功能后,根據(jù)模塊序列找到下一個(gè)模塊號(hào), 并把處理過的數(shù)據(jù)傳遞給下一個(gè)模塊, 以此類推,直到最后一個(gè)模塊為止。
3.2.2 中心模式(center)
在中心模式中,每個(gè)模塊都從Pipeline控制中心接收數(shù)據(jù)輸入,然后把處理結(jié)果返回給Pipeline控制中心。由Pipeline控制中心決定調(diào)用下一個(gè)模塊,并把上一個(gè)模塊的輸出作為下一個(gè)模塊的輸入。 以此類推,直到最后一個(gè)模塊為止。
4 總結(jié)
機(jī)頂盒驅(qū)動(dòng)軟件架構(gòu)設(shè)計(jì),是一項(xiàng)涉及正確性,健壯性,可重用性,靈活性和高效性的系統(tǒng)設(shè)計(jì)工作。本文采用了pipeline架構(gòu)來完成機(jī)頂盒驅(qū)動(dòng)設(shè)計(jì),并將機(jī)頂盒驅(qū)動(dòng)設(shè)計(jì)分為流水線管理(Pipeline Manager)設(shè)計(jì),視頻輸出管理(Video Presentation Manager)設(shè)計(jì)和音頻輸出管理(Audio Presentation Manager)設(shè)計(jì)三大部分。研究了通過流水線來統(tǒng)一管理數(shù)字電視機(jī)頂盒系統(tǒng)資源,其簡化了機(jī)頂盒設(shè)備廠商系統(tǒng)集成的難度,減少了系統(tǒng)集成中所遇到的問題,縮短了數(shù)字電視機(jī)頂盒產(chǎn)品的軟件開發(fā)周期。
參考文獻(xiàn)
[1] 王大鵬,雒春雨,三網(wǎng)融合背景下機(jī)頂盒技術(shù)發(fā)展方向,2007國際有線電視技術(shù)研討會(huì),2007.
篇6
摘要:模塊化就是把人才培養(yǎng)方案,專業(yè),課程,課堂都看成模塊,世界萬物都是模塊,學(xué)生也是模塊,大模塊分成小模塊,小模塊做好了,大模塊也就做好了,《Java 程序設(shè)計(jì)》是職業(yè)學(xué)院軟件技術(shù)專業(yè)必修課,學(xué)習(xí)目前世界上優(yōu)秀的編程語言, 對(duì)提高學(xué)生就業(yè)能力有重要意義。然而,由于 Java 語言具有較高的抽象性、復(fù)雜性和嚴(yán)謹(jǐn)性,學(xué)生普遍感到學(xué)習(xí)難度較大;加之受傳統(tǒng)教學(xué)模式的制約,學(xué)生往往感覺抽象、枯燥,學(xué)習(xí)興趣不高,接受程度有限。為改變這一現(xiàn)狀,我們將項(xiàng)目任務(wù)驅(qū)動(dòng)法引入教學(xué),對(duì)課程體系進(jìn)行優(yōu)化,對(duì)實(shí)訓(xùn)內(nèi)容進(jìn)行重新設(shè)計(jì),以此激發(fā)學(xué)生學(xué)習(xí)熱情、改善教學(xué)效果、提高教學(xué)效率,從而更好地滿足職業(yè)院校培養(yǎng)實(shí)用型技能人才的要求。
關(guān)鍵詞:Java程序設(shè)計(jì);項(xiàng)目任務(wù)驅(qū)動(dòng);項(xiàng)目實(shí)訓(xùn) 。
Java 語言作為一種純面向?qū)ο蟮某绦蛟O(shè)計(jì)語言, 是目前世界上優(yōu)秀的編程語言之一, Java平臺(tái)以其移動(dòng)性、安全性和開放性受到g迎,在企業(yè)中得到廣泛應(yīng)用,尤其是近年來基于 Android 系統(tǒng)的Java 手機(jī)軟件發(fā)展十分迅速,在形成一個(gè)新興產(chǎn)業(yè)。Java 程序員的就業(yè)前景廣闊,可以從事 Java 桌面軟件開發(fā)、Java手機(jī)軟件開發(fā)、Jsp網(wǎng)站開發(fā)以及其他與 Java 語言編程相關(guān)的工作。 《Java 程序設(shè)計(jì)》作為我院軟件技術(shù)專業(yè)的專業(yè)必修課,力求使學(xué)生掌握 Java 面向?qū)ο蟪绦蛟O(shè)計(jì)能力,具備從事 Java 編程工作的基礎(chǔ),提高軟件技術(shù)專業(yè)學(xué)生的就業(yè)能力。 對(duì)《Java 程序設(shè)計(jì)》教學(xué)進(jìn)行深入改革、提高教學(xué)質(zhì)量,有利于抓住當(dāng)前 Java 技術(shù)廣泛應(yīng)用,社會(huì)對(duì) Java 程序設(shè)計(jì)人才需求量大的有利時(shí)機(jī),提高軟件技術(shù)專業(yè)學(xué)生的就業(yè)率,提升軟件技術(shù)專業(yè)的影響力。
一、《Java 程序設(shè)計(jì)》課程的教學(xué)現(xiàn)狀
(一)課程地位和特點(diǎn) 計(jì)算機(jī)軟件技術(shù)專業(yè)的培養(yǎng)目標(biāo)是:培養(yǎng)德、智、體全面發(fā)展的學(xué)生,能掌握計(jì)算機(jī)系統(tǒng)基礎(chǔ)知識(shí)和基本原理,熟悉計(jì)算機(jī)系統(tǒng)常用(軟硬件)工具,具有一定的硬件操作和較強(qiáng)的軟件開發(fā)能力。學(xué)生畢業(yè)后,既有大專層次的理論知識(shí),又具有本專業(yè)較熟悉的實(shí)際操作技能適應(yīng)在企事業(yè)單位計(jì)算機(jī)應(yīng)用一線上直接參與管理或工作;適應(yīng)在計(jì)算機(jī)軟件企業(yè)從事專業(yè)的軟件開發(fā)工作。 安排在第二學(xué)期,為培養(yǎng)學(xué)生“從 事軟件開發(fā)工作”而開設(shè)。教學(xué)目標(biāo)是讓學(xué)生掌握 Java 面向?qū)ο蟪绦蛟O(shè)計(jì)能力,具備從事 Java 編程工作的基礎(chǔ)。前導(dǎo)課程是《C語言程序設(shè)計(jì)》,掌握基本的編程能力基礎(chǔ);后續(xù)課程是《Java Web 開發(fā)技術(shù)》,學(xué)習(xí)實(shí)用的編程技術(shù)。 《Java 程序設(shè)計(jì)》是一門典型的程序設(shè)計(jì)類課程,由于程序設(shè)計(jì)本身具有的抽象性、 Java語言的復(fù)雜性和嚴(yán)謹(jǐn)性及傳統(tǒng)教學(xué)模式的影響,學(xué)生普遍感到學(xué)習(xí)難度大,學(xué)習(xí)興趣不高, 接受程度有限。
(二)難點(diǎn)和不足 由于程序設(shè)計(jì)工作本身具有的抽象性,對(duì)學(xué)生的邏輯思維能力要求較高;而 Java 語言的復(fù)雜性和嚴(yán)謹(jǐn)性,又使學(xué)生普遍感到 Java 語言學(xué)習(xí)難度大;加之傳統(tǒng)教學(xué)采用的“先講解后演示再練習(xí)”的方法,往往讓學(xué)生感覺到過于枯燥和抽象;而當(dāng)前《Java 程序設(shè)計(jì)》的課程體系更使之難以適應(yīng)高職院校培養(yǎng)高技能人才的要求,其主要問題有: 1. 課程體系設(shè)計(jì)不合理。當(dāng)前《Java 程序設(shè)計(jì)》的授課模式以理論講授和演示為主,理論內(nèi)容占主導(dǎo)地位,而實(shí)訓(xùn)環(huán)節(jié)處于從屬地位。 由于當(dāng)前的《Java 程序設(shè)計(jì)》高職課程體系很大程度上仍然是本科課程體系的簡化版,是從本科課程體系中刪除較難理論內(nèi)容并增加實(shí)踐內(nèi)容而形成的,并沒有完全擺脫本科模式的影響。然而,高職教育的培養(yǎng)目標(biāo)是不同的。 高職教育更強(qiáng)調(diào)培養(yǎng)熟練的動(dòng)手實(shí)踐能力。因此,高職課程和本科課程在課程體系的設(shè)計(jì)應(yīng)該是完全不同的,不僅僅是理論與實(shí)踐的比例問題,而應(yīng)該重新設(shè)計(jì)課程體系,使理論內(nèi)容為實(shí)踐內(nèi)容服務(wù),才能真正實(shí)現(xiàn)以培養(yǎng)動(dòng)手實(shí)踐能力為主導(dǎo)。 2. 實(shí)訓(xùn)內(nèi)容設(shè)計(jì)不合理。當(dāng)前《Java 程序設(shè)計(jì)》的實(shí)訓(xùn)內(nèi)容大多屬于驗(yàn)證性實(shí)訓(xùn),與真實(shí)開發(fā)項(xiàng)目存在很大差距,學(xué)生難以適應(yīng)實(shí)戰(zhàn)項(xiàng)目實(shí)踐,對(duì)培養(yǎng)崗位職業(yè)能力的作用非常有限。課程現(xiàn)有實(shí)訓(xùn)內(nèi)容是根據(jù)理論內(nèi)容設(shè)計(jì)的,是為了驗(yàn)證理論內(nèi)容而實(shí)踐,從而導(dǎo)致實(shí)訓(xùn)內(nèi)容強(qiáng)調(diào)緊扣理論內(nèi)容,而忽略了真實(shí)的崗位情境,造成實(shí)訓(xùn)情境過分理想化。這樣即使學(xué)生能掌握一些實(shí)踐技能,但是這些技能在真實(shí)的崗位情境中卻難以應(yīng)用。因此,必須設(shè)計(jì)好實(shí)訓(xùn)內(nèi)容,突出 Java 語言的實(shí)用性、針對(duì)性,才能引導(dǎo)學(xué)生“在做中學(xué)”。 針對(duì)上述問題,我們引入項(xiàng)目任務(wù)驅(qū)動(dòng)式教學(xué)法,對(duì)《Java 程序設(shè)計(jì)》課程教學(xué)進(jìn)行改革。
二、《Java 程序設(shè)計(jì)》課程的項(xiàng)目任務(wù)驅(qū)動(dòng)式教學(xué)改革
(一) 項(xiàng)目驅(qū)動(dòng)是一種教學(xué)理論基礎(chǔ)上的教學(xué)法
在教學(xué)過程中,把具體的、學(xué)生感興趣的、有意義的具體任務(wù)作為線索,將知識(shí)點(diǎn)巧妙地隱含在每個(gè)任務(wù)之中;學(xué)生在預(yù)定情境下,經(jīng)過思考并借助教師的引導(dǎo)解決問題,通過自主建構(gòu)的方式獲得知識(shí)、 培養(yǎng)職業(yè)能力。 與傳統(tǒng)教學(xué) “教師講、學(xué)生聽”,教師處于主動(dòng)傳輸知識(shí)的地位,學(xué)生處于被動(dòng)接受知識(shí)的 地位的模式相比,項(xiàng)目驅(qū)動(dòng)法強(qiáng)調(diào)的是 “以學(xué)生為主體、以教師為主導(dǎo)、以任務(wù)為主線”。在 任務(wù)驅(qū)動(dòng)法教學(xué)過程中,學(xué)生能充分發(fā)揮主觀能動(dòng)性,圍繞任務(wù)要求開展實(shí)踐探索,教師不再是課堂的中心,單方面地向?qū)W生灌輸知識(shí),而是在學(xué)生完成任務(wù)的過程中起到組織、引導(dǎo)、督促、 協(xié)助、評(píng)價(jià)的作用。采用這種教學(xué)方法,可以解決傳統(tǒng)教學(xué)存在的無法充分調(diào)動(dòng)學(xué)生的積極性和創(chuàng)造性,項(xiàng)目驅(qū)動(dòng)式教學(xué)改革符合高職教育發(fā)展方向,符合國家教育部《關(guān)于全面提高高等職業(yè)教育教學(xué)質(zhì)量的若干意見》 提出的高職教育的教學(xué)過程要突出實(shí)踐性和職業(yè)性的要求。
(二)《Java 程序設(shè)計(jì)》課程的項(xiàng)目驅(qū)動(dòng)式教學(xué)
1. 概述
為了更好地實(shí)施教學(xué),切合高職教育人才培養(yǎng)的要求,培養(yǎng)適應(yīng)行業(yè)需求的程序設(shè)計(jì)人才, 我們?cè)凇禞ava 程序設(shè)計(jì)》課程中引入任務(wù)驅(qū)動(dòng)教學(xué)法,以行業(yè)流行的my Eclipse 作為開發(fā)平臺(tái),對(duì) 《Java 程序設(shè)計(jì)》課程教學(xué)進(jìn)行改革。我們緊扣 教學(xué)大綱,重新梳理《Java 程序設(shè)計(jì)》課程的知識(shí)體系,設(shè)計(jì)一系列具有實(shí)用性和趣味性的任務(wù)案例,并將所有知識(shí)點(diǎn)融入到各項(xiàng)目案例中。建立一套任務(wù)驅(qū)動(dòng)式課程體系。我們以培養(yǎng)崗位職業(yè)能力為主線,用典型任務(wù)序化知識(shí),并將知識(shí)融入任務(wù)情景之中。按“教師提出任務(wù)->學(xué)生分析任務(wù)->學(xué)生解決任務(wù)->學(xué)生提交任務(wù)完成報(bào)告->學(xué)生相互評(píng)價(jià)->教師總結(jié)與評(píng)價(jià)”的結(jié)構(gòu)組 織每一個(gè)任務(wù)。任務(wù)驅(qū)動(dòng)的整個(gè)流程按照實(shí)際需要進(jìn)行安排,如果不能在一個(gè)教學(xué)時(shí)間單元中完成整個(gè)流程,則可以分段進(jìn)行,比如把學(xué)生解決任務(wù)這個(gè)模塊放到課余時(shí)間進(jìn)行,讓學(xué)生自主學(xué)習(xí)與挖掘新知識(shí),加深對(duì)知識(shí)的理解。
2. 課程體系的優(yōu)化設(shè)計(jì)
《Java 程序設(shè)計(jì)》課程的內(nèi)容由三大部分構(gòu) 成:Java 基本語法、Java 面向?qū)ο髾C(jī)制、應(yīng)用編程。其中 Java 面向?qū)ο髾C(jī)制部分具有較強(qiáng)的理論性和抽象性,應(yīng)用編程部分則更多偏向?qū)嵺`性。 由于該課程的知識(shí)點(diǎn)覆蓋面廣,內(nèi)容之間聯(lián)系緊密、互相滲透,我們根據(jù)教學(xué)目標(biāo)重新梳理知識(shí)點(diǎn)之間的聯(lián)系,按照任務(wù)驅(qū)動(dòng)的模式將知識(shí)體系劃分為 14 個(gè)模塊,每個(gè)模塊又包括三個(gè)小任務(wù)即啟發(fā)式模塊、知識(shí)點(diǎn)任務(wù)和實(shí)踐鞏固任務(wù),14 個(gè)大的模塊如下所示: (1)Java 開發(fā)環(huán)境的搭建和使用。Java 特 點(diǎn);Java 實(shí)現(xiàn)機(jī)制;Java 的體系結(jié)構(gòu);集成環(huán)境 myEclipse 。 (2)Java 基本語法。Java 應(yīng)用程序結(jié)構(gòu); Java 程序編寫及運(yùn)行過程。Java 語言標(biāo)識(shí)符和關(guān)鍵字;Java 語言數(shù)據(jù)類型;Java 語言運(yùn)算符與表 達(dá)式;分支控制結(jié)構(gòu);循環(huán)控制結(jié)構(gòu) (3)類和對(duì)象。類與對(duì)象概念與特征、屬性和方法;類與對(duì)象的關(guān)系;定義類的語法;創(chuàng) 建類的對(duì)象;使用對(duì)象的步驟;類的方法組成部 分;定義和使用類的方法。變量作用域;定義包和導(dǎo)入包的關(guān)鍵字;Javadoc 注釋。 (4)封裝和重載。封裝的作用;對(duì)屬性封裝;用構(gòu)造方法實(shí)現(xiàn)對(duì)象成員的初始化。方法重載;Java 中的構(gòu)造方法與實(shí)例方法區(qū)別;對(duì)構(gòu)造方法進(jìn)行重載。 (5)繼承和多態(tài)。繼承的概念;繼承關(guān)鍵 字;父類與子類之間的關(guān)系,super 關(guān)鍵字。多態(tài) 的概念;靜態(tài)多態(tài),動(dòng)態(tài)多態(tài);多態(tài)的實(shí)現(xiàn)。 終類和抽象類。 (6)接口。接口的概念,接口編程的實(shí) 現(xiàn); (7)數(shù)組。聲明和創(chuàng)建數(shù)組;數(shù)組的初始化;數(shù)組元素的使用。 (8)字符串。定義、初始化字符串;字符 串常見操作及方法;StringBuffer 類的定義和方 法。 (9)異常處理。異常的概念;異常處理結(jié) 構(gòu);拋出異常;聲明異常;自定義異常。 (10)GUI 編程。Java GUI 界面的基本原 理;常用的 AWT 和 Swing 組件;布局管理器;菜 單;Java 事件組成;委托事件處理機(jī)制;常用事件類; (11)數(shù)據(jù)庫編程。JDBC 的概念;JDBC 框 架結(jié)構(gòu);JDBC 驅(qū)動(dòng)程序 JDBC 驅(qū)動(dòng)程序編程的基本步驟。 (12)文件 I/O 編程。Java 的文件管理; Java 目錄管理;文件的創(chuàng)建;文件類的方法;順序文本文件;流的操作步驟;隨機(jī)文本文件;文件的追加。 (13)多線程編程。Thread 類;Calendar 類;SimpleDateFormat 類;線程的狀態(tài);線程的優(yōu)先級(jí);線程的通信。 (14)網(wǎng)絡(luò)編程。TCP/IP 協(xié)議;Socket 類; ServerSocket 類;UDP 協(xié)議;發(fā)送數(shù)據(jù)包;接收數(shù)據(jù)包。 本文提出的課程體系將教學(xué)重點(diǎn)放在實(shí)踐 較強(qiáng)的應(yīng)用編程部分,涵蓋了GUI 編程、數(shù)據(jù)庫編程、文件 I/O 編程、多線程編程、網(wǎng)絡(luò)編程等 技術(shù),而對(duì)理論性、抽象性較強(qiáng)的 Java 面向?qū)ο髾C(jī)制,不再深入分析其內(nèi)在機(jī)理,只要求學(xué)生掌握基本的概念、原理和語法,為后面的應(yīng)用編程提供基礎(chǔ)。
3. 實(shí)訓(xùn)內(nèi)容的優(yōu)化設(shè)計(jì)
Java 程序設(shè)計(jì)具有很強(qiáng)的實(shí)踐性,但其理論知識(shí)卻很抽象,學(xué)生僅理解理論知識(shí)點(diǎn)是遠(yuǎn)遠(yuǎn)不 夠的。傳統(tǒng)的“先講解理論知識(shí)點(diǎn),再展示演示案例幫助學(xué)生理解,后再進(jìn)行實(shí)踐練習(xí)”的做法是以教師為主導(dǎo),學(xué)生被動(dòng)學(xué)習(xí)的灌輸式教學(xué)法,這樣導(dǎo)致學(xué)生學(xué)習(xí)興趣不高、接受程度有限,導(dǎo)致演示案例和實(shí)踐練習(xí)的效果大打折扣。 對(duì)此我們重新設(shè)計(jì)教學(xué)流程,摒棄這種以教師為主導(dǎo)的做法,突出學(xué)生在學(xué)習(xí)中的中心地位。首先在每個(gè)單元中精心設(shè)計(jì)一個(gè)有趣、具有啟發(fā)性的演示案例,先讓學(xué)生看到程序運(yùn)行效果,激發(fā)其學(xué)習(xí)興趣和積極性;然后從案例中引出該知識(shí)點(diǎn)的任務(wù),讓學(xué)生分組討論該任務(wù),分析該任 如何完成;接著限定任務(wù)的完成時(shí)間,讓學(xué)生在該時(shí)間內(nèi)完成任務(wù)并提交任務(wù)完成報(bào)告,在任務(wù)完成后學(xué)生們要進(jìn)行小組互評(píng);后教師再根據(jù)學(xué)生完成任 務(wù)的情況進(jìn)行總結(jié)和評(píng)價(jià),包括對(duì)學(xué)生任務(wù)完成 程度的評(píng)價(jià),對(duì)任務(wù)背后的知識(shí)點(diǎn)的解釋,對(duì)學(xué)生還沒熟悉的重難點(diǎn)進(jìn)行總結(jié)。至此,學(xué)生通過完成任務(wù),不但對(duì)相關(guān)知識(shí)點(diǎn)有了一定感性認(rèn)識(shí),而且通過任務(wù)評(píng)價(jià)和總結(jié),能夠更好地理解和消化理論,提升為自己的理性認(rèn)識(shí);后根據(jù)需要再設(shè)計(jì) 1-2 個(gè)案例作為實(shí)訓(xùn)練習(xí),由淺入深、由簡單到復(fù)雜地鞏固知識(shí)點(diǎn)和技能。很明顯,這是一種 “從實(shí)踐到理論,再從理論到實(shí)踐”的做法,符合人類認(rèn)識(shí)客觀世界的規(guī)律。由于該任務(wù)貼近學(xué)生學(xué)習(xí)的真實(shí)情境,學(xué)生感到親切、容易理解其次,由啟發(fā)式案例提出本節(jié)要完成的任務(wù)。這里任務(wù)比啟發(fā)式案例要求稍高,有利于在學(xué)生現(xiàn)有的基礎(chǔ)上挖掘自己的潛力,更深的理解知識(shí)。學(xué)生在接到任務(wù)后當(dāng)堂討論并分工,這樣有利于培養(yǎng)他們的團(tuán)隊(duì)合作精神,學(xué)生完成任務(wù)的過程可以放在課后進(jìn)行。在任務(wù)完成后需保留源代碼,對(duì)程序運(yùn)行結(jié)果保留截圖并用 ppt 演示任務(wù)完成流程和填寫任務(wù)完成情況表;回到課堂上后學(xué)生將任務(wù)結(jié)果進(jìn)行展示并對(duì)其他小組評(píng)分,教師進(jìn)行評(píng)價(jià)并補(bǔ)充講解重難點(diǎn),包括程序結(jié)構(gòu)、定義變量、數(shù)據(jù)類型、運(yùn)算符和表達(dá) 式、分支控制結(jié)構(gòu)、循環(huán)控制結(jié)構(gòu)等。教師對(duì)知識(shí)點(diǎn)和關(guān)鍵技術(shù)步驟進(jìn)行總結(jié),對(duì)實(shí)踐練習(xí)中出 現(xiàn)的問題進(jìn)行分析,可以幫助學(xué)生構(gòu)建一個(gè) 晰、完整的知識(shí)結(jié)構(gòu)后,進(jìn)行實(shí)踐鞏固練習(xí)。,以任務(wù)為驅(qū)動(dòng),教師只是起到引導(dǎo)的作 用,這樣學(xué)生掌握的知識(shí)才是真正屬于自己的知識(shí)。
三、結(jié)語
如上所述,項(xiàng)目任務(wù)驅(qū)動(dòng)式教學(xué)的關(guān)鍵是合理設(shè)計(jì)項(xiàng)目任務(wù),將知識(shí)點(diǎn)巧妙地隱藏到任務(wù)中,讓任務(wù)本身具有趣味性并盡可能地貼近真實(shí)情境,使學(xué)生在完成任務(wù)的過程中不僅獲取相關(guān)知識(shí),而且發(fā)展實(shí)踐能力。理論知識(shí)點(diǎn)不再是案例的主導(dǎo), 而是作為演示案例的抽象推廣。實(shí)踐證明,對(duì)于《Java 程序設(shè)計(jì)》這門理論性和實(shí)踐性都很強(qiáng)的課程,通過引入項(xiàng)目任務(wù)驅(qū)動(dòng)教學(xué)法,進(jìn)行項(xiàng)目實(shí)訓(xùn),使理論和實(shí)踐互相滲透,確實(shí)能夠,激發(fā)學(xué)生的學(xué)習(xí)熱情,改善教學(xué)效果,提高學(xué)生的動(dòng)手實(shí)踐能力,能更好地滿足高職院校培養(yǎng)實(shí)用型技能人才的要求。
參考文獻(xiàn):
篇7
一、兩種任務(wù)驅(qū)動(dòng)教學(xué)方式定義
1、正向任務(wù)驅(qū)動(dòng)
(1)對(duì)應(yīng)學(xué)生學(xué)習(xí)階段:初級(jí)階段---認(rèn)知程序。
(2)任務(wù)驅(qū)動(dòng)方式:根據(jù)任務(wù)編寫程序,運(yùn)行程序,得出結(jié)果。
(3)任務(wù)驅(qū)動(dòng)目標(biāo):已知程序清單,完成程序運(yùn)行結(jié)果,并對(duì)結(jié)果進(jìn)行分析。
2、逆向任務(wù)驅(qū)動(dòng)
(1)τρ生學(xué)習(xí)階段:中級(jí)階段---剖析程序
(2)任務(wù)驅(qū)動(dòng)方式:根據(jù)結(jié)果完成程序填空,運(yùn)行程序,得出結(jié)果。
(3)任務(wù)驅(qū)動(dòng)目標(biāo):已知程序結(jié)果,完成程序填空,并對(duì)運(yùn)行結(jié)果進(jìn)行驗(yàn)證。
二、正向任務(wù)驅(qū)動(dòng)式
正向任務(wù)驅(qū)動(dòng)式是在任務(wù)和程序已知的情況下,只需運(yùn)行程序,得出結(jié)果,再對(duì)結(jié)果進(jìn)行分析來完成任務(wù)。其任務(wù)形式是”任務(wù)->程序->?”,需要完成結(jié)果,故稱為正向任務(wù)驅(qū)動(dòng)。
教學(xué)一例:
1、提出任務(wù):(1)求5!的值。(2)問s設(shè)定為什么類型的數(shù)據(jù)變量可以容納積值?
要求:通過程序運(yùn)行和結(jié)果分析,實(shí)現(xiàn)對(duì)程序的理解和對(duì)知識(shí)點(diǎ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); }
要求:通過運(yùn)行程序,記錄結(jié)果,達(dá)到看懂程序。
3、收集學(xué)生對(duì)求5!任務(wù)解決的方法及結(jié)果分析。
方法一:輸出結(jié)果:s=120
方法二:輸出結(jié)果:s=120.000000
兩種方法運(yùn)行結(jié)果一致。
同學(xué)們得出:s變量設(shè)定為int和float類型時(shí)都可以容納正確積值。
要求:在對(duì)結(jié)果分析后,學(xué)生應(yīng)該掌握數(shù)據(jù)變量與容納數(shù)據(jù)大小之間的關(guān)系。
4、任務(wù)驅(qū)動(dòng)反思:”任務(wù)->程序->?”的任務(wù)驅(qū)動(dòng)形式難度系數(shù)小,多用于知識(shí)入門階段。任務(wù)通過結(jié)果對(duì)比完成。在新知識(shí)入門階段學(xué)習(xí)中,有利于同學(xué)們熟悉程序,掌握知識(shí)點(diǎn)。同時(shí)可以提高學(xué)生學(xué)習(xí)興趣,樹立學(xué)習(xí)自信心。
要求:教師應(yīng)歸納知識(shí)要點(diǎn)。
三、逆向任務(wù)驅(qū)動(dòng)式
逆向任務(wù)驅(qū)動(dòng)式是在任務(wù)和結(jié)果已知的情況下,需要補(bǔ)寫程序,運(yùn)行程序,再對(duì)結(jié)果進(jìn)行驗(yàn)證來完成任務(wù)。其任務(wù)形式是”任務(wù)->?->結(jié)果”,需要完成填空,故稱為逆向任務(wù)驅(qū)動(dòng)。
教學(xué)一例:
1、提出任務(wù):求1+2+ … +99+100的值。(1)對(duì)程序填空(共2空);(2)運(yùn)行程序,記錄結(jié)果,并驗(yàn)證結(jié)果。
要求:通過程序補(bǔ)寫和結(jié)果驗(yàn)證,實(shí)現(xiàn)掌握循環(huán)控制語句的使用方法。
2、給出條件:部分程序和輸出結(jié)果已給出。
#include
main( )
{ int i=1,sum=__⑴_(tái)_;
while(i
{ sum=sum+i; __⑵__ ; }
printf("sum=%d\n",sum); }
給出結(jié)果:sum=5050
要求:重點(diǎn)掌握循環(huán)控制變量i的初值、終值和步長值設(shè)定,以及用于累加和變量的初值清零工作。
3、收集學(xué)生對(duì)任務(wù)解決的方法及結(jié)果分析。
方法一填空:(1)0 (2)i=i+1
程序運(yùn)行結(jié)果:sum=5050(程序運(yùn)行結(jié)果和給出結(jié)果一致)
結(jié)論:這部份同學(xué)認(rèn)識(shí)到,變量sum用于存放累加值,初值應(yīng)清零。
因此:⑴空填0;而數(shù)列每項(xiàng)值是加1遞增,因此:⑵空填i=i+1。
方法二填空:(1)1 (2)i=i+1
程序運(yùn)行結(jié)果:sum=5051(程序運(yùn)行結(jié)果和給出結(jié)果不一致,計(jì)算結(jié)果錯(cuò)誤。)
結(jié)論:少數(shù)同學(xué)忽視了變量sum初值應(yīng)該清零。
因此:⑴空填1 ;而數(shù)列每項(xiàng)值是加1遞增,因此:⑵空填i=i+1。
要求:在完成程序填空后,學(xué)生應(yīng)該掌握循環(huán)控制變量初值、終值、步長值的設(shè)定方法。
4、任務(wù)驅(qū)動(dòng)反思:”任務(wù)->?->結(jié)果”的任務(wù)驅(qū)動(dòng)形式難度系數(shù)中,多用于知識(shí)鞏固階段。任務(wù)通過程序填空和結(jié)果驗(yàn)證實(shí)現(xiàn)。
要求:教師應(yīng)歸納知識(shí)要點(diǎn)。循環(huán)控制變量三要素(初值、終值、步長值)的設(shè)定是完成任務(wù)的重要前提。
篇8
關(guān)鍵詞 任務(wù)驅(qū)動(dòng) 任務(wù)驅(qū)動(dòng)教學(xué)法 網(wǎng)絡(luò)程序設(shè)計(jì)
中圖分類號(hào):G424 文獻(xiàn)標(biāo)識(shí)碼: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ū)動(dòng)教學(xué)法是指在課程教學(xué)的過程中,學(xué)生在教師的引導(dǎo)下,緊緊圍繞一個(gè)或多個(gè)特定的教學(xué)目標(biāo),在教學(xué)任務(wù)的驅(qū)動(dòng)下,通過對(duì)現(xiàn)有知識(shí)技能和學(xué)科理論的主動(dòng)應(yīng)用,共同進(jìn)行自主探索的互學(xué)習(xí)。任務(wù)驅(qū)動(dòng)教學(xué)法要求教學(xué)任務(wù)具有非常強(qiáng)的目標(biāo)性,要刻意營造教學(xué)情境,創(chuàng)設(shè)情景使整個(gè)教學(xué)工作在真實(shí)的任務(wù)驅(qū)動(dòng)下進(jìn)行。在整個(gè)教學(xué)過程中,教師處于中心地位,教師在安排布置學(xué)生完成教學(xué)任務(wù)時(shí),以引導(dǎo)或演示的方式,啟發(fā)學(xué)生給出完成該任務(wù)的思路、方法和結(jié)果。在教師安排下,學(xué)生花大量的時(shí)間自主完成自己的學(xué)習(xí)任務(wù),在學(xué)生自己動(dòng)腦、動(dòng)手完成任務(wù),從而學(xué)習(xí)和掌握相關(guān)的知識(shí)與技能。
任務(wù)驅(qū)動(dòng)教學(xué)法是知識(shí)及技能的獲取以任務(wù)為中心,著重培養(yǎng)學(xué)生分析問題、解決問題、創(chuàng)新問題的綜合能力。它以某一具體任務(wù)為出發(fā)點(diǎn),通過課堂引導(dǎo)、操作實(shí)踐、評(píng)價(jià)反饋等方法來完成不同階段的任務(wù),從而達(dá)到培養(yǎng)學(xué)生主動(dòng)獲取知識(shí)、應(yīng)用技能等綜合能力。
1 任務(wù)驅(qū)動(dòng)教學(xué)法的可行性
1.1 網(wǎng)絡(luò)程序設(shè)計(jì)的課程特點(diǎn)
網(wǎng)絡(luò)程序設(shè)計(jì)課程是一門實(shí)踐性、綜合性都較強(qiáng)的課程。該課程主要是以網(wǎng)絡(luò)程序原理及設(shè)計(jì)思想為主線,學(xué)習(xí)網(wǎng)絡(luò)程序設(shè)計(jì)與編寫的方法,從而進(jìn)一步學(xué)習(xí)分析問題、解決問題的方法,而不是單一學(xué)習(xí)任何一種特定語言的語法規(guī)則,因此在教學(xué)中非常注重學(xué)生解決問題的編程技能和程序研發(fā)能力的培養(yǎng)。其次,作為大學(xué)高年級(jí)專業(yè)課程,學(xué)生作為學(xué)習(xí)主體存在較大的群體差異,他們的認(rèn)知水平、專業(yè)基礎(chǔ)知識(shí)、程序研發(fā)能力參差不齊。如果以統(tǒng)一的教學(xué)方法來教學(xué),則難以取得很好的教學(xué)效果。
1.2 任務(wù)驅(qū)動(dòng)教學(xué)法的可行性
網(wǎng)絡(luò)程序設(shè)計(jì)的教學(xué)知識(shí)點(diǎn)很多,教學(xué)內(nèi)容通常可以歸納為三類:第一類是基礎(chǔ)語法類,強(qiáng)調(diào)網(wǎng)絡(luò)程序語法知識(shí)與規(guī)則的學(xué)習(xí),使學(xué)生掌握最基本的程序語法和程序設(shè)計(jì)思想; 第二類是覆蓋類,這類知識(shí)的學(xué)習(xí)能使學(xué)生的網(wǎng)絡(luò)知識(shí)體系更加全面,這部分內(nèi)容傾向于全面性的專業(yè)知識(shí)的應(yīng)用;第三類是綜合項(xiàng)目類,此部分的教學(xué)內(nèi)容更加注重網(wǎng)絡(luò)程序設(shè)計(jì)中綜合研發(fā)能力的培養(yǎng)。通用的教學(xué)模式是按基礎(chǔ)類、覆蓋類、綜合項(xiàng)目類的順序?qū)嵤┙虒W(xué),這種方法實(shí)施簡單、層次性強(qiáng)。
任務(wù)驅(qū)動(dòng)教學(xué)法旨在培養(yǎng)學(xué)生運(yùn)用及提升技術(shù)知識(shí)水平的能力,培養(yǎng)學(xué)生積極探索新知識(shí)的能力。任務(wù)驅(qū)動(dòng)教學(xué)法改變了通用的教學(xué)模式,從綜合項(xiàng)目類入手,設(shè)計(jì)不同的任務(wù),在任務(wù)的驅(qū)使下完成基礎(chǔ)類、覆蓋類的教學(xué)內(nèi)容的學(xué)習(xí)。這種方法促使師生共同參與到日常課程教學(xué)中,在完成課程任務(wù)實(shí)踐的過程中,部分學(xué)生會(huì)遇到暫時(shí)難以解決的問題,為了完成任務(wù)學(xué)生會(huì)自發(fā)討論交流、查詢資料,協(xié)作完成任務(wù),這樣做的結(jié)果會(huì)使課堂教學(xué)變得氣氛活躍而且生動(dòng)深入。教師把課堂教學(xué)的重點(diǎn)和難點(diǎn)都落實(shí)到了解決課程任務(wù)過程中發(fā)現(xiàn)的難題,通過交流展示等反饋機(jī)制及時(shí)了解學(xué)生的學(xué)習(xí)狀況,更好地幫助教學(xué)引導(dǎo)學(xué)生達(dá)到預(yù)定的教學(xué)效果。任務(wù)驅(qū)動(dòng)教學(xué)法是理論教學(xué)理論和實(shí)踐教學(xué)理論的高效運(yùn)用,非常適用于網(wǎng)絡(luò)程序設(shè)計(jì)類的教學(xué)中。
2 任務(wù)驅(qū)動(dòng)教學(xué)法的實(shí)施
2.1 任務(wù)設(shè)計(jì)的原則
任務(wù)驅(qū)動(dòng)教學(xué)法以任務(wù)為中心,任務(wù)的焦點(diǎn)是解決某一現(xiàn)實(shí)問題,激發(fā)學(xué)生積極參與欲望的問題。讓學(xué)生在完成教師所設(shè)計(jì)的各種任務(wù)同時(shí),能夠不斷地增強(qiáng)知識(shí)應(yīng)用技能。因此在設(shè)計(jì)任務(wù)的時(shí)候應(yīng)遵循以下幾個(gè)原則:
(1)整體性原則。各階段的任務(wù)要能夠涵蓋教學(xué)內(nèi)容的絕大多數(shù)知識(shí)點(diǎn)。任務(wù)的知識(shí)點(diǎn)要能形成一個(gè)有層次的整體,讓學(xué)生在不斷完成任務(wù)的過程中獲得網(wǎng)絡(luò)程序設(shè)計(jì)知識(shí)和技能。
(2)實(shí)用性原則。要使學(xué)生通過完成任務(wù)將得到有價(jià)值的結(jié)果,具有較強(qiáng)的實(shí)用性,激發(fā)學(xué)生的創(chuàng)作潛能。
(3)開放性原則。任務(wù)設(shè)置的難易程度要適中,還要在任務(wù)中為學(xué)生留出創(chuàng)造性能力發(fā)揮的空間。
(4)可操作性原則。任務(wù)應(yīng)該是可操作的,在現(xiàn)有的能力水平下能夠完成,要充分考慮到學(xué)生已具備的知識(shí)與技能。
(5)真實(shí)性。任務(wù)的設(shè)計(jì)要貼近學(xué)生的日常生活實(shí)踐和現(xiàn)實(shí)需要,這樣不僅有利于教師對(duì)任務(wù)的表達(dá),而且有利于學(xué)生對(duì)任務(wù)的精準(zhǔn)把握。
2.2 任務(wù)驅(qū)動(dòng)教學(xué)法在教學(xué)中的實(shí)施
此教學(xué)法的實(shí)施可分成:創(chuàng)設(shè)情境,精心設(shè)計(jì)任務(wù);引導(dǎo)學(xué)生進(jìn)行任務(wù)分析;學(xué)生自主探究;展示交流;及時(shí)評(píng)價(jià)與總結(jié)共五個(gè)步驟。
(1)創(chuàng)設(shè)情境,精心設(shè)計(jì)任務(wù)。實(shí)施任務(wù)驅(qū)動(dòng)教學(xué)法要營造真實(shí)、有現(xiàn)實(shí)意義的情境,引起學(xué)生的學(xué)習(xí)興趣。學(xué)生的求知欲望是建立在濃厚的興趣和豐富的情感基礎(chǔ)上的,所以要調(diào)動(dòng)學(xué)生的學(xué)習(xí)積極性,先要喚起他們的學(xué)習(xí)興趣,引導(dǎo)他們進(jìn)入設(shè)定的學(xué)習(xí)情境。
任務(wù)是任務(wù)驅(qū)動(dòng)教學(xué)法的核心,它直接決定教學(xué)目標(biāo)完成的好壞。因此,教師在實(shí)施任務(wù)驅(qū)動(dòng)教學(xué)各階段目標(biāo)時(shí),要精心分析教學(xué)目標(biāo),仔細(xì)分解或組合每個(gè)教學(xué)內(nèi)容,盡量為學(xué)生設(shè)計(jì)出具有代表意義的且可操作的任務(wù),盡可能覆蓋每個(gè)知識(shí)點(diǎn)。
(2)引導(dǎo)學(xué)生進(jìn)行任務(wù)分析。如果精心設(shè)計(jì)的課程任務(wù)來自學(xué)生的興趣或現(xiàn)實(shí)生活需求,學(xué)生會(huì)非常感興趣。教師應(yīng)從學(xué)生的各種需求出發(fā),設(shè)計(jì)出合適的教學(xué)任務(wù),才有利于學(xué)生主動(dòng)學(xué)習(xí),才能突破教學(xué)重點(diǎn)難點(diǎn)。在學(xué)生躍躍欲試積極思考的時(shí)候,教師不要急于提供方法或提出解決方案,要恰當(dāng)?shù)匾龑?dǎo)學(xué)生對(duì)任務(wù)進(jìn)行分析、討論,將大的任務(wù)分解為一個(gè)個(gè)的更小級(jí)別的任務(wù),步步為營,逐步推進(jìn),最終達(dá)到預(yù)定的教學(xué)目標(biāo)。
(3)學(xué)生自主探究。這是任務(wù)驅(qū)動(dòng)教學(xué)中的重點(diǎn)內(nèi)容。經(jīng)過教師課堂上的分析引導(dǎo),學(xué)生了解了每一個(gè)任務(wù)中應(yīng)解決的關(guān)鍵問題和涉及的核心技術(shù),也都能獲得各自不同的理解和技術(shù)方案。對(duì)于解決問題中的疑難點(diǎn),也正是教師在教學(xué)設(shè)計(jì)時(shí)隱含在各個(gè)任務(wù)中的知識(shí)點(diǎn),在下次課堂教學(xué)時(shí)教師可以將此作為典型問題引導(dǎo)學(xué)生解決。在學(xué)生完成任務(wù)的過程中,教師要?jiǎng)?chuàng)造一個(gè)良好的交流平臺(tái),能夠?qū)崟r(shí)幫助學(xué)生進(jìn)行自主學(xué)習(xí),及時(shí)解決學(xué)生遇到的疑問、降低學(xué)習(xí)難度。
(4)展示交流。學(xué)生各自完成作教師布置的任務(wù)后,通過自評(píng)自說的方式在課堂進(jìn)行交流展示,各小組相互欣賞完成后的成果,進(jìn)行互評(píng);還可以通過提問的方式進(jìn)行互相交流,咨詢對(duì)方完成任務(wù)中好的實(shí)現(xiàn)方法和步驟。
(5)及時(shí)評(píng)價(jià)與總結(jié)。教師要適當(dāng)?shù)貙?duì)學(xué)生的學(xué)習(xí)情況進(jìn)行總結(jié)和評(píng)價(jià),課時(shí)允許的話還可以進(jìn)行自評(píng)和互評(píng)。恰當(dāng)及時(shí)的評(píng)價(jià)能充分肯定他們的成果,調(diào)動(dòng)他們的積極性,增強(qiáng)自信心。通過評(píng)價(jià)時(shí)的互相交流討論,既培養(yǎng)學(xué)生的創(chuàng)新意識(shí)和團(tuán)隊(duì)精神,又培養(yǎng)了善于分析和接受他人建議的良好品質(zhì),還能體會(huì)到學(xué)以致用的快樂。
評(píng)價(jià)在任務(wù)驅(qū)動(dòng)教學(xué)法的實(shí)施過程中是非常重要的環(huán)節(jié),評(píng)價(jià)能夠使從技術(shù)技能等方面給予學(xué)生啟示,又能從師生的討論和評(píng)價(jià)中多角度地看到自己的不足,把原理性知識(shí)與操作性技能固化為個(gè)人的程序研發(fā)能力,快速提升網(wǎng)絡(luò)編程綜合能力。
3 使用任務(wù)驅(qū)動(dòng)法教學(xué)要注意的問題
(1)分解的任務(wù)必須有實(shí)用價(jià)值。分解的任務(wù)要與學(xué)生生活緊密聯(lián)系起來,最好是學(xué)生樂意解決的任務(wù),這樣才能更好地激發(fā)學(xué)生的學(xué)習(xí)熱情。實(shí)施時(shí)適當(dāng)引用項(xiàng)目教學(xué)法進(jìn)行輔助教學(xué),教師可以獨(dú)立研發(fā)本課程相關(guān)項(xiàng)目并分解成小項(xiàng)目,把其中一些小項(xiàng)目作為課程案例進(jìn)行課堂討論,以項(xiàng)目經(jīng)理的角度指導(dǎo)學(xué)生如何完成任務(wù),而將另外一些小項(xiàng)目作為課程任務(wù)布置給學(xué)生。
(2)應(yīng)遵循循序漸進(jìn)原則,教師要注意及時(shí)指導(dǎo)。任務(wù)驅(qū)動(dòng)教學(xué)法能驅(qū)動(dòng)學(xué)生從被動(dòng)學(xué)習(xí)者變?yōu)樽灾鲗W(xué)習(xí)者,從而使學(xué)生能在學(xué)習(xí)知識(shí)技能的同時(shí)也提高自主學(xué)習(xí)的能力。任務(wù)驅(qū)動(dòng)教學(xué)法的最終目的是為了知識(shí)點(diǎn)的掌握和技能的獲取,所以在知識(shí)點(diǎn)的選取方面應(yīng)遵循由簡到繁、由易到難的循序漸進(jìn)的原則。還要求教師創(chuàng)建一個(gè)合適的交流平臺(tái),及時(shí)指導(dǎo)學(xué)生解決任務(wù)中的因難。
(3)對(duì)教師綜合素質(zhì)要求較高。任務(wù)驅(qū)動(dòng)教學(xué)法對(duì)教師有很高的要求,如果教師引導(dǎo)缺乏技巧或者對(duì)整個(gè)課程任務(wù)的設(shè)計(jì)不夠理想,都可以會(huì)大大影響教學(xué)效果。教師先要精心地拆分教學(xué)目標(biāo),然后將教學(xué)目標(biāo)巧妙地蘊(yùn)涵到某個(gè)教學(xué)任務(wù),從而得到教學(xué)內(nèi)容。這些教學(xué)任務(wù)不僅要有典型性,而且還應(yīng)有挑戰(zhàn)性,所有這些都需要教師把握學(xué)生的知識(shí)能力水平,本課程知識(shí)、技能及其內(nèi)在聯(lián)系。
任務(wù)驅(qū)動(dòng)教學(xué)法是一種獲取操作性、實(shí)踐性教學(xué)內(nèi)容的非常有效的方法。在使用這一方法進(jìn)行教學(xué)時(shí)要充分考慮教學(xué)對(duì)象的能力與水平,對(duì)教學(xué)內(nèi)容有比較精準(zhǔn)的把握,才能保證對(duì)這一方法運(yùn)用的合理、恰當(dāng)。
參考文獻(xiàn)
[1] 楊建勛.計(jì)算機(jī)教學(xué)中任務(wù)驅(qū)動(dòng)教學(xué)法的實(shí)施[J].教育與職業(yè),2013.6:159-161.
[2] 侯建花,楊長青.“C語言程序設(shè)計(jì)”實(shí)驗(yàn)教學(xué)的改革與實(shí)踐――以淮海工學(xué)院為例[J].計(jì)算機(jī)教育,2010.1:114-115.
篇9
關(guān)鍵詞:任務(wù)驅(qū)動(dòng)法 案例
中圖分類號(hào):TP312 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1007-9416(2013)02-0206-01
任務(wù)驅(qū)動(dòng)教學(xué)法通過選擇合適的案例幫助人們學(xué)習(xí)知識(shí),提高能力。由于該方法具有生動(dòng)、形象和教學(xué)效果好的特點(diǎn),符合人們認(rèn)知事物的規(guī)律,在教學(xué)中被廣泛采用。
在講授C++程序設(shè)計(jì)的過程中,傳統(tǒng)的講授方法么不僅教師備課復(fù)雜,而且學(xué)生負(fù)擔(dān)重,對(duì)達(dá)到良好教學(xué)效果收效甚微。可借鑒任務(wù)驅(qū)動(dòng)教學(xué)法,在每個(gè)課時(shí)中穿插相應(yīng)的任務(wù)案例于課堂,讓學(xué)生在完成任務(wù)中學(xué)到知識(shí),以此改善教學(xué)效果。
1 選擇任務(wù)案例的方法
1.1 難度適中
要注意控制任務(wù)的難度。任務(wù)太簡單會(huì)引不起學(xué)生興趣,任務(wù)太困難又可能導(dǎo)致學(xué)生失去信心,這些都會(huì)造成傳授知識(shí)的失敗。考慮到學(xué)生群體是大一第二學(xué)期的學(xué)生,剛接觸編程,沒有實(shí)際的編程實(shí)踐,選擇相對(duì)不太困難和相關(guān)專業(yè)知識(shí)聯(lián)系緊密的任務(wù)會(huì)比較效果好。
1.2 大小適中
應(yīng)該注意選擇合適大小的案例,在課時(shí)允許的范圍內(nèi)要盡量選擇不大并且涉及知識(shí)內(nèi)容比較集中的案例,如此更能夠突出教學(xué)目的,從而不會(huì)偏離大綱,更容易達(dá)到理想的教學(xué)效果。
1.3 選題合理
在案例的選擇方面應(yīng)著眼于貼近生活和容易引起學(xué)生興趣的選題,他們對(duì)這樣的案例更容易理解,因而上課時(shí)的精力就會(huì)更加集中,更能發(fā)揮學(xué)習(xí)的主觀能動(dòng)性,達(dá)到良好的教學(xué)效果。
1.4 選擇具有通用性的數(shù)據(jù)結(jié)構(gòu)算法
任務(wù)中所需要的算法和數(shù)據(jù)結(jié)構(gòu)應(yīng)該具有通用性。算法的通用性是指算法本身的規(guī)律性和其它算法的共性,由此可以使學(xué)生以后再次面臨相似的問題時(shí),可以根據(jù)以前的方法解決問題,對(duì)促進(jìn)學(xué)生學(xué)習(xí)有更好的效果。教師應(yīng)該盡量向?qū)W生引入一些典型的算法,如冒泡法、貪心算法、分治算法等。這些經(jīng)典算法對(duì)培養(yǎng)學(xué)生編程素養(yǎng)、形成編程思維有很大幫助。
1.5 選擇一個(gè)大型任務(wù)貫穿整個(gè)課程
教師應(yīng)該在時(shí)間允許的情況下指導(dǎo)學(xué)生建立一下比較復(fù)雜的大任務(wù),這樣不但可以鞏固和貫通所學(xué)知識(shí),而且對(duì)學(xué)生建立系統(tǒng)工程的思維有幫助。
2 通過任務(wù)驅(qū)動(dòng)整個(gè)理論知識(shí)學(xué)習(xí)過程
在教學(xué)過程中,需要緊密結(jié)合授課內(nèi)容和任務(wù)案例,從而達(dá)到預(yù)期的教學(xué)效果。
教學(xué)開始時(shí),應(yīng)該通過提出問題的方法引導(dǎo)學(xué)生發(fā)現(xiàn)問題的關(guān)鍵點(diǎn),然后結(jié)合要講解專業(yè)知識(shí)啟發(fā)學(xué)生進(jìn)行思考。例如,既然問題的關(guān)鍵是選擇什么樣的數(shù)據(jù)結(jié)構(gòu),那么可以提示學(xué)生設(shè)計(jì)解決問題所需要的數(shù)據(jù)結(jié)構(gòu)。對(duì)任務(wù)案例做具體分析,說明解決問題的思路,尤其是需要涉及當(dāng)前正在講授的C++相關(guān)的語法內(nèi)容,然后和學(xué)生一起書寫對(duì)應(yīng)的源程序,同時(shí)講解源程序中體現(xiàn)C++語法的部分。
3 學(xué)生管理系統(tǒng)實(shí)例分析
下面介紹一個(gè)有關(guān)學(xué)生管理系統(tǒng)的一個(gè)案例。在上課之前,先演示做好的學(xué)生管理系統(tǒng),使學(xué)生從用戶的角度分析需要什么樣的功能。接下來參考傳統(tǒng)教學(xué)方法中講述C++語法知識(shí)的手段,根據(jù)課本的理論脈絡(luò)強(qiáng)調(diào)其使用的方法,將任務(wù)驅(qū)動(dòng)教學(xué)和傳統(tǒng)教學(xué)手段結(jié)合在一起達(dá)到了理想的教學(xué)效果。
(1)描述學(xué)生基本信息的數(shù)據(jù)結(jié)構(gòu)
typedef struct{
unsigned int stuno;//引入整型變量
char stuname[16];//介紹字符數(shù)組
int gender;//借助整型描述布爾型數(shù)據(jù)
unsigned int room;//宿舍號(hào)
}Student;//介紹結(jié)構(gòu)體定義
(2)描述學(xué)生學(xué)習(xí)成績的數(shù)據(jù)結(jié)構(gòu)
typedef struct{
unsigned int stuno;//學(xué)號(hào),整型變量
char courNo[8];//課程號(hào),字符數(shù)組
char courName[28];//課程名,字符數(shù)組
int credit;//學(xué)分
float score1;//平時(shí)成績
float score2;//卷面成績
float score;//綜合成績
}ScoreInfo;//介紹結(jié)構(gòu)體定義
(3)按照案例介紹循環(huán)設(shè)計(jì),如for(;;),模塊定義實(shí)現(xiàn),子函數(shù)設(shè)計(jì),開關(guān)語句switch。
for (;;)
{
int opt;
ShowMenu();//顯示程序運(yùn)行主菜單
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ù)學(xué)生管理系統(tǒng)的各個(gè)子函數(shù)模塊,對(duì)C++程序設(shè)計(jì)中的三種控制結(jié)構(gòu)、函數(shù)定義和文件讀寫等知識(shí)點(diǎn)進(jìn)行比較。幫助學(xué)生在編程實(shí)踐中體會(huì)設(shè)計(jì)軟件的完整過程,逐漸過渡到自行編程和調(diào)試C++程序?qū)W習(xí)中。
篇10
關(guān)鍵詞:C#;案例;驅(qū)動(dòng);實(shí)踐;項(xiàng)目
中圖分類號(hào):F49
文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1672-3198(2013)24-0162-01
0 引言
案例驅(qū)動(dòng)教學(xué)法是通過分析案例程序引導(dǎo)學(xué)生學(xué)習(xí),以任務(wù)驅(qū)動(dòng)調(diào)動(dòng)學(xué)生學(xué)習(xí)主動(dòng)性的教學(xué)方法?!癈#程序設(shè)計(jì)”是計(jì)算機(jī)信息管理專業(yè)、軟件技術(shù)、計(jì)算機(jī)應(yīng)用等相關(guān)專業(yè)的一門專業(yè)必修課,具有極強(qiáng)的實(shí)踐性和很強(qiáng)的工程性。在此課程的教學(xué)改革實(shí)踐中,筆者采取了以項(xiàng)目為導(dǎo)向的教學(xué)模式,突出了對(duì)學(xué)生實(shí)踐動(dòng)手能力及綜合素質(zhì)的培養(yǎng),為最終實(shí)現(xiàn)學(xué)生的零距離上崗奠定了基礎(chǔ),取得了良好的教學(xué)效果。
1 教學(xué)內(nèi)容設(shè)計(jì)
筆者根據(jù)多年的教學(xué)經(jīng)驗(yàn),本著“實(shí)用為主,深入淺出”的思想,將教學(xué)內(nèi)容進(jìn)行整合,使學(xué)生在邊做邊練的過程中,輕松掌握所學(xué)知識(shí)點(diǎn)。教學(xué)案例的選擇既要有一定的代表性和實(shí)用性,又要有趣味性。這樣才能吸引學(xué)生。案例規(guī)模大小要適中,要盡可能多地涵蓋主要知識(shí)點(diǎn),還要求必須在規(guī)定學(xué)時(shí)內(nèi)完成。現(xiàn)將教學(xué)中的案例舉例如下:
典型案例一:四則運(yùn)算訓(xùn)練器。在講運(yùn)算符這個(gè)知識(shí)點(diǎn)時(shí),筆者設(shè)計(jì)了一個(gè)四則運(yùn)算訓(xùn)練器,通過這個(gè)案例,學(xué)生學(xué)會(huì)了“加、減、乘、除”的使用方法,還學(xué)會(huì)了單選按鈕、復(fù)選按鈕等控件的使用。該案例效果如圖1所示。
典型案例二:交通燈。在講計(jì)時(shí)器和圖片框控件的時(shí)候,筆者設(shè)計(jì)了一個(gè)十字路通燈的案例。這個(gè)案例一經(jīng)展示出來之后,學(xué)生就非常感興趣,覺得自己學(xué)的知識(shí)真的是學(xué)有所用了。
典型案例三:購物車。在這個(gè)淘寶網(wǎng)上購物盛行的時(shí)代,設(shè)計(jì)一個(gè)購物車,再實(shí)用不過了。學(xué)生對(duì)這個(gè)案例興趣十足,教學(xué)效果非常好。
典型案例四:射擊小鳥游戲。設(shè)計(jì)一個(gè)小游戲案例,寓教于樂。讓學(xué)生也變成一個(gè)軟件開發(fā)者,增長學(xué)生信心,調(diào)動(dòng)學(xué)習(xí)積極性。
以上是筆者在教學(xué)過程中的案例,在設(shè)計(jì)案例的時(shí)候,并不一定按照教材上知識(shí)點(diǎn)的先后順序,而是打破章節(jié),根據(jù)需要綜合相應(yīng)知識(shí)點(diǎn),使得知識(shí)點(diǎn)融合在案例中。讓學(xué)生在做的過程中,不知不覺就把相應(yīng)知識(shí)點(diǎn)掌握了,從而起到事半功倍的效果。
2 教學(xué)方法設(shè)計(jì)
2.1 “實(shí)踐導(dǎo)向型”的案例教學(xué)
這種案例教學(xué)的目的是將所學(xué)知識(shí)與應(yīng)用結(jié)合起來,注重學(xué)生技能培養(yǎng),培養(yǎng)學(xué)生主動(dòng)探求知識(shí)的學(xué)習(xí)習(xí)慣。該種方法的實(shí)施過程如下:教師將問題進(jìn)行描述,展示案例運(yùn)行效果,接下來進(jìn)行案例功能分解,對(duì)該案例涉及的知識(shí)點(diǎn)進(jìn)行教學(xué),講解功能實(shí)現(xiàn)代碼,最后分析總結(jié)。通過這種教學(xué)方法,使得學(xué)生在學(xué)習(xí)過程中注意力集中,學(xué)習(xí)積極性大大提高,獲取知識(shí)比較快。
2.2 “實(shí)踐導(dǎo)向型”的討論/辯論式教學(xué)
這種方法的教學(xué)目的是提高學(xué)習(xí)主動(dòng)性,通過交流更快地學(xué)習(xí)技能,提高學(xué)生團(tuán)隊(duì)協(xié)作精神。實(shí)施過程如下:首先是教師發(fā)掘主題,接下來分組發(fā)動(dòng),展開討論現(xiàn)場展示,最后學(xué)生總結(jié),教師進(jìn)行點(diǎn)評(píng)。通過這種教學(xué)方法,使得學(xué)生廣泛參與學(xué)習(xí),學(xué)生學(xué)習(xí)主動(dòng)性強(qiáng)。
2.3 “實(shí)踐導(dǎo)向型”的項(xiàng)目教學(xué)(角色扮演)
在教學(xué)過程中模擬企業(yè)環(huán)境,培養(yǎng)學(xué)生崗位技能。該種方法的實(shí)施過程如下:首先是教師進(jìn)行角色扮演,模擬客戶代表,提出項(xiàng)目需求,再模擬項(xiàng)目經(jīng)理,進(jìn)行需求分析,總體設(shè)計(jì);接下來學(xué)生根據(jù)需求分析,進(jìn)行項(xiàng)目分組,進(jìn)行模塊設(shè)計(jì),包括代碼編寫,項(xiàng)目測試與調(diào)試等環(huán)節(jié),最后學(xué)生進(jìn)行項(xiàng)目展示,教師進(jìn)行項(xiàng)目驗(yàn)收與評(píng)價(jià)。通過這種教學(xué)方法,使得學(xué)生能夠更好的熟悉崗位要求,掌握崗位技能。學(xué)生在這個(gè)學(xué)習(xí)的過程中,了解了做項(xiàng)目的整個(gè)流程,從而可以舉一反三,對(duì)以后的畢業(yè)設(shè)計(jì)和工作中都有很大的幫助。
3 教學(xué)效果分析
從傳統(tǒng)的教學(xué)方式來看,教師在課堂上按照書本上的順序講解知識(shí)點(diǎn),理論知識(shí)都講完之后,學(xué)生上機(jī)實(shí)踐。教師在講理論知識(shí)的時(shí)候,學(xué)生根本就不知道老師在講什么,也不知道學(xué)了這些知識(shí)之后能有什么用,所以學(xué)生很茫然,這樣就很容易產(chǎn)生厭學(xué)情緒,上課就會(huì)睡覺,或者開小差。從而導(dǎo)致學(xué)生對(duì)理論知識(shí)的理解模糊,開發(fā)項(xiàng)目的技能掌握也不夠熟練。嚴(yán)重缺乏學(xué)習(xí)的主動(dòng)性,大部分學(xué)生的學(xué)習(xí)是被動(dòng)的,是被家長和老師逼著才會(huì)去學(xué)習(xí)。當(dāng)教師講授完知識(shí)后,學(xué)生只能死板的接受老師講的知識(shí)點(diǎn),并不會(huì)舉一反三,也不會(huì)把知識(shí)靈活的應(yīng)用到實(shí)際生活中。導(dǎo)致學(xué)生對(duì)專業(yè)知識(shí)學(xué)習(xí)積極性越來越差。自從實(shí)施了案例驅(qū)動(dòng)的教學(xué)方法之后,上課效果明顯好轉(zhuǎn),以前不愛學(xué)習(xí)的學(xué)生也開始認(rèn)真的做練習(xí)了,很多學(xué)生還很會(huì)創(chuàng)新,在老師提出的案例實(shí)現(xiàn)要求的基礎(chǔ)上,還會(huì)將功能做得更加完善。以前是老師逼著學(xué)生學(xué),現(xiàn)在是學(xué)生自己主動(dòng)要求學(xué),學(xué)生會(huì)希望老師快點(diǎn)講,多講些知識(shí),這樣他們就可以做出更好的作品了。完全由原來的“要我學(xué)”轉(zhuǎn)變?yōu)椤拔乙獙W(xué)”的模式了。整個(gè)課堂涌現(xiàn)出一種積極向上的學(xué)習(xí)氛圍。尤其是每當(dāng)學(xué)生案例做成功之后,那種難以掩飾的成就感。
4 結(jié)束語
案例驅(qū)動(dòng)的教學(xué)模式自從2009年在我校計(jì)算機(jī)信息管理專業(yè)中開始探索實(shí)施,在實(shí)施過程中不斷驗(yàn)證修改,如今已經(jīng)形成了一套較為完善的教學(xué)體系。近幾年的實(shí)踐證明,這種教學(xué)模式還是行之有效的,學(xué)生學(xué)習(xí)的積極性、主動(dòng)性有了大幅度的提高,學(xué)生的參與熱情、課程設(shè)計(jì)質(zhì)量、競賽成績、畢業(yè)生畢業(yè)設(shè)計(jì)質(zhì)量都有很大的進(jìn)步,達(dá)到了培養(yǎng)學(xué)生自學(xué)能力、實(shí)踐動(dòng)手能力、創(chuàng)新意識(shí)和團(tuán)隊(duì)協(xié)作的能力目標(biāo)。因此,此教學(xué)方法對(duì)高職院校的計(jì)算機(jī)相關(guān)專業(yè)具有一定的參考價(jià)值。
參考文獻(xiàn)
[1]馬麗,趙偉艇.行動(dòng)導(dǎo)向教學(xué)法在高職C}}程序設(shè)計(jì)中的應(yīng)用[J].計(jì)算機(jī)教育,2010,(3).
[3]席平,楊洋,王春潔.機(jī)械糞課程實(shí)驗(yàn)教學(xué)改革與實(shí)踐[J].實(shí)驗(yàn)技術(shù)與管理,2010,27(7):14-18.
熱門標(biāo)簽
驅(qū)動(dòng)教學(xué)論文 驅(qū)動(dòng)電源設(shè)計(jì) 驅(qū)動(dòng)器 驅(qū)動(dòng)程序設(shè)計(jì) 驅(qū)動(dòng) 心理培訓(xùn) 人文科學(xué)概論
相關(guān)文章
1數(shù)字經(jīng)濟(jì)驅(qū)動(dòng)制造業(yè)增效研究
2科技創(chuàng)新是驅(qū)動(dòng)效率提升的動(dòng)力
4大數(shù)據(jù)驅(qū)動(dòng)智慧農(nóng)業(yè)發(fā)展對(duì)策