楊波 沈承舒
摘要:從嵌入式系統(tǒng)軟件開發(fā)的角度出發(fā),探討在嵌入式系統(tǒng)開發(fā)方向上C語言程序設(shè)計課程的改進思路,首先闡述嵌入式軟件開發(fā)對C語言的知識和技能需求,指出現(xiàn)有C語言課程針對嵌入式系統(tǒng)開發(fā)存在的不足;在此基礎(chǔ)上,從課程設(shè)置、教學(xué)內(nèi)容劃分、實驗設(shè)置及教學(xué)方法與手段等方面討論C語言程序設(shè)計課程的改革思路。
關(guān)鍵詞:嵌入式軟件開發(fā);C語言;課程改革
0.引言
C語言程序設(shè)計作為程序設(shè)計語言的入門基礎(chǔ)課程,是各高校理工科專業(yè)中計算機程序設(shè)計類課程的普遍選擇。作為一門理工科通識課程,其目的在于使學(xué)生通過對C語言中各種語言成分的學(xué)習(xí),初步認識計算機程序設(shè)計及進行程序設(shè)計的過程,掌握基本的程序設(shè)計思想與方法。作為通識類課程,目前各院校通常將該門課程的教學(xué)安排在一年級,每周3-4學(xué)時(含實驗),講授內(nèi)容主要包含C語言的數(shù)據(jù)類型與表達式、程序結(jié)構(gòu)、函數(shù)、指針、鏈表、文件等。在教學(xué)實踐中,我們發(fā)現(xiàn),由于學(xué)時限制或?qū)W生接受程度等原因,常常需要對部分教學(xué)內(nèi)容(如多級指針、文件操作、位操作等)進行削減,無形中降低了課程內(nèi)容的深度與廣度。作為通識類課程,這樣的削減影響不太大。而對于信息類專業(yè)(計算機、電子、自動化等)而言,僅掌握通識教育中所講授的部分是遠遠不夠的。
嵌入式系統(tǒng)開發(fā)是信息類專業(yè)的一個主要發(fā)展方向。進入21世紀(jì)以來,融合先進的計算機技術(shù)、半導(dǎo)體技術(shù)、電子技術(shù)及各行業(yè)領(lǐng)域具體應(yīng)用的嵌入式系統(tǒng),已在工業(yè)控制、交通管理、信息家電、智能家居、環(huán)境監(jiān)測、電子商務(wù)、機器人等領(lǐng)域得到了廣泛應(yīng)用。
一般說來,嵌入式系統(tǒng)是指以應(yīng)用為中心,以計算機技術(shù)為基礎(chǔ),軟硬件可剪裁,適用于心用領(lǐng)域,對功能、可靠性、成本、體積、功耗等有嚴格要求的專用計算機系統(tǒng)。由于在成本、功耗、體積等方面的限制,對嵌入式系統(tǒng)中的軟件開發(fā)提出了更高的要求。嵌入式軟件開發(fā)是在特定的硬件平臺上進行,需要使用具有較強硬件操作能力的編程語言。由于C語言是具備了這一特質(zhì)的高級語言,成為嵌入式系統(tǒng)開發(fā)的最佳選擇。
調(diào)查顯示,在信息類專業(yè)中,電子類本科專業(yè)教學(xué)計劃與嵌入式系統(tǒng)教學(xué)要求相脫節(jié),電子類本科學(xué)生的軟件基礎(chǔ)也較弱。在這樣的背景下,對C語言程序設(shè)計課程進行相應(yīng)改革,以適應(yīng)嵌入式系統(tǒng)開發(fā)人才培養(yǎng)的需要是十分必要的。
1.嵌入式軟件開發(fā)對C語言的需求
在適用于嵌入式系統(tǒng)開發(fā)的3類主要語言中,C語言占有超過70%的份額。開發(fā)嵌入式軟件,除掌握C語言的基礎(chǔ)知識和基本技能外,主要還存在以下幾方面的要求:
1)指針。
指針作為C語言的主要特點,其使用十分靈活,因而也很難完全掌握。它可用于指向不同類型的普通變量、數(shù)組、字符串,甚至函數(shù)。在嵌入式軟件開發(fā)中對各類不同指針(數(shù)組指針、指針數(shù)組、指向結(jié)構(gòu)體的指針、多級指針)的使用十分普遍。因此,指針相關(guān)內(nèi)容的教學(xué)必須足夠深入。
2)位操作。
C語言有別于其他高級語言的一個特點是可直接對硬件進行操作。指針和位操作是這一特點得以實現(xiàn)的工具。通過6種位操作符,可直接對內(nèi)存、寄存器或I/O端口的字節(jié)進行測試、置換或移位處理。熟練掌握位操作符的使用,是進行嵌入式軟件開發(fā)必不可少的重要基礎(chǔ)。在一些國內(nèi)高校普遍選用的經(jīng)典C語言教材(如文獻[4])中,由于定位于普適教育,并未包含位操作部分的內(nèi)容。
3)文件讀寫。
嵌入式系統(tǒng)中“一切皆文件”,系統(tǒng)的運行以文件讀/寫方式進行操作。理解文件系統(tǒng)的構(gòu)成、掌握基本的文件操作方法也是進行嵌入式軟件開發(fā)必須掌握的技能。
4)宏定義。
在嵌入式軟件中使用宏定義,不僅可防止代碼出錯,提高可移植性、可讀性,而且是產(chǎn)生內(nèi)嵌代碼的唯一方法,可用于替代函數(shù)調(diào)用,從而達到嵌入式系統(tǒng)性能要求。
以上4個方面的內(nèi)容,在通識型的C語言課程中,由于課時和學(xué)生程度等原因,都不能進行針對性的特別訓(xùn)練。學(xué)生在進入嵌入式系統(tǒng)開發(fā)階段后,顯然會成為程序設(shè)計知識方面的短板。
2.課程改革思路
基于上一節(jié)的認識,我們對C語言程序設(shè)計課程的教學(xué)提出了下面的調(diào)整思路。
2.1課程設(shè)置
作為通識課程的C語言程序設(shè)計通常安排在一年級或二年級上學(xué)期完成。信息類專業(yè)的學(xué)生在大學(xué)三年級開始進入嵌入式系統(tǒng)開發(fā)相關(guān)課程時,不可避免地對已學(xué)過的C語言的知識會有一定程度的遺忘。
針對嵌入式系統(tǒng)開發(fā)的要求,考慮將C語言程序設(shè)計課程劃分為2個階段。第1階段為c語言程序設(shè)計基礎(chǔ),每周3學(xué)時,可在大學(xué)一年級下學(xué)期或二年級上學(xué)期開設(shè);第2階段為嵌入式系統(tǒng)C語言程序設(shè)計,每周2學(xué)時,作為嵌入式系統(tǒng)開發(fā)方向的選修課,可在大學(xué)三年級上與其他嵌入式系統(tǒng)相關(guān)課程,如嵌入式系統(tǒng)、嵌入式操作系統(tǒng)一起開設(shè)。這樣設(shè)置一方面滿足了在低年級完成程序設(shè)計類通識課程的要求,使學(xué)生不必過早接觸C語言中較為深入、復(fù)雜的部分;另一方面,通過將與嵌入式軟件開發(fā)密切相關(guān)的知識適當(dāng)推后,確保了嵌入式系統(tǒng)開發(fā)各門課程問的知識聯(lián)系。
2.2教學(xué)內(nèi)容的劃分
由于將課程劃分為基礎(chǔ)部分和面向嵌入式系統(tǒng)開發(fā)的提高部分,則可將C語言的一般基礎(chǔ)(基本語句、控制結(jié)構(gòu)、數(shù)組、函數(shù)、指針、結(jié)構(gòu)體)劃人C語言程序設(shè)計基礎(chǔ)課程中,通過這部分的學(xué)習(xí)使學(xué)生掌握C語言的基本理論知識并具備基本的編程技能,達到程序設(shè)計類課程的通識教育水平。
對于與嵌入式開發(fā)密切相關(guān)的知識,將在嵌入式系統(tǒng)C語言程序設(shè)計課程中講授,主要包括:宏定義、位操作、文件操作和復(fù)雜指針運用。這部分內(nèi)容的教學(xué)可圍繞嵌入式軟件開發(fā)實例展開,深入講解各知識點的應(yīng)用。通過嵌入式系統(tǒng)C語言程序設(shè)計課程的學(xué)習(xí),學(xué)生應(yīng)更深入地理解和領(lǐng)會C語言的精華思想,同時具備基于嵌入式平臺進行軟件開發(fā)的能力。
2.3實驗內(nèi)容endprint
任何程序設(shè)計語言的學(xué)習(xí)都離不開大量的實踐,實驗是學(xué)習(xí)C語言的重要組成部分。根據(jù)前面對課程的劃分,C語言程序設(shè)計基礎(chǔ)課程中可開設(shè)的實驗項目如表1所示。
實驗1在學(xué)習(xí)了C語言的數(shù)據(jù)類型、運算符、表達式和輸入/輸出之后進行,目的在于使學(xué)生熟悉C語言的編譯環(huán)境,逐步認識C語言語句的基本構(gòu)成。實驗2涵蓋了程序的3種基本結(jié)構(gòu),便于學(xué)生統(tǒng)一認識關(guān)系、邏輯運算和程序結(jié)構(gòu)。實驗3-6分別對應(yīng)于數(shù)組、函數(shù)、指針和結(jié)構(gòu)體各章節(jié)的內(nèi)容,重點掌握這些語言成分的定義及使用方法。實驗7將綜合運用本課程中的知識,完成一個較小的、具備一定功能的小型軟件的開發(fā)。
嵌入式系統(tǒng)C語言程序設(shè)計課程的實驗內(nèi)容則圍繞一個嵌入式軟件開發(fā)實例展開,實例由任課教師選定。根據(jù)所選實例,實驗內(nèi)容可包含以下項目(如表2所示)。
實驗1的目的在于使學(xué)生熟悉嵌入式系統(tǒng)的軟件開發(fā)環(huán)境,主要介紹嵌入式Linux下的c語言編譯工具。實驗2-5則根據(jù)所選實例,選取特定的模塊有針對性地進行文件操作、宏定義、位運算及復(fù)雜指針運用方面的練習(xí)。
2.4教學(xué)方法與手段的調(diào)整
毋庸諱言,由于種種因素的影響,當(dāng)前各高校中普遍存在學(xué)風(fēng)怠惰現(xiàn)象,相當(dāng)一部分學(xué)生學(xué)習(xí)積極性較低下。如何提升學(xué)生對所學(xué)課程的興趣,是每一名教師都要面對的問題。在多年的C語言程序設(shè)計課程教學(xué)過程中,我們接到學(xué)生的反饋意見最多的是“上課聽得懂,下來不會自己編程”。究其原因,大概不外乎兩種:一是學(xué)生盡管在課堂上聽了課,課下并未及時回顧整理并主動思考;二是在理論課堂上一講到底,學(xué)生要等到實驗課時才真正動手體會講過的知識,往往不能及時動手練習(xí),進而影響消化吸收。針對第一種情況,我們采取了每一堂課以提問開始的方式,提問內(nèi)容主要是對之前所學(xué)內(nèi)容的回顧和脈絡(luò)梳理,同時還留出了一定的課堂練習(xí)時間,這樣能在一定程度上起到督促學(xué)生課下及時復(fù)習(xí)的作用,也便于教師及時了解學(xué)生的知識掌握情況。而對于第二種原因,可嘗試采取將理論課堂搬至機房的方式,在完成一個知識點的講授后布置即時練習(xí),讓學(xué)生能及時體驗和理解。但當(dāng)機房容量有限而班級較大時,并不適用,這樣的情形如何處理?需要我們進一步思考。
3.結(jié)語
嵌入式產(chǎn)品已遍及我們?nèi)粘9ぷ骱蜕钪械母鱾€方面,巨大的市場空間將吸引更多的專業(yè)人才投身于嵌入式系統(tǒng)開發(fā)的行業(yè)中。根據(jù)《2012-2013嵌入式工程師調(diào)查報告》,嵌入式企業(yè)的發(fā)展速度與專業(yè)人才的成長速度仍有一定差距,行業(yè)內(nèi)專業(yè)研發(fā)工程師仍處于供不應(yīng)求的狀態(tài)。在畢業(yè)生就業(yè)壓力日益增大的今天,高校的計算機、電子、自動化等相關(guān)專業(yè)的教師都在積極思考相應(yīng)的課程和人才培養(yǎng)模式改革嵌入式系統(tǒng)研發(fā)工作中,軟件開發(fā)占80%以上的工作量,需要大量的嵌入式軟件開發(fā)人才。高校相關(guān)專業(yè)更應(yīng)及時調(diào)整軟件設(shè)計類課程的設(shè)置,以適應(yīng)嵌入式開發(fā)行業(yè)的人才需求。endprint