淺談JNI技術(shù)在嵌入式軟件開(kāi)發(fā)中的應(yīng)用_第1頁(yè)
淺談JNI技術(shù)在嵌入式軟件開(kāi)發(fā)中的應(yīng)用_第2頁(yè)
淺談JNI技術(shù)在嵌入式軟件開(kāi)發(fā)中的應(yīng)用_第3頁(yè)
免費(fèi)預(yù)覽已結(jié)束,剩余1頁(yè)可下載查看

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

淺談JNI技術(shù)在嵌入式軟件開(kāi)發(fā)中的應(yīng)用

引言嵌入式系統(tǒng)是以應(yīng)用為中心、以計(jì)算機(jī)技術(shù)為基礎(chǔ)、軟件硬件可裁剪、適應(yīng)應(yīng)用系統(tǒng)對(duì)功能、可靠性、成本、體積、功耗嚴(yán)格要求的專用計(jì)算機(jī)系統(tǒng)。嵌入式軟件的基本體系結(jié)構(gòu)包括嵌入式實(shí)時(shí)操作系統(tǒng)RTOS(RealTimeoperatingSysterrl)、嵌入式設(shè)備驅(qū)動(dòng)程序、嵌入式應(yīng)用程序編程接口(中間件)和嵌入式應(yīng)用程序?,F(xiàn)階段,計(jì)算機(jī)應(yīng)用的普及、互聯(lián)網(wǎng)技術(shù)的實(shí)用以及納米微電子技術(shù)的突破,正有力推動(dòng)著21世紀(jì)的工業(yè)生產(chǎn)、商業(yè)活動(dòng)、科學(xué)實(shí)驗(yàn)和家庭生活等領(lǐng)域自動(dòng)化和信息化進(jìn)程。全過(guò)程自動(dòng)化產(chǎn)品制造、大范圍電子商務(wù)活動(dòng)、高度協(xié)同科學(xué)實(shí)驗(yàn)以及現(xiàn)代化家居生活,為嵌入式產(chǎn)品造就了嶄新而巨大的商機(jī)。除了溝通信息高速公路的交換機(jī)、路由器和調(diào)制解調(diào)器,構(gòu)建計(jì)算機(jī)集成制造系統(tǒng)(CIMS)所需的數(shù)據(jù)傳輸系統(tǒng)DCS(DataCommunicationSystem)和機(jī)器人以及規(guī)模較大的家用汽車電子系統(tǒng),最有產(chǎn)量效益和時(shí)代特征的嵌入式產(chǎn)品應(yīng)數(shù)因特網(wǎng)上的信息家電(informationappliances),如網(wǎng)絡(luò)可視電話、網(wǎng)絡(luò)游戲機(jī)、電子商務(wù)、商務(wù)通(PDA)、移動(dòng)電話以及多媒體產(chǎn)品(如電視機(jī)頂盒、DVD播放機(jī)、電子閱讀機(jī))。眾所周知,“一次編程,到處使用”的Java軟件概念原本就是針對(duì)網(wǎng)上嵌入式小設(shè)備提出的,幾經(jīng)周折,目前SUN公司已推出了J2ME(Java2P1atformMicroEdition)針對(duì)信息家電的Java版本,其技術(shù)日趨成熟,開(kāi)始投入使用。SUN公司Java虛擬機(jī)(JVM)技術(shù)的有序開(kāi)放,使得Java軟件真正實(shí)現(xiàn)跨平臺(tái)運(yùn)行,即Java應(yīng)用小程序能夠在帶有JVM的任何硬軟件系統(tǒng)上執(zhí)行。加上Java語(yǔ)言本身所具有的安全性、可靠性和可移植性等特點(diǎn),對(duì)實(shí)現(xiàn)瘦身上網(wǎng)的信息家電等網(wǎng)絡(luò)設(shè)備十分有利,同時(shí)對(duì)嵌入式設(shè)備特別是上網(wǎng)設(shè)備軟件編程技術(shù)產(chǎn)生了很大的影響。1Java的性能問(wèn)題及幾種解決方案Java程序也有其本身的缺陷,那就是其效率問(wèn)題。由于Java是一種介于解釋型和編譯型之間的語(yǔ)言,其對(duì)內(nèi)存的管理是通過(guò)JVM虛擬機(jī)來(lái)實(shí)現(xiàn)的,同樣的程序,如果用編譯型語(yǔ)言C來(lái)實(shí)現(xiàn),其運(yùn)行速度一般要比Java快得多。因此,提高Java的性能就顯得十分重要。迄今為止,人們?yōu)樘岣逬ava的運(yùn)行速度而做出的許多努力,主要集中在程序設(shè)計(jì)的方法和模式選擇方面。但是由于算法和設(shè)計(jì)模式的優(yōu)化是通用的,對(duì)Java有效的優(yōu)化算法和設(shè)計(jì)模式,對(duì)其他編譯語(yǔ)言也基本適用,因此不能從根本上改變Java程序與編譯型語(yǔ)言在執(zhí)行效率方面的差異。另外,JIT(JustInTime,及時(shí)編譯)技術(shù)也是一個(gè)比較好的思想。它的基本原理是,首先,通過(guò)Java編譯器把Java源代碼編譯成與平臺(tái)無(wú)關(guān)的二進(jìn)制字節(jié)碼。然后,在Java程序真正執(zhí)行之前,系統(tǒng)通過(guò)JIT編譯器把Java的字節(jié)碼編譯為本地化機(jī)器碼。最后,系統(tǒng)執(zhí)行本地化機(jī)器碼,不用對(duì)字節(jié)碼進(jìn)行解釋。這樣做的優(yōu)點(diǎn)是,大大提高了Java程序的性能,縮短了加載程序的時(shí)間;同時(shí),由于編譯的結(jié)果并不在程序運(yùn)行期間保存,因此也節(jié)約了存儲(chǔ)空間。缺點(diǎn)是,由于JIT編譯器對(duì)所有的代碼都想優(yōu)化,因此同樣也占用了很多時(shí)間。動(dòng)態(tài)優(yōu)化技術(shù)即提前編譯為機(jī)器碼的技術(shù)(dynamicopttmization,aheadoftimetechnology)是提高Java性能的另一個(gè)嘗試。動(dòng)態(tài)優(yōu)化技術(shù)充分利用了Java源碼編譯、字節(jié)碼編譯、動(dòng)態(tài)編譯和靜態(tài)編譯的技術(shù)。其輸入是Java的源碼或字節(jié)碼。而輸出是經(jīng)過(guò)高度優(yōu)化的可執(zhí)行代碼和動(dòng)態(tài)庫(kù)(WindoW中是.dil文件,UNIX中是共享庫(kù).a.so文件)。其優(yōu)點(diǎn)是能大大提高程序的性能,缺點(diǎn)是破壞了Java的可移植性,也對(duì)Java的安全帶來(lái)了一定的隱患。2JNI技術(shù)實(shí)際上,有一種通常被忽視的技術(shù)可以在很大程度上解決這個(gè)難題,那就是JNI(JavaNativeInterface,Java本地化方法)。圖l是JNI技術(shù)實(shí)現(xiàn)的一般步驟。(1)編寫Java類代碼其中,需要JNI實(shí)現(xiàn)的方法應(yīng)當(dāng)用native關(guān)鍵字聲明。在該類中,用System.1oadLibrary()方法加載需要的動(dòng)態(tài)鏈接庫(kù)。關(guān)鍵代碼如下://Compute.javapublicclassCompute{publicnativedoublecomp(doubleparams);static{//調(diào)用動(dòng)態(tài)鏈接庫(kù)System.loadLibrary(“mathlib”);}(2)編譯成字節(jié)代碼在這個(gè)過(guò)程中,由于采用了native關(guān)鍵字聲明,Java編譯器會(huì)忽視沒(méi)有代碼體的JNI方法部分。(3)生成相關(guān)JNI方法的頭文件這個(gè)過(guò)程的實(shí)現(xiàn)一般是通過(guò)利用jlavah-jni*class生成的,也可以手工生成該文件;但是由于Java虛擬機(jī)是根據(jù)一定的命名規(guī)范完成對(duì)JNI方法的調(diào)用,所以手工編寫頭文件需要特別小心。3基于JNI的嵌入式手機(jī)軟件開(kāi)發(fā)實(shí)例下面通過(guò)一個(gè)實(shí)例來(lái)描述運(yùn)用JNI技術(shù)在手機(jī)上操縱攝像頭,捕捉視頻并存儲(chǔ)圖片的過(guò)程。(1)活動(dòng)/狀態(tài)圖圖2為捕捉視頻并存儲(chǔ)圖片的活動(dòng)/狀態(tài)圖根據(jù)圖2的活動(dòng)/狀態(tài),具體的對(duì)應(yīng)步驟如下:①發(fā)起該流程。②發(fā)起流程后,建立文件用于存儲(chǔ)圖片。③用指針獲得分配的緩沖器,用于存儲(chǔ)獲得的幀。④將指針壓棧(序列化緩沖器)。由于手機(jī)的內(nèi)存較小,為了防止內(nèi)存泄漏,Symbian操作系統(tǒng)有一個(gè)Cleanupstack的要求,即在使用指針時(shí),用PushL把指針壓入棧中,使用完后再用Pop彈出棧.如果在中間調(diào)用導(dǎo)致崩潰的函數(shù)時(shí)果真出現(xiàn)了問(wèn)題,那么Cleanupstack可以通過(guò)調(diào)用該指針的析構(gòu)函數(shù)回收占用的空間。⑤操縱攝像頭,捕捉視頻,并將圖像流從攝像頭端傳到緩沖器。⑥將攝像頭內(nèi)的圖像流存入緩沖器內(nèi),并將緩沖器內(nèi)的流轉(zhuǎn)化為文件流,存為jpg格式的文件,將指向緩沖器的指針彈棧。⑦在過(guò)程⑥中,如果使用完了序列化的緩沖器,則要重新序列化緩沖器,以備后面使用。⑧當(dāng)接收到停止視頻捕捉的信號(hào)后,關(guān)閉文件。⑨流程結(jié)束。(2)運(yùn)用JNI技術(shù)的視頻捕捉子功能捕捉視頻的實(shí)現(xiàn)是由操縱攝像頭、視頻播放(解碼器準(zhǔn)備)以及建立攝像頭和手機(jī)之間的連接會(huì)話三個(gè)活動(dòng)組成的。其中操縱攝像頭是通過(guò)調(diào)用底層設(shè)備的驅(qū)動(dòng)來(lái)實(shí)現(xiàn)的,需要利用JNI來(lái)實(shí)現(xiàn),完成的方法包括準(zhǔn)備、建立、刪除、銷毀攝像頭等。視頻播放的一系列過(guò)程也是通過(guò)c++代碼來(lái)實(shí)現(xiàn)的,除了準(zhǔn)備、建立、刪除、銷毀解碼器外,還有開(kāi)始、暫停、停止解碼等。建立攝像頭和手機(jī)之間的連接類似建立客戶端和服務(wù)器連接,視頻流從攝像頭傳到手機(jī)界面是通過(guò)多媒體會(huì)話來(lái)完成的。多媒體會(huì)話的建立、關(guān)閉、摧毀以及會(huì)話建立后的發(fā)送、取消、讀取數(shù)據(jù)等也是JNI的應(yīng)用范疇。結(jié)語(yǔ)主張采用純Java的人們通常反對(duì)本地化代碼的使用,認(rèn)為JNI技術(shù)會(huì)影響程序的可移植性和安全性。還有一些人認(rèn)為,在Java程序執(zhí)行的過(guò)程中調(diào)用c/c++程序只是對(duì)過(guò)去混合編程技術(shù)的簡(jiǎn)單擴(kuò)展,其實(shí)際目的是為了充分利用大量原有的c程序庫(kù)。其實(shí),不必拘泥于嚴(yán)格的平臺(tái)獨(dú)立性限制,因?yàn)椴捎肑NI技術(shù)只是針對(duì)一些嚴(yán)重影響Java性能的代碼段。該部分可能只占源程序的極少部分,所

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論