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