摘要:當(dāng)前,,大學(xué)中的“嵌入式系統(tǒng)與單片機(jī)應(yīng)用”及類似課程的教學(xué)內(nèi)容和實驗正處在轉(zhuǎn)型期,由單純8位機(jī)轉(zhuǎn)向8位、16位,、32位并舉;開發(fā)方式上,,仿真器在逐步退出,;嵌入式實時操作系統(tǒng)被引入教學(xué)。本文就相關(guān)課程內(nèi)容與實驗平臺方案的設(shè)計提出一些看法,,以引起同行的思考與討論,。
引 言
在2003年天津舉行的“全國單片機(jī)及嵌入式系統(tǒng)學(xué)術(shù)年會”上,來自全國各地幾十所大學(xué)的教師對單片機(jī)與嵌入式系統(tǒng)教學(xué)展開了熱烈的討論,。這里,,就我們的認(rèn)識介紹如下,以達(dá)到拋磚引玉的目的,。
1 單片機(jī)與嵌入式系統(tǒng)應(yīng)用類課程的轉(zhuǎn)型期
當(dāng)前,,單片機(jī)與嵌入式系統(tǒng)應(yīng)用類課程正處在轉(zhuǎn)型期。過去的20年中,,單片機(jī)市場與需求都是以8位機(jī)為主的,。最近幾年來,,16位、32位單片機(jī)的嵌入式應(yīng)用呈迅速增長的趨勢,。在一兩年后,,數(shù)量上雖然仍會以8位為多,但32位單片機(jī)在產(chǎn)值上會超過8位單片機(jī),,如圖1,、圖2所示。今后,,單片機(jī)應(yīng)用將呈現(xiàn)8位,、16位、32位單片機(jī)并舉的格局,。
由于單片機(jī)系統(tǒng)的需求越來越復(fù)雜,、集成電路技術(shù)發(fā)展又非常快,,片上存儲器容量不斷擴(kuò)大,,使得在片上系統(tǒng)的開發(fā)中,使用嵌入式實時操作系統(tǒng)(RTOS)成為可能,。計算機(jī)對于90%以上的學(xué)生都不能是他的專業(yè),,而只是一種工具。同各行各業(yè)開發(fā)單片機(jī)應(yīng)用的工程師一樣,,非計算機(jī)專業(yè)的學(xué)生來自各個領(lǐng)域,,他們不可能將主要精力花在研究操作系統(tǒng)上,而是要把主要精力放在所研究的專業(yè)上,,他們需要的是把計算機(jī)專家們研究的成果直接拿來使用,。RTOS可以將一個復(fù)雜的應(yīng)用分解成多個任務(wù),從而簡化應(yīng)用程序的設(shè)計,;RTOS可以保證系統(tǒng)的實時性達(dá)到或接近理論上可以達(dá)到的最好水平,。而多任務(wù)本身會帶來一系列的問題,主要是任務(wù)間的競爭,、死鎖、優(yōu)先級反轉(zhuǎn),、任務(wù)間同步與通信等,。這些問題有RTOS為用戶考慮,只要知道RTOS的原理,,會使用就可以了,。故單片機(jī)教學(xué)的這次轉(zhuǎn)型,引入RTOS概念是一大特點,。
2 單片機(jī)教學(xué)史的回顧與思考
回憶過去我國單片機(jī)教學(xué)走過的路,,大多數(shù)院校都是從8051走過來的,。故8051在國內(nèi)普及單片機(jī)應(yīng)用方面功不可沒。而總結(jié)一下由8051教學(xué)模式帶來的副作用,,將有利于目前的轉(zhuǎn)型,。
圖1
一個副作用是,教學(xué)中以一片8051配以不同的外圍電路去適應(yīng)各種不同的應(yīng)用,。這就忽略了單片機(jī)應(yīng)用的多樣性和單片機(jī)應(yīng)用的個性化定位,。單片機(jī)姓“單”,世界上的單片機(jī)至少有上千種,,每種單片機(jī)都有各自的定位,。我們強(qiáng)調(diào)的是SoC,即片上系統(tǒng),,只有將整個系統(tǒng)都集成在一個集成電路芯片上,,才能做到低成本、高可靠性,。只有在不得已的情況下,,才擴(kuò)充額外的接口芯片。故應(yīng)告訴學(xué)生,,雖然學(xué)的是某種單片機(jī),,但針對不同的應(yīng)用要選擇最適宜的單片機(jī)。單片機(jī)教學(xué)要求教師教會學(xué)生一種方法,,會用這種單片機(jī),,自然也會用其它單片機(jī)。
過去8051教學(xué)引入的另一誤區(qū)是使用仿真器,。如果說過去開發(fā)掩膜型單片機(jī)使用仿真器屬不得已,,則如今單片機(jī)都采用了可以反復(fù)擦寫十萬次以上的Flash存儲器,實在沒有必要使用仿真器,。本人在過去20年的單片機(jī)應(yīng)用開發(fā)中,,就從來沒有用過仿真器,并非沒有仿真器可用,,只是不主張使用仿真器,,特別不主張使用仿真器教學(xué)。仿真器使單片機(jī)開發(fā)變得不直觀,,高價的仿真器增加了開發(fā)成本,,也增加了教學(xué)的負(fù)擔(dān)。開發(fā)者不可能為每一類單片機(jī)買一種仿真器,,只好以自己有仿真器的那種單片機(jī)去適應(yīng)所有的應(yīng)用,,從而誤入歧途。
3 是教學(xué)還是培訓(xùn)
我們這里講的是教學(xué),不是培訓(xùn),,教學(xué)不同于培訓(xùn),。俗話說,“授之以魚不如授之以漁”,。教學(xué)是“授之以漁”,,授之以解決問題的方法,培養(yǎng)解決問題的能力,,是引導(dǎo)學(xué)生入門,。通過授課與實驗,要求學(xué)生能做到三個看懂,,看懂原文手冊,、看懂硬件原理圖、看懂別人寫的程序,。在此基礎(chǔ)上學(xué)會如何掌握一種自己不熟悉的單片機(jī),。我們講CPU硬件結(jié)構(gòu),講匯編指令集,,教學(xué)生如何初始化串行口,,從而實現(xiàn)與單片機(jī)的CPU“對話”,進(jìn)而學(xué)會寫監(jiān)控程序,,然后將如何與C語言接口,,以μC/OS-II為例,講RTOS基本概念,,進(jìn)而移植μC/OS-II,。
培訓(xùn)的目的是讓用戶盡快上手,一周乃至三天后就可以開始寫應(yīng)用程序,。培訓(xùn)是“授之以魚”,,培訓(xùn)的典型例子是教學(xué)生如何使用某單片機(jī)的仿真器。
教學(xué),,強(qiáng)調(diào)的是引導(dǎo)學(xué)生入門,,只要我們能正確地引導(dǎo)學(xué)生入門,告訴他們什么是正確的方法,,后面的路他們會自己走,。
4 將μC/OS用于RTOS教學(xué)
1995年以后,我們逐漸將μC/OS,、μC/OS-II引進(jìn)單片機(jī)應(yīng)用的科研與教學(xué),,證明是成功的。μC/OS,、 μC/OS-II是專門為嵌入式應(yīng)用設(shè)計的實時內(nèi)核,,適用于幾乎所有8位、16位,、32位單片機(jī),;90%以上與硬件無關(guān)的代碼用C語言寫成,用匯編語言寫的與硬件相關(guān)的代碼不足200行,;有PC機(jī)上可運(yùn)行的范例,;有針對數(shù)十種知名CPU的移植范例可直接從網(wǎng)上下載;有注解清晰,、書寫規(guī)范的全部源代碼,。有一部600頁的書對RTOS基本概念、內(nèi)核原理做了詳盡的描述,,隨書所附光盤上的μC/OS-II V2.52通過了美國航空航天管理局的安全認(rèn)證,,可用在與人性命攸關(guān)的控制系統(tǒng)中,是一部科學(xué),、實用的好教材,。該內(nèi)核的前身是μC/OS,最早的版本是為Motorola 增強(qiáng)型8位單片機(jī)68HC11 CPU寫的,。68HC11曾經(jīng)是世界上產(chǎn)量排名第三的(第一是68HC05,,第二是8051)著名單片機(jī)CPU。1995年前后,,我們曾以68HC11作為單片機(jī)應(yīng)用的教材,,并出過一本《MC68HC11單片機(jī)開發(fā)技術(shù)》的教材,清華大學(xué)出版社出版,。目前,,68HC11逐漸被與之指令集在源碼級兼容的 CPU12 替代,故我們的研究生教學(xué)也將順勢轉(zhuǎn)向采用16位的CPU12 單片機(jī),。
我不主張將嵌入式Linux,、μClinux等用于教學(xué)。它缺乏適當(dāng)?shù)亩ㄎ?,雖然有源碼,,但并沒有一本適于做教材的書籍,對于非計算機(jī)專業(yè)的學(xué)生來說太難了,,也沒有必要花那么多的時間去摳懂,。將μClinux移植到不同32位系統(tǒng)上是計算機(jī)專家的事,非計算機(jī)專業(yè)的人士,,僅僅是使用而已,。對于計算機(jī)專業(yè)的學(xué)生,操作系統(tǒng)是必修課,,有一部很好的教材,,Andrew S. Tanenbaum等著,,王鵬等譯 《操作系統(tǒng)設(shè)計與實現(xiàn)》(第2版),電子工業(yè)出版社出版,。這本書講的是Minix,,實際上是簡化了的Unix、Linux,。學(xué)過這部教材,,進(jìn)而掌握Linux原理就不難了。μClinux等嵌入式Linux不是實時的,,僅對Linux做了簡化,,使之可用于嵌入式應(yīng)用,但作不到SoC,。學(xué)習(xí)簡化的Linux,,不如選用Minix。當(dāng)然,,μClinux可用于針對某特定應(yīng)用的培訓(xùn),。運(yùn)行μClinux至少需要512KB的 SDRAM,目前的技術(shù)水平片內(nèi)RAM還不可能做那么大,。而運(yùn)行μC/OS-II則只需要幾KB的RAM,,十幾KB的Flash,這完全可以在單片機(jī)的片內(nèi)實現(xiàn),。講解RTOS原理,,μC/OS-II足夠好了。
5 教學(xué)內(nèi)容要在穩(wěn)定的前提下發(fā)展
8位,、16位,、32位單片機(jī)將三分天下已是業(yè)界共識,作為教學(xué),,穩(wěn)定至關(guān)重要,。雖然單片機(jī)技術(shù)發(fā)展迅速,但開一門單片機(jī)教學(xué)的課程并非易事,,需要教師,、教材、實驗器材等,,特別是實驗平臺,,需要較大的投入。教師要有相當(dāng)?shù)目蒲薪?jīng)驗,,用單片機(jī)做過研發(fā),,還要會講。我的經(jīng)驗是,,講一門新課,,至少要講到第三年才能說會講了或能講好了,。為了穩(wěn)定,每年只能更新一小部分內(nèi)容,,要善于解決穩(wěn)定和發(fā)展快這一對矛盾,。RTOS的教學(xué)可穩(wěn)定很多年。μC /OS已經(jīng)十多年了,,仍然好用,雖然每年都有新發(fā)展,,但基本原理沒有變化,,我看μC /OS-II至少還可以再講10年;MINIX快20年了,,仍是一部好教材,。實驗平臺也應(yīng)盡量穩(wěn)定的時間長一些,既然講述的是開發(fā)方法,,使用8位,、16位還是32位單片機(jī)其實是無所謂的。
由8位機(jī)一統(tǒng)天下,,到8位,、16位、32位并舉,,轉(zhuǎn)型期定位單片機(jī)與嵌入式應(yīng)用類課程的切入點在哪里為好? 本人擬采用了以16位機(jī) CPU12為切入點,。它比8位單片機(jī)復(fù)雜,比32位單片機(jī)簡單,,外圍接口豐富(比一般32位機(jī)還要豐富),,片內(nèi)RAM、ROM資源適中,。講述了以匯編寫監(jiān)控程序開始,,到用C語言寫程序,再到移植μC /OS這一方法,,同樣適于8位,、32位單片機(jī)。這種方法本身也始于20年前,,逐漸增加RTOS是近8年的事,,是相對穩(wěn)定又有發(fā)展的。
圖2
對沒有條件由8位機(jī)實驗平臺轉(zhuǎn)向16位,、32位平臺的學(xué)校,,不必強(qiáng)求,仍可使用8位機(jī)平臺,。若使用的教學(xué)平臺有幾KB 的RAM,、幾十KB的Flash,,用于μC /OS-II作RTOS教學(xué)已足夠好,但希望不要再用仿真器,,而采用我們從寫一個簡單的監(jiān)控程序,,到移植μC /OS的教學(xué)法。不必過多地講授各種I/O接口的使用方法,,讓學(xué)生在寫一個簡單監(jiān)控程序的基礎(chǔ)上自己去驅(qū)動這些 I/O模塊,。
有條件直接升級到32位單片機(jī)也是一種選擇。不少學(xué)校選用了以ARM為CPU的單片機(jī),,但請注意三點,。一是定位,若課程定位在非計算機(jī)專業(yè)的學(xué)生,,運(yùn)行μC /OS之類RTOS,,可選擇片內(nèi)有幾KB、十幾KB的RAM,、幾十KB的Flash,、可工作在單片方式下的ARM,這樣會使教學(xué)平臺很便宜,。第二點是不要炒作,不要一哄而上,。ARM的應(yīng)用定位很明確,是一切與媒體有關(guān)的便攜式低功耗應(yīng)用,。ARM是32位CPU,,并不是全部32位單片機(jī)。以ARM為CPU擴(kuò)以幾MB乃至十幾MB SDRAM,、Flash的,、可以上Linux的昂貴平臺,只適用于針對某類產(chǎn)品開發(fā)應(yīng)用的培訓(xùn),,不適于用來教學(xué),,因為Linux在PC機(jī)上也能跑。第3點是學(xué)時與學(xué)生的基礎(chǔ),,32位單片機(jī)對于沒有8位單片機(jī)基礎(chǔ)的學(xué)生是很難掌握的,,沒有足夠的學(xué)時,ARM底層的東西是很難掌握的,。
6 關(guān)于課程的定位
課程定位不同,,即授課對象不同,課程的內(nèi)容可以很不一樣,,但都必須符合學(xué)習(xí)的客觀規(guī)律,。我們有2門單片機(jī)與嵌入式應(yīng)用課程,一門定位于電類本科生(我系核電子學(xué)專業(yè)),,名為“單片機(jī)認(rèn)識與實踐”,,32學(xué)時,,只講簡單8位單片機(jī)的入門知識,不講RTOS,,面向還沒有學(xué)過數(shù)字電路課程,,對單片機(jī)有興趣的2年級電類本科生。
由于物理學(xué)對計算機(jī)的需求幾乎是無限的,,故像互聯(lián)網(wǎng)這樣的計算機(jī)技術(shù)最先源于物理學(xué)的需求,。我們系對部分本科生計算機(jī)能力的要求是很高的。接下來,,部分學(xué)生將做一個單片機(jī)應(yīng)用方面的SRT (Student Research and Training Program) 項目,, 清華對SRT有專門的經(jīng)費支持。學(xué)生設(shè)想一個簡單的單片機(jī)應(yīng)用原理性演示題目,,利用課余時間,花半年到一年,,設(shè)計一塊印刷線路板,、再把軟件調(diào)出來,優(yōu)秀作品可拿到每年的學(xué)生科展上評獎,,甚至參加學(xué)生挑戰(zhàn)杯的角逐,。這些學(xué)生在畢業(yè)設(shè)計中,一般會做一個單片機(jī)應(yīng)用方面的課題,。這樣上來的研究生甚至可以幫助我當(dāng)研究生課輔導(dǎo)實驗的小教師,。
另一門課程是定位于全校非計算機(jī)專業(yè)的各系研究生,特別是那些可能在研究生課題中用到單片機(jī)的各專業(yè)學(xué)生,。我們講以CPU12為核心的16位單片機(jī)和基于μC/OS-II的RTOS,。這兩部分內(nèi)容共安排課內(nèi)64學(xué)時,其中授課與教師指導(dǎo)下的實驗約各占一半,。按校方要求,,這類課程原則上課內(nèi)、外學(xué)時之比為1∶2,,即學(xué)生課外要花128學(xué)時讀書和進(jìn)行無輔導(dǎo)下的實驗,。由于學(xué)生來自不同學(xué)科、不同專業(yè),,在單片機(jī)應(yīng)用方面水平很不一樣,。計算機(jī)技術(shù)的發(fā)展是各行各業(yè)需求拉動的,而計算機(jī)技術(shù)的發(fā)展促進(jìn)了需求,。這里,,需求是矛盾的主要方面。而個別研究生,,特別是外??既胛倚5姆请婎愌芯可?,甚至沒有學(xué)過微機(jī)原理之類課程。這里我們只能假設(shè)選修這門課的同學(xué)都有數(shù)字電路課的基礎(chǔ),,會用C語言寫程序,。由于水平的參差不齊,及學(xué)生個人可能安排的課外學(xué)時的差異,,到課程結(jié)束時,,每個人到達(dá)的水平也是很不一樣的,故只能是各按步伐,、共同前進(jìn),。
教學(xué)、開課要符合學(xué)生認(rèn),、知的客觀規(guī)律,,是由簡單到復(fù)雜,由8位到16位,、32位,,由匯編到C,到RTOS,。要切記防止浮躁,,也要教導(dǎo)我們的學(xué)生防止浮躁。我們能做到的僅僅是領(lǐng)學(xué)生入門而已,,能指出一個大致正確的方向,,不誤人子弟已屬難得。后來,,能成為IT高手的,,不是我們培養(yǎng)的,而是通過他們自己艱辛努力實現(xiàn)的,。