徐 偉
(青海師范大學,西寧 810001)
從上世紀90年代開始到現在,嵌入式系統廣泛應用在航空航天、車載電子、科研教學、交通管理、環境工程與工業控制等領域。2018年國家重大科技專項中提到“攻克智能終端嵌入式CPU 和操作系統的高性能低功耗等核心關鍵技術”的發展規劃,深度地推進嵌入式系統產業結構戰略性調整和優化升級,推進行業技術創新和技術進步,促進嵌入式系統行業的重大發展。嵌入式系統行業重大發展背后是行業的相關企業對人才巨大的需求。因此高校對嵌入式系統應用型人才的培養也日益重視,許多院校紛紛開設了嵌入式系統課程。但是目前高校輸送的人才與企業需要的人才相差甚遠,甚至相當數目的相關專業畢業生連嵌入式系統的開發環境都難以順利搭建。因此我們急需在嵌入式系統的課程設計上做出修改,夯實學生基礎知識,提高學生的工程能力和創新能力,使畢業生能夠滿足行業企業技術發展需求。
(1)學生在理論方面學習困難。由于該課程涉及的知識點較多,許多概念抽象,學生學習難度大。教學中存在理論環節和實驗環節脫節,達不到的理論與實踐相輔相成的教學效果。比如一些學校在此課程教學中使用的理論教材幾乎每章節都是針對ARM 芯片開展的,但是學生的動手實驗卻幾乎只針對的操作系統層面以及應用程序方面,顯出嚴重的脫節。在學習中,學生難以將理論和實踐聯系起來,而且在教學中等于變相增加學習難度,學習興趣也被打擊。
(2)雖然許多高校的實驗設備配置較高,但實驗課程的設計主要是驗證性實驗,缺乏自主動手設計性實驗,綜合性開發實驗則更少。學生在實驗課上難以自己動手設計和制作實驗項目,缺乏主動參與的環節,無法調動其積極性,難以真正熟悉和掌握嵌入式系統的開發過程[1、2]。
(3)雖然實驗教學涉及面較廣,但單個實驗內容的設計卻彼此孤立,實驗項目單一,沒有系統性地設計出一套實驗教學課程,來幫助學生逐步深入地進行實驗。
(4)多數高校本課程開設時間不長,課程建設不完善,多數教師無項目經驗,教師的項目培訓機會也很少。目前僅有的培訓幾乎都來自實驗設備廠家的短期培訓,并且培訓內容也只針對學校已購買設備的使用而不是項目開發。教師自己動手開發項目經驗主要依賴教師自己摸索實踐[3]。
(5)在結束實驗教學環節后,教師通過對學生的調查發現,大多數學生在實驗過程中僅驗證實驗指導書上的步驟以及代碼,并沒有深入理解底層硬件(包括外圍設備)、驅動程序、操作系統和軟件編程之間的關聯性,沒有真正掌握嵌入式系統的設計方法,甚至整個教學結束后也無法進行軟硬件結合的嵌入式系統完整開發[4]。學生也不能明白企業項目開發原則和方法。有相當數量的學生經過一學期的嵌入式系統課程學習后,既不能清楚地說出實驗環境的主要軟硬件設備和工具,也不能獨立搭建一個完整的開發環境。
因此目前多數高校的嵌入式系統在實驗教學中未能取得明顯的教學效果。
本教學方案是以實驗教學為主,理論教學是實驗教學的基礎。理論課程設計與實驗教學課程設計相配合,并為實驗教學服務。到本課程開課時,學生已完成一系列軟硬件課程的學習。本課程需要的許多理論知識早已在前期課程中有不同程度的學習。因此理論教學環節中,教師針對學生的基礎以及此課程所需要的深度合理分配課時。筆者按照我校的教學安排(整個嵌入式系統的教學共計72學時),以24課時講授嵌入式系統的開發環境、交叉編譯工具、BootLoader 以及內核移植、編程語言(我們使用C 語言)驅動開發、以及Android 圖形設計簡介理論知識環節,剩下48課時集中于實驗教學。許多理論知識對于學生來說需要在實驗課上將其深入吸收。
實驗教學是嵌入式系統教學的重點。實驗教學的目的不是停留在驗證性實驗上,而是學生能夠自己設計并完成一些創新性實驗。實驗教學的平臺是億創宏達公司的Cortex-A9綜合實驗實訓系統。嵌入式系統是一門綜合性較高的課程,它涉及的知識較廣。若學生在本門課程學習結束后能夠達到上述的教學目的,那么學生不但借助本門課程將本專業的基礎知識深入地復習和深刻地領會,增強了本專業的學習興趣,而且提升了個人的工程項目開發能力和綜合“實戰”能力。
實驗教學分為三部分,第一部分是嵌入式系統開發環境的搭建和驗證性實驗教學部分。此實驗教學部分共計26課時,重視理論和實踐的結合。第二部分是教師進行案例實驗教學,共12課時。教師通過一個綜合案例進行教學演示,學生跟著教師一步一步動手學習。第三部分是綜合設計性實驗教學,此部分共計10課時,由學生自主完成,教師對其指導。
(1)在驗證性的實驗教學中,每兩個學生為一組共同完成。教師指導學生在Cortex-A9綜合實驗實訓系統上快速搭建并熟悉嵌入式開發環境,此后進入具體的驗證性實驗項目。此部分的驗證性實驗能夠綜合認識嵌入式系統,產生學習興趣。驗證性實驗在已有的實驗框架下幫助學生掌握實驗原理和操作要領,讓學生學習實驗操作中的一些基本技能和實驗步驟,為后續的設計性實驗奠定基礎。教師針對每個驗證性實驗的關鍵點突出講解,引導學生掌握實驗的重難點。本階段實驗教學的考核方式是教師根據每組實驗結果和回答老師提出的針對性問題進行評判,以檢驗學生對實驗的掌握程度[2]。表1羅列了具體驗證性實驗和每個實驗的教學課時安排。

