北京理工大學 馬忠梅
淺談嵌入式人才培養
北京理工大學 馬忠梅
從1985年初接觸單片機到現在已有30年,筆者親歷了我國嵌入式系統的發展(從單片機到嵌入式系統,又回歸微控制器),一直從事嵌入式教學和研究。
1997年,在北京航空航天大學出版社出版的《單片機的C語言應用程序設計》是國內第一本單片機C語言書,推廣單片機編程以C語言為主、匯編語言為輔,采用模塊化的編程方法。為了能運行操作系統、連網,由8/16位單片機發展到32位ARM嵌入式處理器。2002年,根據ARM公司提供的資料,筆者組織編寫了國內第一本關于ARM的書——《ARM嵌入式處理器結構與應用基礎》。
由8/16位單片機升級到32位嵌入式處理器,一方面是由于互聯網的普及和高端應用的需求刺激,另一方面是因為8位單片機帶給半導體公司的利潤空間已經十分有限。2002年起,由全國大學生電子設計競賽組委會主辦、Intel公司協辦的“全國大學生電子設計競賽——嵌入式系統專題競賽”,進一步豐富了全國大學生電子設計競賽的形式和內容,推動了高校信息電子類專業教學改革、課程體系及實驗室建設,各高校紛紛開設嵌入式系統課程。2003年起,筆者所在學校開設了嵌入式系統課程,2004年筆者撰寫了《ARM&Linux嵌入式系統教程》,并在本科教學中使用。
Linux的教學難度很大,一般要求學生學過操作系統。早期教授嵌入式系統課,很大精力耗費在教學生怎么用Linux,直到計算機操作系統課程增加了Linux上機實驗情況才有所好轉,但由于理論課時和實驗學時有限,軟硬件很難兼顧。研究生教學一直沒有放棄單片機,從研究生教學調查來看,嵌入式系統應用還是以微控制器為主,因為微控制器使用量大,應用面廣,已有很好的應用基礎。一個MCU設計可以改造一個舊產品,也可以創造一個新產品。MCU對于大學生和研究生來說不僅容易上手,更重要的是集成度高,學生既方便做電路板,能夠學習硬件接口技術和直接面向硬件的軟件編程技術,從而對嵌入式軟硬件有深入的理解。
現在的嵌入式系統教學在很大程度上不是由應用來推動的,而是針對實驗箱廠家提供的內容來規劃授課內容。很多內容是接口技術、匯編編程、C語言編程、操作系統移植,甚至只要ARM+Linux就是嵌入式系統。Linux的優點是開放源代碼,但存在的問題是沒有固定的團隊支持。一旦碰到難點只能網上求援。很多小公司吃了苦頭,不敢再用Linux做產品,因為他們無法把握產品的開發周期,人員耗費的成本巨大。此外,雖然Linux可以免費得到,但是其上流行的圖形用戶界面GUI卻是收費的,按照GPL協議還需公開自己的源碼。
從Intel大學計劃送給高校教學用的PDA參考設計SitSang開發板的培訓教師角度看,硬件部分的培訓教師是開發板的設計者,學電子技術的講授硬件原理,軟件只是用C語言編寫測試程序來測試開發板各個部件是否工作正常。軟件部分的培訓教師是學計算機的,講如何移植Linux、設計驅動程序和應用程序,可見大公司軟硬件人才的分工是很明確的。反觀我們的嵌入式Linux,還陷在移植和底層接口模塊的使用上,這些適合偏硬件的人員來做,離開發出產品還相去甚遠。
半導體廠商偏愛Linux是因為它免費,只要移植到評估板上就能證明它的處理器是正常工作的,而真正想要開發出產品還得搭建應用平臺,目前大廠商都有手機平臺或汽車電子平臺。軟件類嵌入式系統教學與硬件類嵌入式系統教學有所不同,應側重平臺搭建、GUI應用開發,讓學生能把自己的創意實現出來。至于編程,應以C語言為主、匯編語言為輔,需優化時采用模塊化混合編程。嵌入式系統課程實踐性非常強,若成為了理論課就失去了它的意義。
各個專業的嵌入式系統教學應有所側重,不能千篇一律,只有把國內的嵌入式應用推動起來,培養的學生才能滿足工作需要。這樣看來,本科教學電子技術專業應側重講接口技術和驅動程序設計,非電類的對象應用專業應側重單片機接口和C語言編程技術,計算機專業應側重GUI應用和驅動程序。
現在安卓(Android)的開發板更加方便了應用的編程,學生可在手機上開發,完成后再移植到實驗室的開發板上。操作系統移植并非一般教學內容,應安排在本科畢業設計或研究生階段,實際教學能做到“師傅領進門,修行在個人”即可,主要是培養學生對嵌入式系統的興趣,而不是由于涉及面太廣、難度太大,使學生們望而生畏。各高校嵌入式系統課程多為選修課,學時有限,規劃主要教學內容和實驗內容側重點是教師的首要任務。
ARM公司推出專門針對微控制器市場Cortex-M內核后,微控制器的選型不再以8位、16位和32位來區分,而是以高、中、低檔芯片來劃分。因為這些微控制器都有統一的機“芯”,區別只是它們的外圍部件和廠商的技術支持不同。這樣,工具和軟件都可以重復使用,不用購置各種開發工具。事實上,在芯片的整個成本中CPU只占很少的一部分,芯片的價格不是由CPU核來定的,再按位數來評價MCU已經沒有意義,應按外圍部件和Flash容量等來定。這顯現出通用的內核、廣泛的支持、一致的開發環境是未來的發展趨勢,也是嵌入式系統教學的新曙光。
2010年筆者撰寫了《ARM Cortex微控制器教程》,包括4家公司的MCU,主要涉及GPIO、中斷和定時器的片上資源基本編程,力圖比較各家的編程方式。主要目的有兩個:一個是推動高端MCU不要再面向寄存器編程,而要使用庫函數;另一個是體現Cortex MCU有很好的生態環境,獲得多家廠商支持。還有一點是,盡量給出寄存器名、指令等的英文原義,而這是國內翻譯資料沒有注意到的。通過LM3S競賽看到,優秀的大三學生一個月就能上手Cortex微控制器。這種32位MCU完全可用C語言編程,不涉及匯編語言。片上外設的寄存器配置更加復雜,支持的工作方式也更多。廠家紛紛都提供了庫函數,只要用戶依據參數配置外設,使用庫函數就能方便地操作外設,不必再記住寄存器名、寄存器位定義去使用匯編語言了,而這也是學習單片機難度最大的地方。現在編程只需關注外設的工作方式,了解有哪些操作即可,大大降低了學習門檻。只要學會C語言,實驗指導書中許多樣例程序就可直接使用。
總之,嵌入式系統教學所用的處理器應選用主流芯片,如有廠家大學計劃支持更好。如果教學偏重硬件設計,要教會學生制板、做硬件應用系統,最好是選擇8/16位芯片、Cortex-M芯片。200MHz以上的Cortex-A芯片對布線的要求較高,而且表面貼裝引腳多的芯片也需要專門的焊接設備。如果沒有編程基礎,則可以從8051單片機入手,畢竟用匯編語言的寄存器和存儲器的傳送指令,感覺更直觀些。況且,8051單片機教材是經過多年摸索,消化了國外手冊的內容編寫出來的。不同基礎、不同專業背景的人應根據自己的情況酌情選擇,傾向哪家的處理器也是需要考慮的內容。
興趣是最好的老師,一通百通,大可先專注一家的產品,諸如價廉物美的口袋實驗室開發板和廠家評估板等。
馬忠梅,北京理工大學副教授,多年來一直從事嵌入式教學和研究工作,編寫的教材有:《單片機的C語言應用程序設計》、《ARM嵌入式處理器結構與應用基礎》、《ARM&Linux嵌入式系統教程》、《ARM Cortex微控制器教程》等。
??薛士然
2015-06-02)