作為一種支持面向?qū)ο蟪橄蠛蛙浖M件可擴(kuò)展組合的高級編程語言,Java是開發(fā)用戶界面和應(yīng)用程序軟件的理想選擇。然而,Java軟件如何最有效地解決嵌入式軟件典型的低級問題并且通常用C語言編程,這一點還不太明顯。然而,新的硬實時Java技術(shù)針對的是低級嵌入式實時開發(fā)的特殊需求?并擊敗了混合C和Java混合語言方法。
嵌入式系統(tǒng)與構(gòu)建它們的人以及它們執(zhí)行的底層執(zhí)行引擎一樣多。同樣,在為低級實時計算(ìrubber 與道路相遇)選擇Java 運(yùn)行時環(huán)境時,一刀切的解決方案既不可行也不實用。
在聲稱支持實時垃圾回收的現(xiàn)有虛擬機(jī)中,每個虛擬機(jī)提供的功能略有不同,表示對軟實時截止時間的不同程度的遵守,其中內(nèi)存限制和虛擬機(jī)占用無關(guān)。較少數(shù)量的虛擬機(jī)可以處理較低級別的要求,其中硬實時截止時間、執(zhí)行速度和內(nèi)存占用更為重要。通常,這些虛擬機(jī)與管理底層硬件服務(wù)的底層操作系統(tǒng)或 RTOS 共存。但是,事實是:有時這還不夠好。有時,Java軟件需要超越硬件抽象層,直接與硬件設(shè)備通信。
在Java越來越被認(rèn)為是首選語言的世界中,擁有自上而下的完整應(yīng)用程序覆蓋的虛擬機(jī)技術(shù)可能是一個顯著的優(yōu)勢。許多嵌入式 Java 應(yīng)用程序都是使用兩種語言方法構(gòu)建的。Java 用于應(yīng)用程序的更大、更復(fù)雜和更動態(tài)的部分,而 C 用于較低級別的功能,例如設(shè)備驅(qū)動程序或需要更快吞吐量的應(yīng)用程序部分。
這種選擇的影響會導(dǎo)致通過將Java和C應(yīng)用程序鏈接在一起的Java本機(jī)接口(JNI)進(jìn)行尷尬和不可預(yù)測的轉(zhuǎn)換。人們這樣做的原因很明顯:傳統(tǒng)的虛擬機(jī)太大、太慢、太不可預(yù)測,無法處理低級執(zhí)行。因此,新推出的硬實時Java技術(shù)現(xiàn)在可以使用Java語言而不是C來解決低級實時問題。與JNI技術(shù)相比,這種硬實時Java技術(shù)還為將傳統(tǒng)的高級Java代碼連接到低級C代碼提供了卓越的性能和健壯性。硬實時 Java 現(xiàn)在可以取代 C 代碼來實現(xiàn)直接與硬件通信的設(shè)備驅(qū)動程序。這允許僅Java的連續(xù)統(tǒng)一體,從成熟的Java的1到10秒響應(yīng)時間,一直到硬實時Java的10微秒響應(yīng)時間,這是解決硬件線速度所必需的。
用 Java 替換 C
混合語言方法的弱點是幾個方面的。首先,每當(dāng)應(yīng)用軟件跨越Java和C執(zhí)行之間的邊界時,JNI協(xié)議都會提取高收費。此協(xié)議開銷可能是可執(zhí)行代碼成本的兩倍以上,它破壞了將 C 語言用于應(yīng)用程序的某些性能關(guān)鍵部分的許多性能優(yōu)勢。其次,更重要的是,Java 安全模型會因在
應(yīng)用程序中引入 C 代碼而受到損害。在過去 10 年構(gòu)建的大量嵌入式 Java 應(yīng)用程序中,代表超過 100 萬行嵌入式 Java 代碼,Aonix 支持工程師發(fā)現(xiàn),C 和 Java 代碼之間的 JNI 接口代表了最常見的故障點。
使此問題更加復(fù)雜的是,這些錯誤是最難調(diào)試的錯誤之一。這是因為無意中破壞了 JNI 協(xié)議的 C 程序員會使隨附的 Java 虛擬機(jī)處于不穩(wěn)定狀態(tài)。該錯誤可能表現(xiàn)為 Java 應(yīng)用程序代碼或 Java 虛擬機(jī)本身的實現(xiàn)中的錯誤。虛擬機(jī)供應(yīng)商、Java 應(yīng)用程序開發(fā)人員和 C 開發(fā)人員之間的相互指責(zé)結(jié)果。
Java 規(guī)范請求 (JSR) 302 正在開發(fā)硬實時安全關(guān)鍵型 Java 編程的標(biāo)準(zhǔn)方法。除了支持核電站關(guān)閉和商用飛機(jī)控制等應(yīng)用的嚴(yán)格安全認(rèn)證要求外,安全關(guān)鍵型Java標(biāo)準(zhǔn)還代表了適用于Java語言開發(fā)各種低級代碼的基礎(chǔ)。這個不斷發(fā)展的標(biāo)準(zhǔn)的原型實現(xiàn)已經(jīng)證明,在內(nèi)存占用(超過 100 倍)、吞吐量(高達(dá) 3 倍)和確定性(數(shù)千倍)方面顯著節(jié)省成本。這種低級 Java 代碼能夠展示優(yōu)化 C 語言 10% 以內(nèi)的性能
特征。它能夠通過支持一級中斷處理程序的Java 實現(xiàn)和設(shè)備寄存器輸入和輸出操作來直接控制設(shè)備硬件。
對于那些必須構(gòu)建從動態(tài)高級復(fù)雜性到靜態(tài)低級簡單性的分層軟件體系結(jié)構(gòu)的人來說,已經(jīng)設(shè)計了一種機(jī)制,允許非常高效和健壯地集成低級
硬實時Java組件與高級傳統(tǒng)Java組件。從長期工程角度來看,在整個應(yīng)用程序中消除 C 代碼可以產(chǎn)生更好的控制、更高的可預(yù)測性、更低的軟件維護(hù)成本和更長的軟件壽命。
性能結(jié)果
Aonix 演示具有計算密集型分形程序,其中分形渲染以 C 或硬實時 Java 代碼實現(xiàn)。在這兩種情況下,圖形顯示都是用Java編程的,帶有SWT圖形接口。演示揭示的全 Java 性能提升是高級和低級 Java 代碼之間更清晰集成的好處。全 Java 解決方案清楚地顯示了在高級 Java 代碼和低級 C 代碼之間進(jìn)行集成所需的 Java 本機(jī)接口帶來的低效率。
該演示是在嵌入式 Linux 環(huán)境中運(yùn)行的,對于此特定演示,不需要解決裸硬件問題。事實上,傳統(tǒng)的Java和硬實時Java技術(shù)將在大多數(shù)嵌入式操作系統(tǒng)和商業(yè)RTOS環(huán)境中運(yùn)行。硬實時Java技術(shù)非常簡單,也可以安裝在裸硬件上運(yùn)行,而無需底層操作系統(tǒng)。
除了從應(yīng)用程序中消除 C 語言提高了可靠性、可維護(hù)性和開發(fā)人員生產(chǎn)力之外,此演示還表明,全 Java 解決方案的運(yùn)行速度比等效的 Java-C混合程序高出 2 比 1。確切的加速比取決于縮放系數(shù)和窗口大小。通過一個特定的測量,全Java程序的運(yùn)行速度比混合程序快2.33倍。
全 Java 解決方案簡化了開發(fā)、集成和維護(hù)
沒有放之四海而皆準(zhǔn)的JVM,但是現(xiàn)在硬實時Java提供了一種單一來源的Java補(bǔ)救措施,可以覆蓋嵌入式實時應(yīng)用程序的所有級別,從高級應(yīng)用程序復(fù)雜性一直到最低級別的硬件。
審核編輯:郭婷
-
嵌入式
+關(guān)注
關(guān)注
5178文章
20068瀏覽量
326840 -
JAVA
+關(guān)注
關(guān)注
20文章
2995瀏覽量
115403
發(fā)布評論請先 登錄
恩智浦如何攻克兩大嵌入式開發(fā)難題
新一代嵌入式開發(fā)平臺 AMD嵌入式軟件和工具2025.1版現(xiàn)已推出
嵌入式開發(fā)就業(yè)還有前景嗎?
明遠(yuǎn)智睿SSD2351開發(fā)板:嵌入式開發(fā)領(lǐng)域的新型新星
嵌入式開發(fā)入門指南:從零開始學(xué)習(xí)嵌入式
嵌入式開發(fā):高門檻的系統(tǒng)性工程與 996 的行業(yè)困局
Python在嵌入式系統(tǒng)中的應(yīng)用場景
BlackBerry QNX推出通用嵌入式開發(fā)平臺
AI來襲!嵌入式開發(fā)者該如何應(yīng)對轉(zhuǎn)型?
代碼+案例+生態(tài):武漢芯源半導(dǎo)體CW32嵌入式開發(fā)實戰(zhàn)正式出版
代碼+案例+生態(tài):武漢芯源半導(dǎo)體CW32嵌入式開發(fā)實戰(zhàn)正式出版
如何成為嵌入式開發(fā)工程師?
哪些專業(yè)適合學(xué)習(xí)嵌入式開發(fā)?
嵌入式開發(fā)必備-RK3562演示Linux常用系統(tǒng)查詢命令(上)觸覺智能出品

橡膠在低級嵌入式開發(fā)中與道路相遇的地方
評論