肖 堃 廖 勇
(作者單位:電子科技大學)
綜合設計作為信息與軟件工程學院學生工程能力培養的重要環節已經寫入各個方向的培養方案,并且是信息與軟件工程學院在人才培養過程中的特色之一。與傳統課程實驗和課程設計相比,綜合設計強調對多門課程的知識點進行串聯和綜合應用,在工程訓練中加深同學對理論知識的直觀認識,從而實現“做中學”。
孫士明等在《計算機專業嵌入式系統實踐教學體系探索》一文中指出,嵌入式系統是軟硬件高度結合的整體,嵌入式系統開發綜合運用了計算機、自動控制、通信、電子信息等多方面的知識,涉及知識面寬、理論性和實踐性強[1]。柳翔等在《嵌入式軟件工程人才培養的探索與實踐》一文中指出,嵌入式系統開發人才不僅要具有扎實的學科與專業基礎知識,更應具備較強的技術與工程實踐能力[2]。嵌入式系統方向是信息與軟件學院的重要招生方向,也是當前IT技術的重點應用領域,如何培養嵌入式系統方向學生的工程能力是信息與軟件工程學院人才培養中面臨的重要課題。
與傳統個人計算機系統的軟件開發與硬件開發相對獨立不同,嵌入式系統開發是軟件、硬件高度協同設計的過程[3]。傳統個人計算機系統的開發人員一般是計算機科學或計算機工程方面的專業人士,而嵌入式系統開發則要求更多的計算機以外的專業知識,例如電路設計和應用行業知識等[4]。在實踐中人才培養單位應力圖以前沿性技術類項目作為驅動,基于綜合設計這種新型的工程化訓練方案來構建挑戰性學習課程。
嵌入式系統開發綜合運用了計算機、自動控制、通信、電子信息等多方面的知識[5],涉及知識面寬、理論性和實踐性強[6],依靠傳統的理論教學與課程實驗難以讓學生了解嵌入式系統開發的全過程,因而難以建立嵌入式系統開發的整體概念。同時,嵌入式系統開發人才不僅要具有扎實的學科與專業基礎知識,更應具備較強的技術與工程實踐能力[7]。因此,如何在理論學習和課程實驗之外給學生以實際鍛煉的機會,讓他們通過實際項目來串聯嵌入式系統開發的知識點,進而建立從底層到高層、從硬件到軟件、從平臺到應用的嵌入式系統開發整體概念,就成為當前嵌入式系統方向人才培養的重要課題。
嵌入式系統設計通常采用軟硬件協同設計,將軟件設計和硬件設計作為一個整體并行設計,這樣能夠找到軟硬件的最佳結合點,從而使系統高效工作。這種設計方法可以充分利用現有的軟硬件資源,縮短系統開發周期,降低開發成本,提高系統性能,避免由于獨立設計軟硬件體系結構而帶來的弊端[8],其設計流程如圖1所示。

圖1 嵌入式系統設計流程
信息與軟件工程學院嵌入式系統方向的培養方案中,開設了嵌入式操作系統、計算機組成原理、匯編語言與接口技術、C程序設計、數據結構、嵌入式系統導論、ARM處理器體系結構及應用、微機原理與接口、嵌入式網絡編程、Linux操作系統編程等多門學科基礎課程和專業課程,通過這些課程可以構建從基礎知識到專業知識再到專業技能的層次遞進的嵌入式系統開發課程知識體系,如圖2所示。

