張晶
(同濟大學軟件學院,上海 201804)
當今社會正處在新一輪科技進步和產(chǎn)業(yè)變革時期,信息技術領域發(fā)展呈現(xiàn)數(shù)字化、網(wǎng)絡化和智能化的特點,進入萬物互聯(lián)的時代,軟件和硬件之間協(xié)同工作更加緊密,嵌入式開發(fā)成為信息產(chǎn)業(yè)中發(fā)展最快的領域之一。資料顯示,2020年中國軟件業(yè)務收入81616億元,其中嵌入式系統(tǒng)軟件收入為7492億元,占比9.2%,并保持高速增長[1]。
嵌入式系統(tǒng)要求開發(fā)人員能夠統(tǒng)籌考慮產(chǎn)品功能、成本、功耗、可靠性等多方面因素。目前人才市場招聘嵌入式開發(fā)人員,要求熟悉編程語言、操作系統(tǒng)、驅(qū)動開發(fā)、硬件調(diào)試等多方面技術,符合要求的人才存在一些缺口,尤其是高校應屆畢業(yè)生更為緊缺[2]。分析其主要原因,是目前大多數(shù)高校信息學科課程設置與市場對人才的需求存在一定的偏差。因此,培養(yǎng)一大批具備軟硬件協(xié)同開發(fā)能力的專業(yè)技術人才是高校教學改革的當務之急。本文圍繞軟硬件協(xié)同開發(fā)的實驗教學模式及相關配套機制展開一些思考,旨在更好地培養(yǎng)工程型、應用型和創(chuàng)新型人才。
實驗是掌握科學知識和技能的重要手段,實驗教學是理論教學的有效延伸。高校信息學科相關專業(yè)學習的實踐性都很強,各種軟件和硬件實驗更是課程體系中不可缺少的環(huán)節(jié),是培養(yǎng)專業(yè)技能的必修課。
國內(nèi)高校計算機相關專業(yè)的本科培養(yǎng)方案中,軟件類課程體系建設都比較完善,涵蓋了編程語言、算法、操作系統(tǒng)、數(shù)據(jù)庫、網(wǎng)絡等,軟件類課程的實踐環(huán)節(jié)通常是采用課程項目設計的形式。經(jīng)過多年的積累和發(fā)展,高校的實驗室計算機配備普遍充足,學生上機進行軟件開發(fā)實踐的機會能夠得到充分保障。
相對于軟件類課程而言,各校硬件課程設置差別較大。學生普遍反映硬件類課程學習內(nèi)容較為抽象,比如計算機各部件的運行原理、數(shù)據(jù)信號的調(diào)試過程等等,必須有合適的實踐環(huán)節(jié)支持以保證學習效果。硬件類實踐環(huán)節(jié)主要采用實驗教學的形式,有專門的實驗設備,在專門的實驗教學場地進行,開設的實驗課程包括數(shù)字邏輯、組成原理、接口技術、單片機等。但很多實驗設備對綜合性、設計性實驗支持度不夠,難以滿足教學需要。有些學校采用Matlab、Multi-SIM等軟件仿真平臺進行輔助教學,一般也只是對物理層面的實驗結果進行驗證和比較,這只是一種教學方式的結合,而不能認為是真正意義上的軟硬件協(xié)同開發(fā)[3,4]。
綜上,高校信息類專業(yè)的課程體系中軟硬件課程基本上還是“分而治之”,課程設置“偏軟”和“偏硬”之間的分水嶺仍比較明顯,專業(yè)理論和工程實踐之間缺乏必要的聯(lián)系和相互支持,傳統(tǒng)方式培養(yǎng)的學生很難同時具備軟硬件開發(fā)兩手都硬的本領。
在“新工科”建設、工程教育、創(chuàng)新創(chuàng)業(yè)教育的改革背景下,對學生的工程實踐能力、解決復雜問題能力和服務行業(yè)能力提出新的要求。各高校針對軟硬件融合教學開展廣泛的探索和研究,這些舉措包括:基于復雜工程問題的實驗案例設計、出版軟硬件協(xié)同開發(fā)的教材專著、開設創(chuàng)客專題慕課講座等等,確實取得一定效果。但總體而言,所面向的學生受眾群體還不夠廣泛,課程中的軟硬件協(xié)同教學內(nèi)容偏于簡單,人才培養(yǎng)仍不能很好適應現(xiàn)階段社會對軟硬件開發(fā)兼才的迫切需求。我們需要探索一種可推廣的軟硬件協(xié)同實驗教學模式,讓信息學科相關專業(yè)更多的學生都能有所獲益[5]。
計算機技術發(fā)展到今天,硬件和軟件之間的界限日趨模糊,硬件和軟件系統(tǒng)的協(xié)同更加密切。軟硬件融合最顯著的例子就是物聯(lián)網(wǎng)系統(tǒng),從智慧城市等大規(guī)模系統(tǒng),到智能家居這樣的小型單元,在整個系統(tǒng)中,軟件不僅僅是“運行程序”,硬件也不只是“提供驅(qū)動”,由此帶來的開發(fā)工作比以往更為復雜。
現(xiàn)階段高校開展軟硬件協(xié)同開發(fā)實驗教學模式,應當圍繞物聯(lián)網(wǎng)相關技術進行教學設計。實施過程中需要注意以下幾點:
(1)學生應當進行必要的基礎課程學習,先修課程包括:程序設計(C語言為主)、操作系統(tǒng)(Linux為主)、計算機網(wǎng)絡、數(shù)字邏輯、計算機組成原理、傳感器原理、單片機原理等。軟硬件協(xié)同教學內(nèi)容可以安排在本科第三學年進行。
(2)單片機入門學習建議從51系列開始。51單片機是經(jīng)典的8位單片機,指令系統(tǒng)豐富,還有豐富的增強或兼容型號。51單片機編程語言可以是匯編或C語言。C語言編程效率高,可讀性和可移植性遠超匯編語言,高校C語言教學更為普及,因此C語言是單片機編程語言學習首選。
(3)軟硬件協(xié)同開發(fā)實驗教學與傳統(tǒng)單片機課程的主要區(qū)別在于,對硬件開發(fā)板不僅限于通訊調(diào)試,也不只是執(zhí)行諸如點亮LED、馬達運轉的簡單實驗操作,而是需要通過軟件設計,對硬件獲取的數(shù)據(jù)信息進行處理后形成特定的系統(tǒng)響應,構建具備一定復雜度的工程系統(tǒng),以適應“新工科”教育的要求。
單片機架構和型號繁多,對教學實驗用硬件平臺的選型,要從配套資源、設備成本、接口配置、編程語言等多方面統(tǒng)籌考慮。經(jīng)比較,適用于軟硬件協(xié)同開發(fā)實驗教學的硬件包括:STM32單片機開發(fā)板、Arduino開發(fā)平臺和樹莓派開發(fā)平臺,以及相關通訊模塊和傳感器模塊。
(1)STM32單片機開發(fā)板
STM32是基于ARMCortex-M內(nèi)核的32位系列單片機,具有高性能、低成本、低功耗的特點。片上集成Flash存儲器和SRAM存儲器,支持串行調(diào)試(SWD)和JTAG接口。
STM32單片機的優(yōu)勢:STM32單片機各種片上外設操作簡單,可以處理模數(shù)信號,有利于學生學習了解底層硬件。增強型系列時鐘頻率達到72MHz,屬同類產(chǎn)品中性能最高,支持單周期乘法和硬件除法;基本型時鐘頻率為36MHz。市面上基于STM32的開發(fā)板,可選野火、正點原子等廠家產(chǎn)品,配套學習資源較齊全。
(2)Arduino開源硬件平臺(基于AVR)
AVR是精簡指令集8位單片機,基于哈佛結構,程序存儲器和數(shù)據(jù)存儲器分開。AVR指令大部分為單周期指令,常用時鐘頻率為4 MHz~8MHz。
Arduino是基于AVRATmega8核心的開源電子原型平臺,包含硬件部分(Arduino開發(fā)板)和軟件部分(ArduinoIDE開發(fā)環(huán)境),具有跨平臺和開源的特點,采用類C語言開發(fā)。Arduino能通過各種類型的傳感器來感知環(huán)境數(shù)據(jù),并通過執(zhí)行裝置來反饋、影響環(huán)境。
相對傳統(tǒng)單片機,Arduino的優(yōu)勢:開發(fā)人員不再需要關注寄存器等底層硬件內(nèi)容,通過編寫代碼就能實現(xiàn)對外設的控制。Arduino簡單的開發(fā)方式使得開發(fā)人員把更多的精力放在創(chuàng)意與實現(xiàn)上,通過快速原型法達到項目目標,有利于節(jié)約學習成本,縮短開發(fā)周期,非常適用于軟硬件協(xié)同開發(fā)。Arduino還可以與Flash、Processing、Max/MSP等軟件進行交互,從而實現(xiàn)更多的創(chuàng)意應用。
(3)樹莓派開發(fā)平臺
樹莓派是基于ARM的微型電腦主板,操作系統(tǒng)基于Linux,以SD/MicroSD卡為存儲器,配有USB和以太網(wǎng)接口,擁有視頻模擬信號輸出和HDMI高清視頻輸出接口,基本具備了PC的所有功能。樹莓派以Python為主要編程語言,也支持Java、C等主流編程語言。
與單片機相比,樹莓派可以完成更復雜的任務管理與調(diào)度,還可以連接豐富的開源硬件庫,為開發(fā)人員提供了更廣闊的應用開發(fā)空間,包括連接底層硬件與上層應用、實現(xiàn)物聯(lián)網(wǎng)云管理、圖像識別/視覺處理,以及復雜數(shù)據(jù)處理等。
(4)通訊模塊
模塊間的通訊是物聯(lián)網(wǎng)系統(tǒng)的重要組成部分,常見的無線通信方式有:射頻識別RFID、ZigBee、藍牙、WiFi、3G/4G等,實驗教學可選用CC2630作為ZigBee連接模塊,CC2640作為藍牙連接模塊,ESP8266作為WiFi連接模塊。
(1)C語言與匯編語言
C語言面向過程,具有處理內(nèi)存分配的能力,執(zhí)行效率高,可移植性好。大多數(shù)單片機都支持C語言進行開發(fā),因此C語言是軟硬件協(xié)同開發(fā)的首選。
匯編允許用戶直接訪問底層硬件,可以實現(xiàn)精確的計時應用。匯編還提供了一些C語言不支持的指令集,例如使用BIT指令進行位操作。但匯編課程在高校開設較少。
(2)MicroPython
Python是一種解釋型語言,近年來改編產(chǎn)生了適用于單片機的輕量級開源MicroPython。MicroPython使用標準Python庫的子集,可以控制底層硬件,但只能操作256K的空間和16K的RAM。MicroPython目前主要支持ARM系列單片機,也支持部分51系列邏輯部件。
(3)類C語言
Arduino是用經(jīng)過封裝的C語言進行開發(fā)的,Arduino核心庫文件提供各種應用程序編程接口API,這些API是對底層單片機(通常是AVR)支持庫進行二次封裝所形成的。封裝好的API屏蔽了單片機中繁雜的寄存器配置,可通過程序直觀地控制Arduino,增強了程序的可讀性,也提高了開發(fā)效率。
針對信息學科專業(yè)特點,對軟硬件協(xié)同開發(fā)應用的實驗教學內(nèi)容和方法進行設計,主要教學模式如下:
(1)可以借鑒STEM的先進教育理念來開展軟硬件協(xié)同開發(fā)實驗教學。STEM教育將科學(S)、技術(T)、工程(E)和數(shù)學(M)內(nèi)容進行整合,是一種運用所學綜合知識解決真實情境問題的教育理念,強調(diào)學科交叉和知識融合,培養(yǎng)學生解決問題的能力、創(chuàng)新的能力、跨界的綜合能力。信息學科的專業(yè)實踐性強,與其他學科交叉應用廣泛,非常符合STEM理念開展實踐教學。
(2)采取基于案例的實驗教學方式。通過對2~3個基礎案例的講解和演示,引導學生學會對實驗所需的硬件設備及配件進行選型、配置和調(diào)試。為適應課時需要,每個基礎案例架構不宜太復雜,模塊數(shù)量控制在5~10個(包括傳感器和通訊模塊),比如:基于溫濕度的自動澆灌系統(tǒng)、基于紅外探測的避障小車、通過無線控制的機械臂等等,讓學生接觸到不同模塊的工作原理和配置方法。
(3)在完成基礎案例學習的基礎上,注重對綜合設計性實驗內(nèi)容的支持,培養(yǎng)學生的創(chuàng)新思維。由學生自行組隊、自行討論項目方案、自行完成硬件選型和軟件設計,并調(diào)試運行,教師在此環(huán)節(jié)充當協(xié)助角色。
(4)采取項目答辯方式進行驗收(PPT展示+系統(tǒng)演示),重點考查系統(tǒng)實際運行效果、學生對軟硬件協(xié)同開發(fā)理念的理解和綜合應用能力。軟硬件協(xié)同系統(tǒng)設計要求達到一定的復雜度,復雜度的指標包含但不限于:所用硬件模塊的數(shù)量、軟件代碼的有效行數(shù)、模塊間的邏輯關系的合理性、系統(tǒng)的功耗和穩(wěn)定性等。
(5)軟硬件協(xié)同開發(fā)的實驗教學平臺不僅可以作為傳統(tǒng)實驗課程的延展,也可以為學生的專業(yè)實習、畢業(yè)設計、創(chuàng)新項目等環(huán)節(jié)提供支持,從而豐富本科實驗教學的內(nèi)容和形式,有利于培養(yǎng)學生的綜合應用能力,激發(fā)學生的創(chuàng)新精神。
新時期物聯(lián)網(wǎng)建設蓬勃發(fā)展,各行業(yè)之間相互融合,學科交叉已成常態(tài),良好的軟硬件協(xié)同開發(fā)能力是對技術開發(fā)人員的一項基本要求。國內(nèi)高校應當大力在信息學科本科專業(yè)中推廣軟硬件協(xié)同開發(fā)教學,以滿足物聯(lián)網(wǎng)相關人才市場的需求,也為國家信息化戰(zhàn)略儲備人才。軟硬件協(xié)同開發(fā)的實驗教學模式以學生自主學習、自主設計、自主管理為主線,開發(fā)學生潛能,培養(yǎng)主動發(fā)現(xiàn)問題和解決問題的能力,旨在更好地培養(yǎng)工程型、應用型和創(chuàng)新型人才;同時,也引導學生關注國家和社會的重大戰(zhàn)略問題,增強學生的責任感和整體意識。