為什麼要學習嵌入式系統課程?

湯曉發表於2014-12-31

嵌入式系統是專用計算機,使用者通常不會將其視為計算機。例如手機,交通燈控制器,以及可程式設計恆溫控制器。在之前的文章中,我辨析了為什麼所有電腦科學家都應該學習編譯器課程作業系統課程。自從這些領域成為電腦科學的核心,無需多說,所有的畢業生都必須掌握。然而,嵌入式系統卻沒有得到主流電腦科學家的關注。那麼,為什麼你應該學習嵌入式課程?

大部分計算機都是嵌入式裝置

所有生產的處理器中大約99%都用於嵌入式系統。僅2007年,基於ARM處理器架構的晶片生產了29億片,所有這些晶片基本上都用於嵌入式應用。這些處理器應用在你的汽車,電氣用具和玩具中;安裝在我們的建築中;對提供交通,水和電力等基礎設施的高效運作至關重要。世界越來越依靠嵌入式系統,作為技術專家,瞭解它們的工作原理是非常有用。桌面計算機市場幾乎飽和,而嵌入式市場正在增長,只要人們還認為隨時隨地的計算是有必要的,嵌入式市場將會保持增長。

嵌入式程式設計是有趣

Make雜誌出色的完成了推廣嵌入式系統專案的工作。樂高Mindstorm,Arduinos和類似產品都不再那麼昂貴,能夠用於學習嵌入式程式設計。控制物理硬體非常有趣,開啟Hack A Day的網站,搜尋“paintball sentry”,我保證不會有哪個技術宅會繃著臉告訴我這東西一點也不酷。今年春天,我聽到Sebastian Thruns高興的談論他的團隊努力贏得無人駕駛機器人挑戰賽(網上有一些他的演示材料)。

嵌入式程式設計是與眾不同的

硬體裝置的監控和其他程式設計差別很大。例如,沒有乾淨離散的輸入,你發現自己需要處理有噪聲加速計資料流。當控制電機時,你的程式碼突然必須要考慮實際的每一塊金屬片,如果不小心,你就會毀壞硬體或者燒掉驅動晶片。類似地,機器人的工作環境十分嘈雜,不利於感測器資料的採集,它們從不在一條直線上前進,也不會返回它們的初始位置。解決所有問題需要健壯的演算法,這些演算法和我們在電腦科學中常用解決的演算法問題大不相同。

嵌入式能讓你解決硬體問題

嵌入式程式設計中的困難問題會促進你在受限平臺上編寫高可靠系統。軟體是併發的(通常同時使用中斷和執行緒),必須兼顧硬體裝置和外部的時序約束,小心處理各種錯誤情況。總的來說,你會突然遇到很多難以解決的程式設計問題。

缺少除錯裝置。最糟糕的情況下,甚至是最基本的printf()函式都不可用,你只能使用邏輯分析儀或者一些LED燈進行除錯。每年和一群電腦科學專業的學生坐在放滿邏輯分析儀的實驗室中給我帶來了很多快樂;起初,他們中大部分人都非常困惑,但是到期末是他們都喜歡(或者至少說習慣)去觀察實際波形或測量一微秒內持續脈衝。

現在的高階程式設計環境很強大,但嵌入式程式設計師一直處理的裸機細節卻被過度封裝。那些和我一樣在1980年代學習程式設計的人對於使用1KB RAM能做什麼有著比較準確的認識。然而,使用Java開始程式設計的程式設計師卻沒有。我曾經幫助過在感測器網路領域做研究專案的學生,他們的程式不能執行,因為程式分配的空間是目標執行平臺可用RAM空間的1000倍。多年以前,我花費相當長的時間除錯呼叫printf()函式變體造成的問題,該函式在一個擁有4KB棧空間的執行緒中分配大約8KB的棧空間。

所有這些困難是可以通過精心設計,認真實施,以及其他技術來克服的。通過學習這些,學生獲得寶貴的技能和思考過程,可以應用到日常程式設計中去。

社會需要嵌入式人才

雖然我怕沒有資料來支撐這個觀點,但有趣的是社會急需那種在嵌入式系統表現很好的學生。大多電腦科學專業的畢業生只懂軟體,大多電子工程和機械工程的學生沒有參考資料就不會程式設計。不管學校給了他們什麼學位,同時掌握這些技能的學生才具有真正的價值。

相關文章