就像任何開發領域一樣,嵌入式系統的開發也像大海一樣:深海洋流相對上較穩定,而看似平靜的海面下卻可能暗潮洶湧。冒著可能被淹没的危險,我想表達的是,當今嵌入式系統的開發基礎,基本上就跟工程師當年必須在硬連線微電腦上撥動套環開關才能跑程式碼一樣。就像那些工程師一樣,我們至今仍得嘗試監控外部事件,並做出適當地回應。那麼,我們如何在持續變化中求發展?

從表面上看,用於建構嵌入式系統的硬體、軟體和方法日益精進——或至少有所不同。為了衡量這些變化,《Embedded.com》分別在1999年、2009年和2019年進行了調查,而今藉著比較並分析這些調查結果,將有助於一窺過去20年來嵌入式開發如何演變。

實際上,每一項調查的問題本身都反映了其中的一部份變化。1999年的調查涉及很多部份,針對交叉編譯器、物件導向的設計方法以及電路中硬體模擬器出了許多問題,但針對作業系統(OS)方面的討論並不多。到了2009年的調查,排除了這些特定部份的問題,並加入了更多有關多處理器設計、OS以及特定的嵌入式Linux等更多資訊,但諸如物聯網(IoT)和人工智慧( AI)之類的主題還沒開始受到任何關注。而在2019年的調查中,包括IoT、AI以及安全性這些主題,才開始顯露更廣泛的興趣和積極運用。

由於在2009年時針對調查方法進行了大幅改變,因此很難比較這幾次調查的細節。在某些情況下,同樣的一般性問題被延伸為答案不只一個的多重選擇題。這對於任何解釋都增加了不確定性,這在以下的「設計功能」部份更多的討論。此外,調查結果中還缺少1999年的部份調查資料,因此有些部份只能看到2009年和2019年的數據。最後,值得注意的是,調查結果的誤差範圍通常在大約3%到6%以上,因此想要詳細加以比較可能極具風險。

嵌入式應用重點和功能

過去十年來,嵌入式設計的主要應用領域有什麼改變?儘管工業和消費領域仍排名前五大重點應用,但汽車和IoT應用有關的設計開始佔據主導地位(表1)。或許我們可以說在2009年被稱為數據通信(datacomm)的設計,可以包含在2019年的通訊中。

20200109_embedded_NT01T1

表1:前5大嵌入式應用領域。 (%的受訪者)

過去二十年來,設計的本質如何變化?1999年的調查列出了將Web技術整合於設計中的多個問題。在研究1999年的調查時,特別有趣的是一點是:有43%的受訪者表示並不打算這麼做,但有14%的受訪者表示願意。我其實並不確定該問題中「Web技術」究竟表示什麼,但希望不會有人想把httpd伺服器嵌入其系統中。

更廣泛地來看,表2顯示三項關鍵設計功能的演變。唯一真正的變化是連網設計大幅增加,從2000年初約佔35%的設計,到2010年時已經高達90%以上了。(我認為該調查方法沒注意到連網和無線可能互換,但從加總的統計數字來看, 2009年和2019年所顯示的連網設計量大致相同。)

同樣地,嵌入式開發人員打造以電池供電的設計至少長達十年之久了。有時候,業界會忘記電池供電的設計早在IoT和可穿戴裝置興起之前就已經存在。

20200109_embedded_NT01T2

表2:關鍵設計功能。 (%的受訪者)

程式語言

值得注意的是,C/C++並不一定是嵌入式開發的主要語言(圖1)。由於每項調查中可能潛藏其他的回應,加上更高性能的處理器崛起,很可能減少了對於組合程式碼的一些需要。但事實是,只有約37%的專案能按時按期完成——儘管2009年表示希望加速開發流程,但這個數字到了2019年也沒有多大的改變(參考圖6)。

20200109_embedded_NT01P1

圖1:主要的開發語言。(%的受訪者)

