天天看點

探索嵌入式應用架構(EAF)

EAF是Embedded Application Framework 的縮寫,即嵌入式應用架構。嵌入式應用架構是 Application framework的一種, 是在嵌入式領域的應用架構。

Application Framework——應用架構,是一種軟體架構,軟體開發人員用應用架構作為标準結構,以便實作應用軟體。

那什麼是軟體架構呢?

關于軟體架構

軟體架構是一個抽象的概念, 是提供了通用的軟體功能,可以通過使用者編寫代碼有選擇地改變, 進而提供特定的軟體應用。 軟體架構提供了建構和部署應用程式的标準方式。 軟體架構是一個通用的、可重用的軟體環境, 它提供特定的功能, 作為大型軟體平台的一部分, 以促進軟體應用程式、産品和解決方案的開發。 軟體架構可能包括輔助程式、編譯器、代碼庫、工具集和API , 彙集了所有不同的元件, 便于一個項目或系統的開發。

那些我們用過或者常見的軟體架構太多了:

  • windows上MFC
  • .net Framework
  • spring framework以及衍生的SSH等等
  • Entity Framework
  • Robot Framework
  • play framework
  • Zend framework
  • Oracle Application Development Framework
  • Cactus Framework 
  • Eclipse XXX framework
  • AWS Lambda Framework
  • FrondEnd framework:Vue.js,Angular.js,React等等
  • ......

尤其是Web 應用架構更加豐富多彩,基于各自語言實作的Web Application Framework 不勝枚舉。

進一步, 很多的系統架構也引入Framework 的概念,例如,Enterprise architecture framework等等,甚至在研發管理上也同樣湧現了Framework,例如 Project Management Framework,Risk Management Framework等,外延在不斷在融合放大。

關于軟體應用架構的開發著述也有很多,例如側重API設計的《軟體架構設計的藝術》等等。

嵌入式系統的應用架構

與一般的電腦相比, 嵌入式裝置有着自己的特性, 例如耗電量低、體積小、操作範圍粗糙、機關成本低。 這是以有限的加工資源為代價的, 這使得程式和互動的難度大大增加。 然而, 通過在硬體之上建立智能機制, 利用可能存在的傳感器和存在一個嵌入式單元網絡, 既可以在機關和網絡一級對現有資源進行最佳管理, 并提供遠遠超出現有可用功能的增強功能。 這或許就是嵌入式應用的必然性。

探索嵌入式應用架構(EAF)

EAF 是面向嵌入式系統的軟體應用架構。嵌入式系統是一個在較大的機械或電氣系統中具有專用功能的計算機系統, 通常具有實時計算限制。嵌入式系統從便攜式裝置, 如數字手表和 MP3播放器, 到大型的固定裝置, 如交通燈, 工廠控制器, 以及大部分複雜的系統, 如混合動力車、核磁共振成像和航空電子裝置等等。 複雜性從低到單一的微控制器晶片, 到非常高的多個機關等等。

鑒于如此的複雜,很難有一個統一的應用開發架構。

但是,參考Java 面向資源的分類(J2EE,J2SE,J2ME,Java Card等),我們可以對嵌入式系統的應用架構進行嘗試分析。

手機上的應用架構

由于手機的功能越來越強大,很多時候被認為超出了嵌入式系統的範疇。但是,了解手機上的應用架構,對于EAF而言,還是大有裨益的。

手機上的應用開發架構一般也被稱為 Mobile Development Framework。近些年,随着智能手機的普及,面向手機開發的應用架構已被人們所熟知,例如 ios development framework,Android development framework,還有基于HTML5的混合程式設計架構PhoneGap等等。

尤其是Android,如果資源允許,基于android的嵌入式裝置可以輕松使用android的軟體應用架構。google 還面向嵌入式裝置推出了android wearable 等一系列方案,當然iOS 也是如此。

下圖就是那張經典的android 架構層次圖:

探索嵌入式應用架構(EAF)

