隨著專為
嵌入式系統編程人員所設計的《Embedded System Design》平面雜誌劃下句點,我們更能看出未來的嵌入式
軟體設計趨勢將更強調自動生成的
程式碼,而不再那麼重視手寫編程了。
《Embedded System Design》最早在1988年以《Embedded Systems Programming》(ESP)的名稱出刊時,我才剛高中畢業。就像當時大多數人一樣,我從來沒聽說過「嵌入式系統」一詞,也沒想太多深藏於另一種產品中的電腦形式。六年後,我取得了電子工程師的學位,也像1990年代中期的許多電子工程師一樣找到了一份嵌入式軟體設計工作(而非硬體設計)。不久,我在一位同事的辦公桌上看到了這本雜誌,馬上就訂閱而且成了忠實讀者。
早期發展
1990年代初的情形就和現在一樣,學校中從來沒教過如何編寫出可靠的嵌入式軟體等專業知識。我在大學中唯一上過一門有關編程的課就是FORTRAN;後來才知道曾有過兩次實作課程學習組合語言和C語言編程就是我在編寫嵌入式軟體方面僅有的正規教育。我大多經由工作以及這份雜誌的內容學習,從這些篇章間第一次學會了如何編寫元件驅動程式、移植並使用作業系統、滿足即時的期限要求、建置有限狀態機等技巧,以及除C和組合語言以外其它編程語言的優缺點、遠端除錯與JTAG等等。
在那個時代,擔任韌體開發人員的我每天日常工作就是和英特爾hex文件、元件編程器、UV擦除器、僅kb容量的記憶體、8/16位元處理器、電路模擬器與ROM監視器等東西打交道。數據手冊有如就像書本一樣地多又厚,全部集中在一起的話就可以佔滿整個書架。我在我的辦公桌上的 HP-UX 工作站編寫韌體程式,後來必須到樓下實驗室去燒晶片,插入原型板中,再用ICE進行測試與除錯。我還記得有一個特別棘手的專案,所用的編譯器和元件編程器距離唯一可用的目標硬體8英哩遠;而一個單色的紅光 LED 和一款滿是灰塵的示波器就堆在我的除錯工具箱附近。
我也和你一樣在1990年代中期就有網際網路可用,但除了特定的幾個FTP站點(還有人記得sunsite.unc.edu的FTP嗎?或Gopher?)以外,當時的網路並沒有太多對我的工作有用的資訊,大多是一些閃爍的標題文字以及The Hampster Dance(它直到現在都還存在呢!);而亞馬遜(Amazon)也還只是當時世界上最大的河流。那時也還沒有Embedded.com或EETimes.com。為了學習軟體和硬體的最佳實作途徑,我晚上還在進修MSEE和CS課程,同時也常參與嵌入式系統大會(ESC)。
當時,我記得也沒有任何有關嵌入式編程的書籍。我發現有關C語言的每一本書都是從寫"Hello, World"開始介紹起,但都十分抽象,最後也都未能提到如何解決週邊控制、中斷服務程序、連接組合語言程序與作業系統(無論是否為RTOS)等問題。因此,多年後當Jack Ganssle問我時,我不知哪來的勇氣認為自己能夠針對嵌入式C編程領域所欠缺的部份撰寫一本書,後來也真的和O'Reilly簽約,開始著手寫書──但我並沒在這本書一開始,而是到了最後才介紹用 RS-232 移植編寫"Hello, World"。
到了1998年,在多次參與嵌入式系統大會後,有機會認識了《Embedded System Design》的主編Lindsey Vereen。除了寫書以外,我還曾經為《Embedded System Design》寫過幾篇文章,因而Lindsey已經對於我解釋技術差異的能力留下深刻印象。不過,當Lindsey告訴我他正在尋找一位技術編輯人選時,那時還不知道他屬意的人就是我。
未來的發展趨勢
從我第一次接觸到這本雜誌,就與它結下了不解之緣;接著先是技術編輯到後來成為主編及其後的特約編輯,這一直是我在個人職業生活中最精彩的一部份。在這本《Embedded System Design》創辦後的前十年,我自己就是這本雜誌及其中許多專欄作家和特約編輯的忠實讀者,到了第二個十年,我認為自己的努力更有助於使其成為一個提供讀者交換關鍵設計理念、實作以及產業學習時更有價值的討論場域。而今,儘管我能瞭解為什麼這本雜誌光靠現有的平面廣告再也撐不下去了,但對於它結束發行還是感到傷心與不捨。
回想過去的這段時光,嵌入式軟體設計領域真的發生了許多改變。時至今日,組合語言已經很少被用到了,C和C++就更不用說了。 EPROM 及其元件編程器與UV擦除器已被快閃記憶體與開機載入程式所取代。匯流排寬度與記憶體容量也顯著地增加了。昂貴的電路模擬器與 ROM 監示器已經轉型為較便宜的JTAG除錯。 ROM-DOS 已被微軟的任何嵌入式Windows作業系所取代。而開放來源的Linux由於發展得相當不錯,不但限制 RTOS 產業的成長,同時也成為我們期望能更專精以便為履歷表加分的技術。
那麼,未來將會發生什麼呢?嵌入式編程人員在2020年、2030年或2040時的日常生活與體驗又會是什樣子的呢?在此,我提出將影響未來這些時間點的三大發展趨勢,特別是其中每一個趨勢已經開始發生了。
趨勢一:32位元CPU實現大量應用
我的第一個預測是低成本、低功耗且高整合的微控制器將為32位元帶來最高度的大量應用領域──最佳例子就是當今的ARM Cortex-M 系列。8位元和16位元 CPU 將隨元件過時逐漸減少應用量。雖然你可能已在為32位元處理器編程,而發現目前仍是8位元與16位元處理器推動整體 CPU 晶片銷售量的現況,但其實我指的是像基於 8051 及其它30-40前前那種指令集架構的微處理器。這些舊式架構在今日仍十分普遍,只是因為特定嵌入式處理所需的低利潤、大量應用必須竭盡所能地節省BOM成本的每一分錢。
8位元和16位元架構的限制對於必須使用它們的嵌入式系統開發人員帶來許多方面的挑戰。首先,由於有限的位址匯流排寬度導致記憶體容量受限、還有記憶體庫、分割技術以及其他設法超越那些限制的變通辦法。其次,這些 CPU 在決策方面的效果優於其數學運算──這是因為缺乏有效處理較大整數的能力,而且也沒有浮點運算性能。最後,這些舊式的處理器也缺乏能夠執行像Linux等大型網際網路作業系統的能力,同時也缺乏由 MMU 所提供的安全與可靠性保護。
當然,總會存在許多相當具成本限制的運算應用,所以我的預期並不是指8位元和16位元架構被完全淘汰,而是基於先進指令集架構與電晶體幾何的32位元微處理器整體價格(包括BOM成本與功耗)逐漸下滑,最後將會贏在價格上。這將可為設計人員帶來更充裕的電腦運算性能,並有助於簡化工作。
趨勢二:複雜度推動C以外的語言發展
我的第二個預測是C編程語言在嵌入式系統領域佔優勢主導地位的美好時光已經屈指可數了。
請不要誤會我的意思,C語言是一種我更能掌握且很喜歡的編程語言。但是,正如你可能知道的,C根本就無法勝任打造需要超過1百萬條程式碼的系統。然而,1百萬多行程式碼的系統卻是長久以來推動編程領域的嵌入式軟體所需的複雜程度。有些事情就是得具有一定的複雜度。
此外,還有嵌入式系統開發人員平均年齡迅速在增加中,而C語言通常不再於大學課程中教授等等迫在眉睫的問題。因此,即使每個產業對於嵌入式智慧的要求越來越高,熟悉或有經驗的C語言編程人員人數卻在不斷減少中。有些事也得要有人員才能完成啊!
但是,什麼樣的替代語言可用於建立即時軟體、直接地操縱硬體,以及快速地移植到眾多指令集架構呢?它當然不會是 C++ 或 Ada 或 Java ──這些都已經被試過,而且發現其不足之處了。然而,在經歷過許多CPU產品系列以及試過這麼多其它語言後,開發一種新的編程語言可能也不見得是我們想要的答案。
因此,根據系統規格來看,我預期能為我們可靠地自動生成數百萬行C程式碼的工具,最終將成為新的替代方案。以目前符合這種趨勢的現有工具來看,我們可以密切注意Miro Same用於事件導向編程的開放來源 Quantum Platform 架構及其免費的 Quantum Model 繪圖建模工具選項。你可能並不喜歡當今自動生成程式碼的作法,但我保證一旦你在為狀態機架構進行編程時,你將看到這整個結構的好處,以及它可為編程帶來的效率。
對於這一類的工具而言,我認為C語言是一種相當普遍的輸出語言,這是因為C語言能直接操縱硬體暫存器,而且為大量市場開發的每一種處理器都有相容的編譯器可用。其實我真的期望持續要求具有技能與興趣的人員能為其協助調整程式碼生成或編寫元件驅動器的性能,使其得以更密切地整合於硬體中。
趨勢3:連接性提升安全的重要性
越來越多的嵌入式系統之間密切地彼此互連,並連接到網際網路。你可能聽說過「物聯網」(Internet of Things;IoT)以及「泛在運算」(ubiquitous computing),也可能已經把 TCP / IP 加進你的設計中。但連接性還有太多我們從未瞭解到的層面,或許其中最明顯的就是安全性。
互連的設備離不開安全性,因此,我們必須從一開始就為連接設備加進安全性的設計。觀察這整個產業,大多數的嵌入式設計人員很大程度上並不熟悉安全性。當然你已經讀過加密演算法,也知道幾個相關的技術名詞。但大部份的嵌入式社群就和安全性設計人員一樣地似懂非懂,而其組織也無法為其帶來太多協助。安全性的強度僅僅和這一系統鏈中最薄弱的環節一樣。
這種狀況必須改變。正如快閃記憶體取代UV可擦除的 EPROM 一樣,在未來的幾十年,透過網路下載增補程式與軟體升級也將成為主要的機制。我們首先必須架構出安全的系統,然後才可能安全地進行下載,從而使我們的產品有能力免於駭客的威脅與攻擊。
結語
無論未來的情況如何發展,我確定嵌入式軟體開發仍將會是一個具吸引力與挑戰性的專業領域。而且你也會看到我繼續在Embedded.com、EmbeddedGurus.com以及twitter.com/embeddedbarr發表有關嵌入式領域的相關文章。
本文作者Michael Barr是Barr Group的技術長,專精於安全且可靠的即時運算嵌入式軟體架構。Michael Barr曾任教於馬里蘭大學(University of Maryland)與約翰霍普金斯大學(Johns Hopkins University);他還曾發表過三本書,以及超過65篇有關嵌入式系統設計專文。
編譯:Susan Hong
(參考原文:Trends in embedded software design,by Michael Barr)