www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當前位置:首頁 > 嵌入式 > 嵌入式教程
[導讀]淺談JNI技術在嵌入式軟件開發(fā)中的應用

引 言
    嵌入式系統(tǒng)是以應用為中心、以計算機技術為基礎、軟件硬件可裁剪、適應應用系統(tǒng)對功能、可靠性、成本、體積、功耗嚴格要求的專用計算機系統(tǒng)。嵌入式軟件的基本體系結構包括嵌入式實時操作系統(tǒng)RTOS(RealTime operating Systerrl)、嵌入式設備驅動程序、嵌入式應用程序編程接口(中間件)和嵌入式應用程序。
    現(xiàn)階段,計算機應用的普及、互聯(lián)網技術的實用以及納米微電子技術的突破,正有力推動著21世紀的工業(yè)生產、商業(yè)活動、科學實驗和家庭生活等領域自動化和信息化進程。全過程自動化產品制造、大范圍電子商務活動、高度協(xié)同科學實驗以及現(xiàn)代化家居生活,為嵌入式產品造就了嶄新而巨大的商機。除了溝通信息高速公路的交換機、路由器和調制解調器,構建計算機集成制造系統(tǒng)(CIMS)所需的數據傳輸系統(tǒng)DCS(Data Communication System)和機器人以及規(guī)模較大的家用汽車電子系統(tǒng),最有產量效益和時代特征的嵌入式產品應數因特網上的信息家電(information appliances),如網絡可視電話、網絡游戲機、電子商務、商務通(PDA)、移動電話以及多媒體產品(如電視機頂盒、DVD播放機、電子閱讀機)。
    眾所周知,“一次編程,到處使用”的Java軟件概念原本就是針對網上嵌入式小設備提出的,幾經周折,目前SUN公司已推出了J2ME(Java 2 P1atform Micro Edition)針對信息家電的Java版本,其技術日趨成熟,開始投入使用。SUN公司Java虛擬機(JVM)技術的有序開放,使得Java軟件真正實現(xiàn)跨平臺運行,即Java應用小程序能夠在帶有JVM的任何硬軟件系統(tǒng)上執(zhí)行。加上Java語言本身所具有的安全性、可靠性和可移植性等特點,對實現(xiàn)瘦身上網的信息家電等網絡設備十分有利,同時對嵌入式設備特別是上網設備軟件編程技術產生了很大的影響。


1 Java的性能問題及幾種解決方案
    Java程序也有其本身的缺陷,那就是其效率問題。由于Java是一種介于解釋型和編譯型之間的語言,其對內存的管理是通過JVM虛擬機來實現(xiàn)的,同樣的程序,如果用編譯型語言C來實現(xiàn),其運行速度一般要比Java快得多。因此,提高Java的性能就顯得十分重要。
    迄今為止,人們?yōu)樘岣逬ava的運行速度而做出的許多努力,主要集中在程序設計的方法和模式選擇方面。但是由于算法和設計模式的優(yōu)化是通用的,對Java有效的優(yōu)化算法和設計模式,對其他編譯語言也基本適用,因此不能從根本上改變Java程序與編譯型語言在執(zhí)行效率方面的差異。
    另外,JIT(Just In Time,及時編譯)技術也是一個比較好的思想。它的基本原理是,首先,通過Java編譯器把Java源代碼編譯成與平臺無關的二進制字節(jié)碼。然后,在Java程序真正執(zhí)行之前,系統(tǒng)通過JIT編譯器把Java的字節(jié)碼編譯為本地化機器碼。最后,系統(tǒng)執(zhí)行本地化機器碼,不用對字節(jié)碼進行解釋。這樣做的優(yōu)點是,大大提高了Java程序的性能,縮短了加載程序的時間;同時,由于編譯的結果并不在程序運行期間保存,因此也節(jié)約了存儲空間。缺點是,由于JIT編譯器對所有的代碼都想優(yōu)化,因此同樣也占用了很多時間。
    動態(tài)優(yōu)化技術即提前編譯為機器碼的技術(dynamicopttmization,ahead of time technology)是提高Java性能的另一個嘗試。動態(tài)優(yōu)化技術充分利用了Java源碼編譯、字節(jié)碼編譯、動態(tài)編譯和靜態(tài)編譯的技術。其輸入是Java的源碼或字節(jié)碼。而輸出是經過高度優(yōu)化的可執(zhí)行代碼和動態(tài)庫(WindoW中是.dil文件,UNIX中是共享庫.a.so文件)。其優(yōu)點是能大大提高程序的性能,缺點是破壞了Java的可移植性,也對Java的安全帶來了一定的隱患。


