馮迅,云利軍
(云南師范大學信息學院,云南昆明 650092)
目前,全國高師院校計算機及相關專業都開設了嵌入式系統類課程。在傳統教學中,該類課程的學習內容多以ARM9系列處理器為主,實驗教學則依托三星公司S3C24xx 系列嵌入式芯片來開展。然而,這些內容現在已經跟不上市場發展的需求,不能滿足培養適合當前市場生態技術型人才的需要了。
在傳統嵌入式教學中,教師通常會花費大量時間對ARM嵌入式處理器的內部結構及其指令集進行詳細講解,但這部分內容不僅枯燥難懂,而且在學完之后學生仍然不能上手實踐,這樣會增加學習的挫折感,最終讓學生失去學習動力。此外,在傳統嵌入式系統類課程中,仍在使用ADS等軟件作為開發工具[1],把ARM嵌入式處理器當作一個高級的單片機來進行教學,這與當前市場的實際應用情況不相符,當前市場更需要的是運行操作系統的嵌入式系統。
為了解決上述問題,本文提出一種新的教學方案,通過該方案的實施,可提升學生的學習興趣,滿足學生的學習需求,同時也能提高市場對人才需求的認可度。方案的主要內容包括:更換學習平臺,依托新平臺重新調整教學內容,強化基于Linux 操作系統下的嵌入式開發,在教學中使用網絡廣播等多種形式來改善教學效果,并注重過程性評價,改善學習質量的評價機制等。
嵌入式系統以應用為中心,不同專業的培養目標、教學體系以及側重點不盡相同,導致課程內容也有所差別。例如,電子工程專業主要側重于硬件基礎平臺的設計;自動化、醫療儀器、測控等專業側重于智能儀器、儀表的設計;軟件專業則側重于嵌入式應用軟件開發。作為高師院校的計算機專業,應該結合當前教育的實際狀況,注重對基本原理的學習,并及時跟蹤市場技術生態的變化,不斷調整課程內容,以培養出適應當前市場需求的技術型人才。為此,作者以多年從事嵌入式系統教學和工程項目開發的實際經驗,結合當前市場主流的技術生態環境,對高師院校嵌入式系統類課程的教學內容進行了重新梳理。
國內高校嵌入式系統類課程,自從21世紀初逐步開設以來,都把ARM 系列處理器當作了嵌入式系統教學的對象,尤其以ARM9平臺為主要對象。這在當時幾乎是唯一的選擇,三星公司的S3C2410芯片甚至一度成為嵌入式系統的代名詞。然而,隨著技術的發展,特別是近年來伴隨著智能手機市場的快速興起,有力地推動了嵌入式領域各項技術的蓬勃發展。以嵌入式處理器為例,一大批功能豐富、功耗更低、速度更快、價格更便宜的芯片陸續投放市場。最近幾年還出現了一批優秀的國內自主研發的嵌入式芯片,大大擴寬了教學上可選擇的范圍。
經過比較驗證,權衡價格之后,本課程選定了NXP 公司的單核嵌入式芯片I.MAX6ULL 作為教學對象。該芯片基于較新的Cortext-A7 內核架構,曾被蘋果公司廣泛應用在IPad 及IPhone 等系列產品中。針對該芯片,選擇了“廣東東莞野火電子有限公司”推出的嵌入式開發板作為實驗平臺,型號為“I.MAX6ULL S1 Pro”[2]。基于該平臺,學生可以學習到一些較新的技術,包括移植較高版本的Linux 內核及BootLoader,使用新型的文件系統,實現電容觸摸屏等,讓學生的學習能緊跟當前市場的技術潮流。
新教學平臺的使用,徹底淘汰了三星S3C2410平臺。因此,原有的教學內容也需要隨之改變,淘汰ARM9 架構體系的教學內容,重新構建Cortext-A7 架構體系的教學內容。
嵌入式系統類課程所涉及的教學內容較多,如何進行合適的選擇,是決定教學效果好壞的關鍵。在傳統教學模式中,一般都會追求內容的全面而缺乏針對性,這會導致學生感覺似乎內容都學到了卻又什么都做不了。對于計算機專業的應用型課程,應強調對學生動手實踐能力的培養。因此,本課程有針對性地選擇了與實踐緊密相關的內容進行重點學習,除此以外的知識點作為補充和自學。兩者側重點不同卻又相輔相成,共同構建出嵌入式系統類課程的總體結構。
根據以上分析,新構建的嵌入式系統課程教學內容需要拆分成必學和選學兩部分,以下是必學部分的內容[3]。
1)Linux基本命令。該內容是后續學習的基本保證,如果學生之前課程已學習過相關內容,可酌情刪減或改為自學。
2)開發環境搭建。該內容是確保學生學習嵌入式開發能否順利進行的關鍵,可根據學生自己電腦環境的不同而有所區別。
3)Linux 下C 語言的編程及交叉編譯。該內容讓學生熟悉Linux 下的C 語言編程。以前學生學習的C語言程序基本上是在Windows下運行的,現把編程環境轉換到了Linux下,要讓學生重新熟悉編程環境,同時要掌握程序的交叉編譯方法。
4)Linux 內核的配置、裁減和移植。該內容讓學生重新認識操作系統的基本概念,并通過對內核源代碼的裁剪和編譯,定制出自己需要的操作系統。
5)BootLoader的配置和編譯。該內容僅讓學生了解BootLoader 的基本原理及其制作過程就可以了,不必深入探究。因為一般情況下,BootLoader 會由芯片廠家的BSP提供支持。
6)根文件系統。該內容讓學生了解根文件系統的基本構成和制作過程。同樣也不必深入探究,因為根文件系統的定制目前可由多款第三方軟件來實現。
7)Linux下的文件編程。該內容是課程的教學重點之一,要求學生掌握文件編程的具體方法。如果學生之前課程已學習過Windows下的文件編程,則本部分內容可酌情刪減。
8)Linux下的進程控制及其通信。該內容是課程的教學重點之一,要求學生掌握進程控制及進程間通信的相關技術。在課時允許的情況下,可加入多線程編程的內容。
9)Linux下的網絡編程。該內容是課程的教學重點之一,要求學生掌握網絡通信的編程方法。如果學生之前課程已學習過Socket編程,則本部分內容可酌情刪減。
10)Linux 下的串口編程。該內容是課程的教學重點之一,要求學生掌握Linux 下串口編程的相關技術原理,因為目前很多嵌入式系統的外圍模塊都以串口形式來進行通信。
11)內核模塊開發。該內容為驅動程序開發作準備,讓學生知道內核態程序開發與應用程序開發的區別,并深入理解內核程序開發的框架和流程。
12)字符型驅動程序開發。該內容是嵌入式系統開發中最重要也是最難的部分,需要較多的課時來保證教學效果。如果課時有余量,還可以增加“塊型驅動程序”開發的相關內容。
13)Qt界面程序開發。該內容讓學生了解嵌入式系統中常用GUI的開發過程。它需要學生具備C++編程的相關知識,教學上可以通過幾個典型的案例來進行講解[4]。此外,本部分內容也可視教學的實際情況,更換為安卓或鴻蒙。
以上13項必修內容需要在課堂上進行講授,同時配合相關實驗項目開展實驗教學,鍛煉并加強學生的動手實踐能力。
以下是選學(自學)部分的內容:
1)嵌入式系統概述。該內容屬于概念性知識,主要介紹嵌入式系統的定義及其應用領域等,可以安排學生自學。
2)CPU 內部結構及其指令集。該內容實際上是介紹嵌入式芯片的內部結構及其指令系統。把這部分內容留給學生自學,一是考慮到學生之前學習過單片機技術,這部分內容的學習方法與單片機大同小異;二是在后續開發實踐中,基本都是在Linux操作系統中進行的,除了驅動開發之外,使用到該部分內容的時候很少,所以可以安排學生自學,在講授到驅動開發部分時,再強化一下就可以了。
3)C++語言。該內容在Qt開發時會用到,考慮到學生之前已學習過C 語言,所以也把它也留給學生自學。
對于以上選學部分的內容,可以讓學生通過多種途徑進行學習。比如,教師提前布置任務,讓學生利用假期的時間進行自學;或教師提前錄制網絡教學視頻,讓學生在課余時間進行學習等。
目前的嵌入式系統可分為運行操作系統和不運行操作系統兩種類型。本課程采用當前市場上較為流行的方案,即運行Linux 操作系統的方式來開展教學。其原因有三:一是市場方面,除了條件非常苛刻的航空航天、軍工武器等領域外,在民用級消費類電子產品中,大多數嵌入式系統產品還是以運行通用操作系統為主;二是依托操作系統來進行程序開發,相對于直接在芯片上開發應用程序要方便得多,無論是開發效率還是程序的可移植性都比較高;三是在開發功能較多、較為復雜的應用程序時,通過操作系統的支持會讓開發過程變得更加便利和高效。
基于上述原因,本課程加強了學生在Linux 操作系統下的開發能力。在教學上重點講述Linux基本命令、Linux 下的程序開發、Linux 下字符型驅動程序開發、Linux 按鍵中斷程序、Linux 網絡應用開發以及Linux 內核定制等相關內容,為學生動手實踐嵌入式Linux系統開發提供必要的理論和技術支持。
對于工程類課程的教學,提倡運用培養“工匠精神”的教學模式[5],即邊學邊做的模式。從作者多年的教學實踐經驗來看,如果僅通過傳統多媒體課堂教學形式來開展教學,效果不會很好。其原因有二:一是本門課程多數時候都在給學生講解程序。在多媒體教室中,學生僅通過一塊投影屏幕來觀看整個教學過程,確實有困難。程序畢竟不同于文字和圖片,成百上千行的代碼不僅要一點點講解清楚,還經常需要進行編譯、運行等操作演示,在投影屏幕不大、分辨率不高的情況下,學生很難看清楚演示的具體內容。二是在教師進行講解的時候,學生只能被動地看,不能跟著教師進行同步實踐操作。等到實驗課再去進行操作實踐時,很多講過的內容已經記不清楚了。
本課程的教學直接在實驗室中使用電腦網絡廣播教學的方式來開展,讓學生跟著教師同步進行操作。這樣能有效地提升學生的學習效率和實踐成功率,具體過程如下。
1)學生兩人一組,方便討論及協作。每組配備一臺電腦、一塊嵌入式開發板及相關實驗工具。
2)教師使用的電腦要能夠進行網絡廣播教學[6]。同時可配備一個攝像頭,把教師在嵌入式開發板上的操作情況實時廣播到學生端,讓學生能同步看到教師的演示效果。
3)教師配備麥克風,教室內配備功放和音箱,確保每組學生都能清晰地聽到教師的聲音。此外,為了防止音響嘯叫,還可配置一臺音頻移頻器。
4)教師把講授的內容進行分解,在講解演示完成之后及時讓學生進行操作,并檢查每組學生完成的情況,及時解決學生遇到的問題。
5)教師授課時可采用錄屏軟件,把操作講解的內容錄制成視頻,課后分發給學生或上傳到視頻網站,讓學生在課后也能進行學習,有利于鞏固所學內容,提高學習質量。
通過以上教學方法的改革,采用“手把手”的工匠教學模式,大大提高了學生的學習興趣和學習動力,保證學習了質量。在條件允許的情況下,還可以開放實驗室或把嵌入式開發板借給學生,讓有興趣的學生在課余時間也有條件繼續學習。
綜上所述,教學方法改革其實就是把理論課與實踐課有機地結合起來,保證足夠的課時,讓學生能夠邊學邊做,遇到問題及時解決,課后還能反復觀看教學錄像,保證了學習質量。通過這樣的教學形式,只要學生具備學習上的內生動力,就肯定能夠取得較好的學習效果。
傳統教學評價一般采用考試方式,但卷面考試方式只適用于考查學生對理論知識的記憶程度及分析理解能力,并不適合用來檢測學生動手實踐的能力。對于應用型的計算機專業課程,特別是對于像嵌入式系統開發這類課程,應該側重于考查學生的動手實踐能力,即對產品的開發設計能力,而不是對知識的記憶和分析能力。
基于上述原因,本課程采用設計作品的方式來進行期末評價,具體過程如下:
1)教師提前兩周發布期末考查題目,讓學生有充分的時間進行準備。
2)在題目中詳細給出作品設計的具體要求,從環境的搭建開始,內容涵蓋學習過的所有知識點,并量化好各知識點的評價分值。
3)學生先完成作品的設計制作,在調試完成后撰寫出設計性實驗報告,報告的內容涵蓋作品的創意、需求分析及整個設計過程。
4)要求學生對自己的作品進行演示錄像,錄制的視頻作為其中一項評分依據與設計報告一起提交。
5)最后要求學生進行現場答辯,在演示自己作品的同時能夠回答教師及其他同學提出的問題,并能夠按照教師提出的要求對作品進行現場修改。
6)學生最后的期末成績依據上述各項量化指標給出分數,做到客觀、公平、公正、公開。
此外,除了對學生的期末作品進行評價之外,還應注重對學生平時學習過程的評價,即過程性評價[7]。本課程的過程性評價由三部分組成:一是學生平時提交的實驗報告;二是學生的考勤記錄;三是期中考試的成績。這樣做的目的主要是考慮到對學生學習效果評價的多樣性、綜合性,讓評價體系顯得更加客觀合理。
本課程的最終成績評定采取“對半開”的形式,即過程性評價占比50%,學期末考查占比50%。這樣做的目的是強調學習過程的重要性,對學生整個學習階段所做努力的認可,同時也兼顧了產品開發設計的能力。
教學實踐證明,通過上述教學改革實踐,有效地調動了學生的學習積極性,學生學習的興趣明顯提升。在改革前學生期末試卷考核的平均分為70分,且在課程結束后基本上就無人再過問課程的內容。通過教學改革之后,不僅考核的平均分提高到了80分,更重要的是學生建立了長久的學習興趣。有學生申報了學校科研訓練項目,并參與了嵌入式系統相關教材的編撰工作。有學生主動報名參加全國大學生嵌入式系統設計競賽,并取得了較好成績。有學生在實習就業時選擇了從事嵌入式系統開發等方面的工作,其掌握的知識技能也與用人單位的招聘條件基本相符,教學改革達到了預期目的。