圖2 嵌入式系統專業課程知識體系
本案例將教學內容與嵌入式系統設計有效結合,進行小班教學,讓參加小班的同學以組為單位(共6組,每組5人),共同學習,綜合應用多門課程核心知識點,設計并實現諸如四軸飛行器、智能小車、智能監控等嵌入式系統,以此為討論依托,研討嵌入式底層軟件開發(如:內核模塊、設備驅動程序、設備文件訪問等),鍛煉他們的編碼能力,鞏固課堂上講授的知識點。此外,每周約定課時組織學生進行綜合設計實踐研討、進度檢查、答疑、文檔寫作講解及課程設計答辯,讓學生通過實踐理解課程的核心知識點,很好貫徹執行了“做中學(To Learn by doing)”的教學方式和卓越工程師教育培養計劃的培養理念。通過小班教學/研討為嵌入式系統設計提供重要的理論基礎和實踐基礎,通過嵌入式系統設計的實踐環節又為課內研討提供了驅動力和發現問題的機會。增強學生溝通交流、合作研究的能力。同時,讓學生形成自主研究、自主學習與終身學習的習慣和能力。
以智能監控的設計與實現課題為例,選擇面向通用的ARM開發板作為目標系統,宿主機采用Linux操作系統,交叉開發工具采用GNU交叉開發工具鏈。學生首先掌握建立嵌入式Linux開發環境的基本方法和流程,掌握嵌入式Linux板級支持包,特別是設備驅動程序開發方法和調試方法,然后學習BSD TCP通信編程流程,BSD Socket網絡編程API,嵌入式Linux中應用程序訪問物理設備的方法,嵌入式Linux攝像頭驅動的開發方法,嵌入式Linux Web服務器的開發方法等知識點,然后逐步進行嵌入式操作系統內核(Linux)的移植,再在移植后的操作系統內核上進行設備驅動程序的開發以及多任務及網絡通信等復雜應用程序的開發,最后開發集成溫濕度傳感器的IP Camera等綜合應用,通過使用操作系統、設備驅動程序及應用程序的能力實現典型的嵌入式應用。
系統設計對軟硬件功能進行分配,并確定嵌入式系統的主要模塊、接口和總線結構。軟硬件功能分配就是對系統功能是由硬件模塊來實現還是由軟件模塊來實現進行逐一的定義,這需要對應用場景、用戶體驗以及成本等多重因素進行綜合考量。開發者根據軟硬件功能分配結果確定系統將采用哪些硬件模塊和軟件模塊以及軟硬件模塊之間的通訊方法(數據總線、共享存儲器、數據通道等),并最終確定嵌入式系統的體系結構。系統設計工作要求開發者綜合運用計算機組成原理與結構、操作系統基礎、網絡基礎、嵌入式處理器體系結構以及接口技術、人機界面設計等知識。不管嵌入式系統的硬件平臺形態如何變化,其硬件設計的主要工作都是根據需求選擇適合的器件來進行電路設計。硬件設計的手段是借助EDA軟件進行原理圖設計、PCB物理布線以及硬件描述語言編程等。硬件設計還需要向軟件設計提供相關信息,例如主處理器的內存映射、需軟件編程的寄存器定義等等。硬件設計工作要求開發者綜合運用數字邏輯、電子電路基礎、電路設計以及FPGA硬件設計等知識。
嵌入式系統軟件平臺可以分為開源平臺和封閉平臺兩大類,例如GNU/Linux操作系統,Google Android系統以及微軟Windows Phone系統等。在實際工程項目中,不管是選擇開源平臺還是封閉平臺,軟件設計的工作都不是要求開發者從無到有地開發整個軟件平臺,而是基于現有的開源工程或商用操作系統進行適配、剪裁、定制、集成以及局部開發。軟件設計的工作主要包括:針對具體硬件修改板級支持包并開發對應設備驅動、內核組件的剪裁、硬件抽象層適配、公共庫及服務的剪裁與集成、特定應用程序及服務的開發等等。軟件設計要求開發者綜合運用匯編語言、高級編程語言、數據結構與算法、面向對象程序設計、操作系統、網絡、軟件工程、嵌入式操作系統編程、嵌入式網絡編程、實時軟件設計、人機界面設計等知識。軟硬件集成工作包含系統驗證和系統確認。對嵌入式系統的驗證是通過工具或技術手段來檢查系統有無軟硬件缺陷。對嵌入式系統的確認是通過工具或技術手段來檢查系統是否達到設計要求,例如功能、性能、功耗等。當今的嵌入式系統功能復雜,軟硬件高度一體化,所以在實際工程項目中往往是通過軟件工程的思想來指導軟硬件集成工作。軟硬件集成工作要求開發者綜合運用軟件工程、軟件項目及配置管理、軟件測試與質量保證等知識。
綜合設計是一種新型的工程化訓練方案,以工程項目的形式開設,是對課程實驗、課程設計的延續和擴充,是對課程知識的深入應用和綜合應用。基于嵌入式系統綜合訓練的學習課程設計以學生工程能力培養為主線,以加強學生設計開發能力為核心,終將實現對學生的專業知識、系統觀念、創新意識、開拓能力以及科研素養等進行全方位的培養。