表1 驗證性實驗表

?
(2)案例教學。案例教學是以實際案例代替純理論講解,是引導學生對特定工程背景的教學內容進行分析、討論并找出問題解決途徑的一種教學方式,它是培養學生獨立分析及處理問題的一種有效手段[5]。
在案例教學中,筆者使用一個自己設計的溫度和距離檢測系統來進行教學。此案例分為Android Studio 開發的顯示與控制APP 客戶端軟件,以及由溫度檢測模塊、Wi-Fi 通信模塊、超聲波測距模塊以及蜂鳴器模塊組成的嵌入式系統服務器??蛻舳塑浖到y與服務器通過Wi-Fi 模塊連接通信。服務器上的溫度檢測模塊與測距模塊只要有數據變動,在手機上的客戶端軟件上立即有數據顯示出來,這樣可以做到實時監控。如果溫度檢測或者距離檢測超出設定的范圍,客戶端立即會有提示,觀測人員可以通過客戶端報警按鍵給服務發送報警信號,嵌入式服務器的蜂鳴器模塊將立即報警。圖1是案例教學的功能示意圖。

圖1 溫度距離檢測系統功能示意圖
此部分教學中客戶端APP 軟件的開發是重點也是難點,筆者使用7個課時來完成Android studio 軟件環境的搭建,客戶端界面的設計,以及界面底層程序的開發和調試。界面一(圖2)為實時顯示和控制。界面二(圖3)為后臺連接,設置服務器的ip 地址和端口號??蛻舳耸剐枰獎摻⊿ocket 套接字,使用多線程來讀取服務器端的TCP 通信數據,使用handler 機制對讀取到的溫度和距離數據做處理。

圖2 軟件顯示控制界面

圖3 后臺連接界面
服務器端的教學使用5課時來完成。服務器的四個模塊在驗證性實驗中已經讓學生掌握了,因此本部分教學重點不再是各模塊的原理和基本步驟,而是各模塊與手機客戶端的通信。筆者使用TcpReceiveCmd()來實現監控解析APP 端發出的請求溫度值或測距值;使用TCP 服務器發送數據函數TcpSendData()實現打包上傳溫度值和距離值;使用getUltrasonicDistance()實現對超聲波數據計算;使用get18B20Temperature()獲取DS18B20溫度傳感器的溫度值。服務器底層程序中的設計關鍵點有:創建socket 套接字,組裝數據包,發送請求幀,接受客戶端TCP 數據請求并解析以及處理數據并處理客戶端的界面顯示。以上部分都是在教學中的關鍵點。圖4是實驗箱在案例教學中的展示,圖5顯示教學中使用的超聲波測距模塊和溫度模塊。
(3)綜合設計性實驗是在已有的驗證性實驗和實驗案例教學的基礎上,結合學生以前所學的理論知識和實驗經驗進行拓展。此部分實驗中規定3-5學生為一組,每組單獨完成一個實驗項目。學生們在各個小組自己動手設計實驗中,獨立設計系統方案,編程程序,集成調試,并編寫文檔[2、6、7]。表2是教學中給每個小組可參考的動手實現項目。

圖4 實驗箱

圖5 超聲波模塊和溫度模塊

表2 綜合設計性實驗列表
綜合設計性實驗的設計導向是工程實踐。在教學中,教師對每個實驗小組的項目及時指導,鼓勵各小組使用課程中沒有講解過的軟硬件模塊。
此部分實驗的考核也是重點??己私Y果根據基本設計要求、實驗結果以及各個拓展部分來進行評判。考核中鼓勵學生實現多線程功能、開發手機端App 或者QT 圖形界面、集成更多的功能模塊等等。每個實驗小組的考核分數由指導老師和其他各組同學打分組成,比例各占50%。每個小組錄制一段演示視頻,說明自己項目的功能和特點作為考核的材料[6]。
完成自主設計實驗是學生學習此門課程教學的目的。自主設計實驗能夠將所學到的理論知識、基礎實驗知識綜合應用。自主設計實驗不但是教學內容,其結果也作為學生此課程學籍成績的一部分,如此更加調動學生的積極性。
學生進行自主設計實驗可以體現其創新能力和實踐能力。鼓勵優秀的設計性實驗項目小組繼續完善,積極申請大學生創新創業項目,參加各級別的嵌入式設計大賽,甚至可以朝畢業設計的方向去開發。借助各種項目和比賽的拉動作用,學生的嵌入式動手設計能力能夠得到持續的提高[2]。筆者在教學中動員一些學生積極參加“博創杯”等嵌入式設計大賽,得到很好的鍛煉。
注重實驗教學,帶領學生完成綜合性設計實驗項目為目標的教學,有助于提升嵌入式系統教學的效果。注重設計性實驗的教學對于教師的教以及學生的學都有明顯的幫助,讓教師的教不再是課堂呆板的“滿堂灌”,學生被動聽;也改變了學生雖然在上機做實驗但仍然懵懵懂懂的教學效果。學生不但將本課程的理論知識熟練掌握,而且能借助此門課程完成本專業一系列知識集中復習和實踐,培養項目開發的能力。