2009年底,開放原始碼OS開始取代商用OS的使用。到了2019年,這一趨勢仍持續進展。有趣的是,取代商用OS並不僅僅是因為開源OS的興起。客製/內部專有OS的使用率也持續增加(圖2)。

20200109_embedded_NT01P2

圖2:作業系統(OS)類型。(%的受訪者)

處理器架構

過去十年來,32位元的處理器架構雖然仍舊在使用中,但64位元架構卻有了顯著的進展(圖3)。可能有人會認為這就是演進的主要趨勢,因為開發人員不斷地尋求更寬的位元寬度(從8位元到16位元、32位元再到64位元),以期實現更好的處理器性能以及更高效的記憶體週期(包括指令快取)。

20200109_embedded_NT01P3

圖3:處理器架構。(%的受訪者)

獨立型處理器 vs 多核心處理器

2010年最明顯的趨勢可能就是設計從多處理器晶片精簡為多核心元件——從採用相同處理器的多晶片演變成同質多核心元件,或者是從採用不同處理器的多晶片進展至異質的多核心元件(圖4)。

20200109_embedded_NT01P4

圖4:單一處理器晶片 vs 多核心處理器。(%的受訪者)

選擇處理器的決定性因素

二十年來,決定處理器選擇的主要因素並沒什麼改變(圖5)。軟體開發工具的可用性仍然是工程師的首選。並不是所有人都情願在面板上切換機器程式碼。但有意思的是,從2000年開始以來,熟悉處理器架構不再是最重要的了,成本和IO/周邊裝置功能的重要性也(相對地)在持續下滑中。

20200109_embedded_NT01P5

圖5:影響處理器選擇的因素。(%的受訪者)

技術挑戰

最後,對於即將到來的技術挑戰之看法有何轉變?如果我們比較2009年和2019年調查中列出的前五大挑戰,那麼,整合、程式碼複雜度以及軟體工具仍然是最主要的顧慮。令人玩味的是,過去十年來,人們對於上述在開發過程的顧慮逐漸消失,取而代之的是開始擔心低功耗和安全性。

因此,對於安全的顧慮以及為了減輕威脅而採取的各種措施,構成了2019年的調查重點。在2009年,只有3%的受訪者認為安全問題很重要。但如同先前提到的,2009年和2019年在按時完成專案的統計相似度較低,顯示2019年對於開發過程中的顧慮轉變,主要是和更關鍵的問題出現有關。

20200109_embedded_NT01P6

圖6:最主要的技術挑戰。(%的受訪者)

那麼,對於接下來的2020年代,這些結果又意味著什麼?

我們可以從這些調查結果中推斷,軟體開發工具以及管理程式碼大小等問題仍然很重要,而像性能和週邊裝置等處理器特性的重要性則相對降低些。另一方面,在2020年代,只有少數的新技術(例如不用編寫程式碼的開發工具、量子運算以及支援現場訓練神經網路模型的AI核心等)出現,似乎也為設計挑戰帶來了重大轉變。是這樣嗎?

嵌入式系統仍然需要工具來編寫(或產生)程式碼,而且,對於更複雜的異質多處理器硬體設計而言,也確實需要這麼做。這些設計仍然必須連接實體世界,但是,介面的性質可能更進一步發展,而不僅僅來自硬線介面、感測器或協作對等裝置等。未來將會持續要求更多的功能性,從而需要更先進的硬體提供更高性能以及進一步強化的功能,才能執行更複雜的應用。

在即將來臨的下一個十年,嵌入式系統設計仍將需要更有效地連接至數據來源,以最低延遲執行更複雜的程式碼,以及克服更複雜的安全威脅,同時還得保持在超低功耗。未來,我們很可能採用全然不同的途徑,但目標將保持不變。

探索更多調查結果,請點選《Embedded.com》分別在1999年2009年2019年調查連結。

編譯:Susan Hong

(參考原文:How embedded development has evolved over the past two decades,by Stephen Evanczuk)