2 JNI技術
    實際上,有一種通常被忽視的技術可以在很大程度上解決這個難題,那就是JNI(Java Native Interface,Java本地化方法)。圖l是JNI技術實現(xiàn)的一般步驟。

(1)編寫Java類代碼
    其中,需要JNI實現(xiàn)的方法應當用native關鍵字聲明。在該類中,用System.1oadLibrary()方法加載需要的動態(tài)鏈接庫。關鍵代碼如下:
    //Compute.java
    public class Compute{
    public native double comp (double params);
    static{
    //調用動態(tài)鏈接庫
    System.loadLibrary(“mathlib”);

    }

   
(2)編譯成字節(jié)代碼
    在這個過程中,由于采用了native關鍵字聲明,Java編譯器會忽視沒有代碼體的JNI方法部分。
(3)生成相關JNI方法的頭文件
    這個過程的實現(xiàn)一般是通過利用jlavah-jni * class生成的,也可以手工生成該文件;但是由于Java虛擬機是根據一定的命名規(guī)范完成對JNI方法的調用,所以手工編寫頭文件需要特別小心。
    上述文件產生的頭文件部分代碼如下:
    //Compute.h
    ;
    extern“C”{
    JNIEXPORT jdoubleJNICALL Java_Compute_comp(JNI-Env *, jobject, jdoubleArray);
    ;
    JNI函數名稱分為三部分:首先是Java關鍵字,供Java虛擬機識別;然后是調用者類名稱(全限定的類名,其中用下劃線代替名稱分隔符);最后是對應的方法名稱,各段名稱之間用下劃線分割。
    JNI函數的參數也由三部分組成:首先是JNIEnv *,是一個指向JNI運行環(huán)境的指針;第二個參數隨本地方法是靜態(tài)還是非靜態(tài)而有所不同一一非靜態(tài)本地方法的第二個參數是對對象的引用,而靜態(tài)本地方法的第二個參數是對其Java類的引用;其余的參數對應通常Java方法的參數,參數類型需要根據一定規(guī)則進行映射。
(4)編寫相應方法的實現(xiàn)代碼
    在編碼過程中,需要注意變量的長度問題,例如Java的整型變量長度為32位,而C語言為16位,所以要仔細核對變量類型映射表,防止在傳值過程中出現(xiàn)問題。
(5)將JNI實現(xiàn)代碼編譯成動態(tài)鏈接庫
    編譯過程是利用C/C++編譯器實現(xiàn)的,當要使用生成的動態(tài)鏈接庫時,調用者類中需要顯式調用該鏈接庫。
    經過上述處理,基本上完成了一個包含本地化方法的Java類的開發(fā)。


3 基于JNI的嵌入式手機軟件開發(fā)實例
   
下面通過一個實例來描述運用JNI技術在手機上操縱攝像頭,捕捉視頻并存儲圖片的過程。
(1)活動/狀態(tài)圖
    圖2為捕捉視頻并存儲圖片的活動/狀態(tài)圖
    根據圖2的活動/狀態(tài),具體的對應步驟如下:
    ①發(fā)起該流程。
    ②發(fā)起流程后,建立文件用于存儲圖片。
    ③用指針獲得分配的緩沖器,用于存儲獲得的幀。
    ④將指針壓棧(序列化緩沖器)。由于手機的內存較小,為了防止內存泄漏,Symbian操作系統(tǒng)有一個Cleanup stack的要求,即在使用指針時,用PushL把指針壓入棧中,使用完后再用Pop彈出棧.如果在中間調用導致崩潰的函數時果真出現(xiàn)了問題,那么Clean up stack可以通過調用該指針的析構函數回收占用的空間。
    ⑤操縱攝像頭,捕捉視頻,并將圖像流從攝像頭端傳到緩沖器。
    ⑥將攝像頭內的圖像流存入緩沖器內,并將緩沖器內的流轉化為文件流,存為jpg格式的文件,將指向緩沖器的指針彈棧。
    ⑦在過程⑥中,如果使用完了序列化的緩沖器,則要重新序列化緩沖器,以備后面使用。
    ⑧當接收到停止視頻捕捉的信號后,關閉文件。
    ⑨流程結束。

(2)運用JNI技術的視頻捕捉
    子功能捕捉視頻的實現(xiàn)是由操縱攝像頭、視頻播放(解碼器準備)以及建立攝像頭和手機之間的連接會話三個活動組成的。其中操縱攝像頭是通過調用底層設備的驅動來實現(xiàn)的,需要利用JNI來實現(xiàn),完成的方法包括準備、建立、刪除、銷毀攝像頭等。視頻播放的一系列過程也是通過c++代碼來實現(xiàn)的,除了準備、建立、刪除、銷毀解碼器外,還有開始、暫停、停止解碼等。建立攝像頭和手機之間的連接類似建立客戶端和服務器連接,視頻流從攝像頭傳到手機界面是通過多媒體會話來完成的。多媒體
會話的建立、關閉、摧毀以及會話建立后的發(fā)送、取消、讀取數據等也是JNI的應用范疇。


結語
    主張采用純Java的人們通常反對本地化代碼的使用,認為JNI技術會影響程序的可移植性和安全性。還有一些人認為,在Java程序執(zhí)行的過程中調用c/c++程序只是對過去混合編程技術的簡單擴展,其實際目的是為了充分利用大量原有的c程序庫。
其實,不必拘泥于嚴格的平臺獨立性限制,因為采用JNI技術只是針對一些嚴重影響Java性能的代碼段。該部分可能只占源程序的極少部分,所以幾乎可以不考慮該部分代碼在主流平臺之間移植的工作量。同時,也不必過分擔心類型匹配問題,完全可以控制代碼不出現(xiàn)這種錯誤。此外,也不必擔心安全控制問題,因為Java安全模型已擴展為允許非系統(tǒng)類加載和調用本地方法,即如果在Java程序中直接調用c/c++語言產生的機器碼,該部分代碼的安全性就由Java虛擬機控制。

本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內容真實性等。需要轉載請聯(lián)系該專欄作者,如若文章內容侵犯您的權益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或將催生出更大的獨角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數字化轉型技術解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關鍵字: AWS AN BSP 數字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術公司SODA.Auto推出其旗艦產品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關鍵字: 汽車 人工智能 智能驅動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務中斷的風險,如企業(yè)系統(tǒng)復雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務連續(xù)性,提升韌性,成...

關鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據媒體報道,騰訊和網易近期正在縮減他們對日本游戲市場的投資。

關鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數據產業(yè)博覽會開幕式在貴陽舉行,華為董事、質量流程IT總裁陶景文發(fā)表了演講。

關鍵字: 華為 12nm EDA 半導體

8月28日消息,在2024中國國際大數據產業(yè)博覽會上,華為常務董事、華為云CEO張平安發(fā)表演講稱,數字世界的話語權最終是由生態(tài)的繁榮決定的。

關鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應對環(huán)境變化,經營業(yè)績穩(wěn)中有升 落實提質增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務引領增長 以科技創(chuàng)新為引領,提升企業(yè)核心競爭力 堅持高質量發(fā)展策略,塑強核心競爭優(yōu)勢...

關鍵字: 通信 BSP 電信運營商 數字經濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術學會聯(lián)合牽頭組建的NVI技術創(chuàng)新聯(lián)盟在BIRTV2024超高清全產業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術創(chuàng)新聯(lián)...

關鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關鍵字: BSP 信息技術
關閉
關閉