Android應用程式架構分為應用層、應用架構層、系統運作庫層和Linux核心層,在開發應用時就是在這個架構上進行擴充。Android應用架構的部分功能如下:

  • android.app:提供高層的程式模型和基本的運作環境。
  • android.content:包含對各種裝置上的資料進行通路和釋出。
  • android.database:通過内容提供者浏覽和操作資料庫。
  • android.graphics:底層的圖形庫,包含畫布,顔色過濾,點,矩形,可以直接繪制螢幕上。
  • android.location:定位和相關服務的類。
  • android.media:提供一些類管理多種音頻、視訊的媒體接口。
  • android.net:提供幫助網絡通路的類,超過通常的java.net.*接口。
  • android.os:提供了系統服務、消息傳輸和IPC機制。
  • android.opengl:提供OpenGL的工具。
  • android.provider:提供通路Android内容提供者的類。
  • android.telephony:提供與撥打電話相關的API互動。
  • android.view:提供基礎的使用者界面接口架構。
  • android.util:涉及工具性的方法,例如時間日期的操作。
  • android.webkit:預設浏覽器操作接口。
  • android.widget:包含各種UI元素(大部分是可見的)在應用程式的布局中。

智能手機的資源還是相當豐富的,在智能手機之前的Feature Phone 同樣有着自己的應用開發架構,隻是不如Android 和iOS 那麼普及,已經逐漸被人們所遺忘。 但是,這些應用架構的設計思想和實作方式同樣有着重要的參考性。例如,Qualcomm的BREW(翻開了曆史的回憶)。

探索嵌入式應用架構(EAF)

BREW 指Binary Runtime Environment for Wireless 的縮寫,從基本的層面而言,BREW 平台就是手持裝置上嵌入式晶片作業系統的接口或抽象層。

  • BINARY 是指二進制。BREW的程式設計接口是一套二進制的函數庫。所有基于BREW的應用和擴充類被編譯和聯接成二進制代碼,在本地執行。
  • RUNTIME是指運作時間。所有基于BREW的應用和擴充類志在運作時被發現和調用,這一點很像動态連接配接庫,事實上,BREW的應用和擴充類的模拟器版本就是一個DLL。
  • ENVIRONMENT是指環境。BREW是一個開放而且靈活的環境,提供了大量的程式設計接口,并可以管理豐富的業務。
  • WIRELESS是指無線。BREW 可以充分無限裝置的特性,快速有效的運作與低 RAM/FLASH 的環境中,使有限的無線網絡資源得到有效的使用。

BREW基本上遵從COM這一元件構架的。元件架構的一個優點就是應用可以随時間的流逝而發展進化,除此之外,使用元件還有一些可以使對以有應用的更新更加友善和靈活的優點,如應用的定制,元件庫以及分布式元件等。

M2M的應用架構

鑒于 M2M 技術的特點, 系統設計者可能不得不從頭開始建構整個 M2M 體系結構。其核心是, M2M 技術包括增加一個裝置或裝置的智能服務, 并将該裝置與可以監控或控制該裝置的後端基礎設施連接配接起來。 為了實作這一目标, 一個 M2M 裝置使用了兩個基本元素: 與後端通信的基礎設施(無線數據機或子產品)和運作服務的軟體。

通過提供一種将 M2M 服務直接嵌入通信子產品的方法, 以及預先安裝裝的軟體子產品、連接配接能力和處理資源方式,一般的M2M 應用架構如下:

探索嵌入式應用架構(EAF)

EAF一般包括下列組成部分:

優化的輕量級作業系統

雖然一些 M2M 應用程式需要更強大的 RTOS, 但大多數都不需要。 作業系統的設計能夠提供 API 來控制語音, 資料調用, 短信, 以及 TCP/IP 連接配接。 應該經過優化, 以充分利用直接通路協定棧的能力。 為了提供對連接配接應用程式的全面支援, 作業系統還應提供一個核心功能集, 其中包括:

  • 實時性, 包括保證對外部或内部中斷的響應時間, 不論其狀态如何。
  • 靈活安排任務的優先順序。
  • 多任務能力, 以定義和同步服務所需的任務。
  • 在處理速度和功率選擇方面的靈活性, 以優化電池壽命。
  • 記憶體、固件和軟體保護功能。
  • 能夠使用API通路蜂音頻等媒體和資料路徑。

軟體庫

為了簡化開發過程和市場的速度時間, EAF 應該包括各種軟體庫和API, 提供裝置或服務可能需要的各種功能。 這包括定位、全面的網際網路連接配接協定、無線和網際網路安全等服務。 EAF還應支援為目标市場具體需求開發的第三方軟體庫。 理想情況下, EAF 不僅應得到通信子產品供應商的支援, 還應該得到合作夥伴和開發者的支援。

開發工具

