EAF是Embedded Application Framework 的縮寫,即嵌入式應用框架。嵌入式應用框架是 Application framework的一種, 是在嵌入式領域的應用框架。
Application Framework——應用框架,是一種軟件框架,軟件開發(fā)人員用應用框架作為標準結構,以便實現(xiàn)應用軟件。
那什么是軟件框架呢?
關于軟件框架
軟件框架是一個抽象的概念, 是提供了通用的軟件功能,可以通過用戶編寫代碼有選擇地改變, 從而提供特定的軟件應用。 軟件框架提供了構建和部署應用程序的標準方式。 軟件框架是一個通用的、可重用的軟件環(huán)境, 它提供特定的功能, 作為大型軟件平臺的一部分, 以促進軟件應用程序、產(chǎn)品和解決方案的開發(fā)。 軟件框架可能包括輔助程序、編譯器、代碼庫、工具集和API , 匯集了所有不同的組件, 便于一個項目或系統(tǒng)的開發(fā)。
那些我們用過或者常見的軟件框架太多了:
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 應用框架更加豐富多彩,基于各自語言實現(xiàn)的Web Application Framework 不勝枚舉。
進一步, 很多的系統(tǒng)架構也引入Framework 的概念,例如,Enterprise architecture framework等等,甚至在研發(fā)管理上也同樣涌現(xiàn)了Framework,例如 Project Management Framework,Risk Management Framework等,外延在不斷在融合放大。
關于軟件應用框架的開發(fā)著述也有很多,例如側重API設計的《軟件框架設計的藝術》等等。
嵌入式系統(tǒng)的應用框架
與一般的電腦相比, 嵌入式設備有著自己的特性, 例如耗電量低、體積小、操作范圍粗糙、單位成本低。 這是以有限的加工資源為代價的, 這使得程序和交互的難度大大增加。 然而, 通過在硬件之上建立智能機制, 利用可能存在的傳感器和存在一個嵌入式單元網(wǎng)絡, 既可以在單位和網(wǎng)絡一級對現(xiàn)有資源進行最佳管理, 并提供遠遠超出現(xiàn)有可用功能的增強功能。 這或許就是嵌入式應用的必然性。
EAF 是面向嵌入式系統(tǒng)的軟件應用框架。嵌入式系統(tǒng)是一個在較大的機械或電氣系統(tǒng)中具有專用功能的計算機系統(tǒng), 通常具有實時計算約束。嵌入式系統(tǒng)從便攜式設備, 如數(shù)字手表和 MP3播放器, 到大型的固定設備, 如交通燈, 工廠控制器, 以及大部分復雜的系統(tǒng), 如混合動力車、核磁共振成像和航空電子設備等等。 復雜性從低到單一的微控制器芯片, 到非常高的多個單位等等。
鑒于如此的復雜,很難有一個統(tǒng)一的應用開發(fā)框架。
但是,參考Java 面向資源的分類(J2EE,J2SE,J2ME,Java Card等),我們可以對嵌入式系統(tǒng)的應用框架進行嘗試分析。
手機上的應用框架
由于手機的功能越來越強大,很多時候被認為超出了嵌入式系統(tǒng)的范疇。但是,了解手機上的應用框架,對于EAF而言,還是大有裨益的。
手機上的應用開發(fā)框架一般也被稱為 Mobile Development Framework。近些年,隨著智能手機的普及,面向手機開發(fā)的應用框架已被人們所熟知,例如 ios development framework,Android development framework,還有基于HTML5的混合編程框架PhoneGap等等。
尤其是Android,如果資源允許,基于android的嵌入式設備可以輕松使用android的軟件應用框架。google 還面向嵌入式設備推出了android wearable 等一系列方案,當然iOS 也是如此。
下圖就是那張經(jīng)典的android 架構層次圖:
Android應用程序框架分為應用層、應用框架層、系統(tǒng)運行庫層和Linux內核層,在開發(fā)應用時就是在這個框架上進行擴展。Android應用框架的部分功能如下:
android.a(chǎn)pp:提供高層的程序模型和基本的運行環(huán)境。
android.content:包含對各種設備上的數(shù)據(jù)進行訪問和發(fā)布。
android.database:通過內容提供者瀏覽和操作數(shù)據(jù)庫。
android.graphics:底層的圖形庫,包含畫布,顏色過濾,點,矩形,可以直接繪制屏幕上。
android.location:定位和相關服務的類。
android.media:提供一些類管理多種音頻、視頻的媒體接口。
android.net:提供幫助網(wǎng)絡訪問的類,超過通常的java.net.*接口。
android.os:提供了系統(tǒng)服務、消息傳輸和IPC機制。
android.opengl:提供OpenGL的工具。
android.provider:提供訪問Android內容提供者的類。
android.telephony:提供與撥打電話相關的API交互。
android.view:提供基礎的用戶界面接口框架。
android.util:涉及工具性的方法,例如時間日期的操作。
android.webkit:默認瀏覽器操作接口。
android.widget:包含各種UI元素(大部分是可見的)在應用程序的布局中。
智能手機的資源還是相當豐富的,在智能手機之前的Feature Phone 同樣有著自己的應用開發(fā)框架,只是不如Android 和iOS 那么普及,已經(jīng)逐漸被人們所遺忘。 但是,這些應用框架的設計思想和實現(xiàn)方式同樣有著重要的參考性。例如,Qualcomm的BREW(翻開了歷史的回憶)。
BREW 指Binary Runtime Environment for Wireless 的縮寫,從基本的層面而言,BREW 平臺就是手持設備上嵌入式芯片操作系統(tǒng)的接口或抽象層。
BINARY 是指二進制。BREW的編程接口是一套二進制的函數(shù)庫。所有基于BREW的應用和擴展類被編譯和聯(lián)接成二進制代碼,在本地執(zhí)行。
RUNTIME是指運行時間。所有基于BREW的應用和擴展類志在運行時被發(fā)現(xiàn)和調用,這一點很像動態(tài)連接庫,事實上,BREW的應用和擴展類的模擬器版本就是一個DLL。
ENVIRONMENT是指環(huán)境。BREW是一個開放而且靈活的環(huán)境,提供了大量的編程接口,并可以管理豐富的業(yè)務。
WIRELESS是指無線。BREW 可以充分無限設備的特性,快速有效的運行與低 RAM/FLASH 的環(huán)境中,使有限的無線網(wǎng)絡資源得到有效的使用。
BREW基本上遵從COM這一組件構架的。組件架構的一個優(yōu)點就是應用可以隨時間的流逝而發(fā)展進化,除此之外,使用組件還有一些可以使對以有應用的升級更加方便和靈活的優(yōu)點,如應用的定制,組件庫以及分布式組件等。
M2M的應用框架
鑒于 M2M 技術的特點, 系統(tǒng)設計者可能不得不從頭開始構建整個 M2M 體系結構。其核心是, M2M 技術包括增加一個裝置或設備的智能服務, 并將該設備與可以監(jiān)控或控制該設備的后端基礎設施連接起來。 為了實現(xiàn)這一目標, 一個 M2M 設備使用了兩個基本元素: 與后端通信的基礎設施(無線調制解調器或模塊)和運行服務的軟件。
通過提供一種將 M2M 服務直接嵌入通信模塊的方法, 以及預先安裝裝的軟件模塊、連接能力和處理資源方式,一般的M2M 應用框架如下:
EAF一般包括下列組成部分:
優(yōu)化的輕量級操作系統(tǒng)
雖然一些 M2M 應用程序需要更強大的 RTOS, 但大多數(shù)都不需要。 操作系統(tǒng)的設計能夠提供 API 來控制語音, 數(shù)據(jù)調用, 短信, 以及 TCP/IP 連接。 應該經(jīng)過優(yōu)化, 以充分利用直接訪問協(xié)議棧的能力。 為了提供對連接應用程序的全面支持, 操作系統(tǒng)還應提供一個核心功能集, 其中包括:
實時性, 包括保證對外部或內部中斷的響應時間, 不論其狀態(tài)如何。
靈活安排任務的優(yōu)先順序。
多任務能力, 以定義和同步服務所需的任務。
在處理速度和功率選擇方面的靈活性, 以優(yōu)化電池壽命。
內存、固件和軟件保護功能。
能夠使用API訪問蜂音頻等媒體和數(shù)據(jù)路徑。
軟件庫
為了簡化開發(fā)過程和市場的速度時間, EAF 應該包括各種軟件庫和API, 提供設備或服務可能需要的各種功能。 這包括定位、全面的互聯(lián)網(wǎng)連接協(xié)議、無線和互聯(lián)網(wǎng)安全等服務。 EAF還應支持為目標市場具體需求開發(fā)的第三方軟件庫。 理想情況下, EAF 不僅應得到通信模塊供應商的支持, 還應該得到合作伙伴和開發(fā)者的支持。
開發(fā)工具
EAF 還應該包含一個開發(fā)工具包, 以便于編碼、調試和監(jiān)視 M2M 應用程序, 這些工具應該是開源的, 可以免費使用。 最終, EAF 應該提供開發(fā) M2M 應用程序并將其嵌入模塊所需的一切。
云連接
最后, EAF 應該提供工具來簡化連接設備的云管理, 包括一個完全實現(xiàn)的系統(tǒng)來處理設備監(jiān)控和軟件/固件升級。 該系統(tǒng)應該允許開發(fā)者監(jiān)控設備的健康狀況, 并識別潛在的問題。 它還應該包括已驗證的操作系統(tǒng)遠程升級工具, 以及使用補丁機制的熱修復工具。
面向腳本的EAF
對于為嵌入式系統(tǒng)創(chuàng)建軟件的開發(fā)者而言,對腳本的編寫并不陌生。 選擇腳本是往往是解決問題的最快方法。一般地,腳本被用來自動構建和運行驗證測試。作為全棧必備的Javascript被廣泛應用于網(wǎng)頁、 web 服務器和移動應用程序中,在嵌入式系統(tǒng)中也將占據(jù)一席之地。
出于對性能的擔心,可以通過一些技術手段提升JavaScript的運行性能:
1.充分利用內置函數(shù)和對象。 Javascript 語言擁有支持數(shù)組、 JSON、正則表達式和其他字符串運算的復雜內置對象。 這些實現(xiàn)通常在 JavaScript 引擎中得到了很好的優(yōu)化。
2.小心編碼。由于腳本比本地代碼慢, 代碼優(yōu)化在性能重要的地方是至關重要的。 Javascript 的動態(tài)特性意味著 JavaScript 引擎通常不能像 c 編譯器那樣有效地優(yōu)化代碼。
3.混合編程。沒有一種語言適用于所有情況, 所以要為工作選擇最好的語言, 而不是100% 純粹地使用。 每一個 JavaScript 引擎都提供了一種從腳本調用本地代碼的方法。 如果不確定性能, 首先在 JavaScript 中實現(xiàn), 因為它更容易執(zhí)行。 如果存在性能瓶頸, 請在 c 中重新實現(xiàn)函數(shù)。
在 Mozilla 的一個項目 asm.js 中出現(xiàn)了一個可以替代使用 c 的方法。 定義了一個嚴格的 JavaScript 子集, 它更容易被翻譯成本地代碼或 c 源代碼。 利用 c 和 JavaScript 之間的語法相似性, 使翻譯變得簡單明了。?嵌入式開發(fā)人員可以在 asm.js JavaScript 子集中編寫性能關鍵代碼, 并將其編譯為本地代碼, 作為構建過程的一部分, 而不是依賴 JIT。
對于內存的使用而言,從積極的一面來看, JavaScript 使用了一個垃圾收集器, 從而消除了顯式釋放內存的需要。 通過這種簡化, 嵌入式開發(fā)人員有時間專注于其他方面的開發(fā)。
目前,已經(jīng)有多個開發(fā)系統(tǒng)開始支持嵌入式的JavaScript:
Espruino是一個單片機開發(fā)板, 被稱為微控制器的 JavaScript。 它運行開源的 Espruino JavaScript 引擎, 它支持 JavaScript 標準的子集。
Tessel 是一個集成了Wi-Fi的JavaScript?微處理器,并提供一個兼容Node.js的 API,開發(fā)人員可以使用Node.js進行開發(fā)。
Marvell Semiconductor 的 Kinoma Create 是一個運行在 Marvell 半導體上的"JavaScript 物聯(lián)網(wǎng)構建工具包", 它支持完整的 JavaScript 5.0.
在國內,也有類似的開發(fā)系統(tǒng),例如老友周愛民老師所在的ruff.io。

總之,Javascript 在嵌入式設備上的潛力很大, 可以簡化嵌入式程序員的開發(fā)工作, 并為客戶提供更可靠、更可定制的產(chǎn)品。
綜上所述,嵌入式應用框架(EAF)對嵌入式系統(tǒng)的成功有著重要的意義。特別是對于嵌入式開放平臺而言,能夠提高開發(fā)者的開發(fā)效率,促進生態(tài)系統(tǒng)的繁榮。然而,IoT中還有很多超輕量級的設備,或許根本沒有OS,被稱為“智能顆粒”,笑稱“智霾”,可能不需要EAF,也可能是一種另外形態(tài)的EAF,只是我不知道而已。
電子發(fā)燒友App










評論