EAF 還應該包含一個開發工具包, 以便于編碼、調試和監視 M2M 應用程式, 這些工具應該是開源的, 可以免費使用。 最終, EAF 應該提供開發 M2M 應用程式并将其嵌入子產品所需的一切。

雲連接配接

最後, EAF 應該提供工具來簡化連接配接裝置的雲管理, 包括一個完全實作的系統來處理裝置監控和軟體/固件更新。 該系統應該允許開發者監控裝置的健康狀況, 并識别潛在的問題。 它還應該包括已驗證的作業系統遠端更新工具, 以及使用更新檔機制的熱修複工具。

面向腳本的EAF

對于為嵌入式系統建立軟體的開發者而言,對腳本的編寫并不陌生。 選擇腳本是往往是解決問題的最快方法。一般地,腳本被用來自動建構和運作驗證測試。作為全棧必備的Javascript被廣泛應用于網頁、 web 伺服器和移動應用程式中,在嵌入式系統中也将占據一席之地。

探索嵌入式應用架構(EAF)

出于對性能的擔心,可以通過一些技術手段提升JavaScript的運作性能:

1.充分利用内置函數和對象。 Javascript 語言擁有支援數組、 JSON、正規表達式和其他字元串運算的複雜内置對象。 這些實作通常在 JavaScript 引擎中得到了很好的優化。 

2.小心編碼。由于腳本比本地代碼慢, 代碼優化在性能重要的地方是至關重要的。 Javascript 的動态特性意味着 JavaScript 引擎通常不能像 c 編譯器那樣有效地優化代碼。

3.混合程式設計。沒有一種語言适用于所有情況, 是以要為工作選擇最好的語言, 而不是100% 純粹地使用。 每一個 JavaScript 引擎都提供了一種從腳本調用本地代碼的方法。 如果不确定性能, 首先在 JavaScript 中實作, 因為它更容易執行。 如果存在性能瓶頸, 請在 c 中重新實作函數。

在 Mozilla 的一個項目 asm.js 中出現了一個可以替代使用 c 的方法。 定義了一個嚴格的 JavaScript 子集, 它更容易被翻譯成本地代碼或 c 源代碼。 利用 c 和 JavaScript 之間的文法相似性, 使翻譯變得簡單明了。 嵌入式開發人員可以在 asm.js JavaScript 子集中編寫性能關鍵代碼, 并将其編譯為本地代碼, 作為建構過程的一部分, 而不是依賴 JIT。

對于記憶體的使用而言,從積極的一面來看, JavaScript 使用了一個垃圾收集器, 進而消除了顯式釋放記憶體的需要。 通過這種簡化, 嵌入式開發人員有時間專注于其他方面的開發。 

目前,已經有多個開發系統開始支援嵌入式的JavaScript:

  • Espruino是一個單片機開發闆, 被稱為微控制器的 JavaScript。 它運作開源的 Espruino JavaScript 引擎, 它支援 JavaScript 标準的子集。
  • Tessel 是一個內建了Wi-Fi的JavaScript 微處理器,并提供一個相容Node.js的 API,開發人員可以使用Node.js進行開發。
  • Marvell Semiconductor 的 Kinoma Create 是一個運作在 Marvell 半導體上的"JavaScript 物聯網建構工具包", 它支援完整的 JavaScript 5.0.

在國內,也有類似的開發系統,例如老友周愛民老師所在的ruff.io。

探索嵌入式應用架構(EAF)

總之,Javascript 在嵌入式裝置上的潛力很大, 可以簡化嵌入式程式員的開發工作, 并為客戶提供更可靠、更可定制的産品。

綜上所述,嵌入式應用架構(EAF)對嵌入式系統的成功有着重要的意義。特别是對于嵌入式開放平台而言,能夠提高開發者的開發效率,促進生态系統的繁榮。然而,IoT中還有很多超輕量級的裝置,或許根本沒有OS,被稱為“智能顆粒”,笑稱“智霾”,可能不需要EAF,也可能是一種另外形态的EAF,隻是我不知道而已。

參考:

  • Jaroslav Tulach, 《軟體架構的設計藝術》,人民郵電出版社,2011
  • 金泰延 宋亨周 樸知勳 李白 林起永, 《Android 架構揭秘》,人民郵電出版社,2012
  • 曹洪偉,《BREW 進階與精通》,電子工業出版社,2009
  • http://www.embedded-computing.com/hardware/embedded-application-frameworks-simplifying-the-development-of-m2m-devices

繼續閱讀