国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

基于ST20嵌入式系統(tǒng)的Java虛擬機(jī)研究與移植

發(fā)布時(shí)間:2010-7-24 10:40    發(fā)布者:lavida
關(guān)鍵詞: java , ST20 , 嵌入式系統(tǒng)
1 引言  
  
隨著現(xiàn)代信息技術(shù)的迅猛發(fā)展,電視數(shù)字化步伐加快了。從一開始的模擬電視到現(xiàn)在的數(shù)字電視,不僅大大提高了電視節(jié)目的質(zhì)量,也推動(dòng)了電視數(shù)字化的進(jìn)一步發(fā)展。在各種數(shù)字視頻廣播標(biāo)準(zhǔn)中,歐洲的DVB(Digital Video Broadcast)標(biāo)準(zhǔn)使用比較廣泛,它為在同一信道中傳輸視頻、音頻、數(shù)據(jù)提供了一種靈活、高效的方式,可以通過衛(wèi)星、電纜和地面信道傳輸高質(zhì)量的電視節(jié)目。同時(shí)基于DVB的數(shù)據(jù)廣播標(biāo)準(zhǔn)也能滿足人們對(duì)于寬帶數(shù)據(jù)業(yè)務(wù)的要求,如證券信息服務(wù)、電子節(jié)目、MP3音樂下載、電子郵件、網(wǎng)頁瀏覽等,在現(xiàn)代信息技術(shù)領(lǐng)域應(yīng)用極為廣泛。  


圖一 數(shù)字機(jī)頂盒架構(gòu)  
  
從圖一我們可以看到, 一個(gè)完整的數(shù)字機(jī)頂盒由硬件平臺(tái)和軟件系統(tǒng)組成,可以將其分為4層,從底向上分別為硬件、底層軟件、中間件、應(yīng)用軟件。硬件提供機(jī)頂盒的硬件平臺(tái);底層軟件提供操作系統(tǒng)內(nèi)核以及各種硬件驅(qū)動(dòng)程序;應(yīng)用軟件包括本機(jī)存儲(chǔ)的應(yīng)用和可下載的應(yīng)用;中間件是一種將應(yīng)用程序與底層的操作系統(tǒng)、硬件細(xì)節(jié)隔離開來,使應(yīng)用不依賴于具體的硬件平臺(tái)的軟件環(huán)境。這樣用戶可以在任何廠家的硬件平臺(tái)上進(jìn)行應(yīng)用軟件開發(fā),和應(yīng)用軟件下載。而不必介意任何底層的有關(guān)信息,保證了機(jī)頂盒的開發(fā)專業(yè)化。這種分層的思想在現(xiàn)代系統(tǒng)設(shè)計(jì)中十分常見,如大名鼎鼎的TCP/IP協(xié)議。中間件通常由各種虛擬機(jī)來構(gòu)成,如HTML虛擬機(jī)、JavaScript虛擬機(jī)、Java虛擬機(jī)等。  
  
現(xiàn)在廣電行業(yè)傾向于DVB-MHP(多媒體家庭平臺(tái))中間件標(biāo)準(zhǔn)。DVB-MHP基于開放性的Java程序語言,具有軟硬件兼容性好、可移植成本低、二次再開發(fā)功能強(qiáng)等優(yōu)點(diǎn),是一種很有發(fā)展前途的中間件技術(shù)標(biāo)準(zhǔn)。可以相信,Java在數(shù)字視頻廣播中的應(yīng)用將越來越多,我們有必要研究Java技術(shù)核心—虛擬機(jī),包括其結(jié)構(gòu)、運(yùn)行機(jī)制及虛擬機(jī)移植到數(shù)字機(jī)頂盒平臺(tái)的關(guān)鍵技術(shù)。本文面向采用ST(意法半導(dǎo)體公司)Sti5516芯片的數(shù)字機(jī)頂盒平臺(tái),將基于數(shù)字電視播放(Digital Video Broadcast,DVB)的多媒體家庭平臺(tái)(Multimedia Home Platform,MHP)規(guī)范進(jìn)行中間件平臺(tái)分析,重點(diǎn)研究開放源碼的Java虛擬機(jī)---Kaffe在其中的作用和相關(guān)的移植技術(shù)。  

2 平臺(tái)介紹  

2.1 硬件平臺(tái)  
  
數(shù)字機(jī)頂盒硬件平臺(tái)基于ST公司的芯片Sti5516,Sti5516芯片集成了CPU內(nèi)核ST20-C2、音/視頻MPEG-2解碼器、PAL/NTSC/SECAM編碼器等。開發(fā)板上有8MB的共享內(nèi)存和16MB的外部內(nèi)存,4MB的Flash,并采用實(shí)時(shí)處理的嵌入式操作系統(tǒng)OS20。

2.2 軟件平臺(tái)

一個(gè)典型的適用于嵌入式的Java運(yùn)行環(huán)境包括以下組件:  
  
1.一個(gè)Java虛擬機(jī)。用來將獨(dú)立于平臺(tái)的Java字節(jié)碼解釋成目標(biāo)機(jī)本地機(jī)器碼,并執(zhí)行動(dòng)態(tài)類加載。這可以采取解釋執(zhí)行或?qū)崟r(shí)編譯執(zhí)行(JIT)的形式。兩者的不同點(diǎn)就在于字節(jié)碼的執(zhí)行速度;因?yàn)镴IT避免了重復(fù)解釋以前執(zhí)行過的程序塊。  
  
2.一個(gè)標(biāo)準(zhǔn)Java類庫集,以字節(jié)碼的形式存在。如果應(yīng)用程序并不引用任何類庫,那這些類庫就并不一定要求存在。  
  
3.任何類庫或虛擬機(jī)所需的本地方法(JNI)。這些函數(shù)是由其它高級(jí)語言所寫,并和Java虛擬機(jī)一起預(yù)編譯,鏈接。這些函數(shù)被用來執(zhí)行處理器相關(guān)或Java無法直接實(shí)現(xiàn)的功能。  
  
4.一個(gè)多任務(wù)操作系統(tǒng),用來提供Java線程及線程同步機(jī)制的底層實(shí)現(xiàn)。  
  
5.一個(gè)垃圾回收線程。垃圾回收周期運(yùn)行或當(dāng)動(dòng)態(tài)內(nèi)存池不能滿足分配請(qǐng)求時(shí)運(yùn)行,用來申明那些已經(jīng)被分配但不再被應(yīng)用程序所使用的內(nèi)存。

Kaffe是一個(gè)完整的Java實(shí)現(xiàn),它由3部分組成:遵從 Personal Java1.1規(guī)范的 Java類庫,Java1.1虛擬機(jī)和本地動(dòng)態(tài)或靜態(tài)鏈接庫。Kaffe虛擬機(jī)源碼按以下子目錄組織:  
kaffe---包括了解釋器與JIT平臺(tái)無關(guān)部分,以及垃圾回收,動(dòng)態(tài)類加載和Java runtime environment其它模塊的源代碼。  
config---包括了解釋器與JIT平臺(tái)相關(guān)部分。它按所支持的處理器來劃分子目錄,里面存放系統(tǒng)相關(guān)代碼。  
package---Java類庫以及任何它所依賴的本地方法。  
include---在子目錄中提供的本地方法的接口定義。這些接口被平臺(tái)獨(dú)立文件所需要。  

3 Kaffe移植的關(guān)鍵技術(shù)及方案  
  
經(jīng)過對(duì)Kaffe深入分析和研究,筆者已在Sti5516平臺(tái)上成功地移植了Kaffe,并依據(jù)DVB-MHP規(guī)范,結(jié)合機(jī)頂盒特定軟硬件環(huán)境要求,建立了能運(yùn)行Kaffe虛擬機(jī)的Java應(yīng)用程序運(yùn)行平臺(tái)。下面將移植工作及相應(yīng)步驟總結(jié)如下:  

3.1 字節(jié)碼解釋器  
  
由于Kaffe源碼中沒有映射Java字節(jié)碼到處理器相關(guān)的匯編代碼塊,而是使用C實(shí)現(xiàn)了每個(gè)字節(jié)碼。這樣就導(dǎo)致字節(jié)碼解釋器的源代碼沒有一行是處理器相關(guān)的。這意味著移植最簡虛擬機(jī)(無JIT)將非常簡單:只需要使用交叉編譯器來編譯kaffe/kaffevm子目錄下的文件即可。  

3.2 內(nèi)部線程  
  
Kaffe有它自己的內(nèi)部線程包。換句話說,它維護(hù)自己的線程數(shù)據(jù)結(jié)構(gòu),并在適當(dāng)?shù)臅r(shí)候執(zhí)行線程調(diào)度及上下文切換。為了使內(nèi)部線程包能運(yùn)行在ST20處理器架構(gòu)上, 需要在config/os20子目錄中創(chuàng)建一個(gè)threads.h文件。這個(gè)文件定義了兩個(gè)常量和四個(gè)宏。這些常量和宏被內(nèi)部線程包里處理器無關(guān)的部分代碼所使用。  

USE_INTERNAL_THREADS定義為ENABLE。  
THREADSTACKSIZE是一個(gè)常量,定義為每個(gè)線程堆棧的大小,單位bytes。  
THREADINIT(ctx * pContex, void (*func)())執(zhí)行新線程的上下文初始化。該線程的入口點(diǎn)被func指針?biāo)峁?nbsp; 
THREADSWITCH(ctx * pNewContext, ctx * pOldContext)執(zhí)行實(shí)際的上下文切換。  
THREADINFO(ctx * pContext)在Kaffe初始化期間重置整個(gè)任務(wù)控制塊。  
THREADFRAMES(thread * taskId, int count)返回活動(dòng)的堆棧楨個(gè)數(shù)。  

3.3 支持軟件  
  
和其它大多數(shù)用C寫的程序一樣,Kaffe依賴于標(biāo)準(zhǔn)C庫里的例程。由于ST采用符合GNU規(guī)范的GCC編譯器,如strcmp(),atoi(),sin()等標(biāo)準(zhǔn)C庫函數(shù)被支持。除此之外OS20提供以下支持:

動(dòng)態(tài)內(nèi)存分配malloc()。盡管Java程序員不會(huì)直接調(diào)用malloc(),但Kaffe虛擬機(jī)需要從底層調(diào)用內(nèi)存分配例程來請(qǐng)求大的內(nèi)存池。  
信號(hào)。Kaffe依賴于與POSIX兼容的信號(hào)實(shí)現(xiàn)機(jī)制來執(zhí)行相應(yīng)的軟件中斷。而這可以用來喚醒休眠線程和異常句柄。  
非阻塞I/O接口。和select()相似。  

3.4 動(dòng)態(tài)類加載器  

為了在OS20操作系統(tǒng)中使用,須修改源代碼中平臺(tái)無關(guān)的部分---動(dòng)態(tài)類加載器。它是Java運(yùn)行時(shí)環(huán)境的一部分,被用來負(fù)責(zé)加載被調(diào)用的方法(methods)。在桌面環(huán)境中,與方法相關(guān)的字節(jié)碼被放在類文件中,動(dòng)態(tài)類加載器使用給定的方法名在類路徑下的子目錄和文件里搜索。但由于OS20操作系統(tǒng)沒有文件系統(tǒng),所以類加載器必須被修改成在內(nèi)存(RAM或ROM)中搜索類文件。為此我們完全重寫動(dòng)態(tài)類加載器。  
  
我們采用了靜態(tài)查找表裝載機(jī)制,建立了一個(gè)查找表。這個(gè)查找表的結(jié)構(gòu)定義如下:  

typedef struct  
{  
int index;  
int size;  
char name;  
}classIndexTable;  
  
這個(gè)查找表用來映射類名或方法名到它們?cè)趦?nèi)存中的起始地址。這樣就可以用查找表來替代類加載器。即將類型和路徑組合為一個(gè)唯一的標(biāo)識(shí), 比如“java string”,組合起來就是“java_string”,然后再利用這個(gè)組合的結(jié)果檢索查找表。  
  
利用組合的結(jié)果與查找表中每一項(xiàng)的name字段進(jìn)行字符串比較,直到完全匹配為止。如果沒有任何匹配則說明系統(tǒng)不支持這個(gè)類型。匹配上name 后,類裝載器將獲得index和size的值。index是一張存放所有.class文件起始地址表的索引,根據(jù)這個(gè)索引就可以找到具體的.class文件的二進(jìn)制映像的起始地址,而size則是該.class文件的大小。這樣根據(jù).class文件存儲(chǔ)位置的地址和大小就可以成功地完成類的裝載。

3.5 虛擬機(jī)啟動(dòng)  
  
由于OS20操作系統(tǒng)是被GCC編譯到主程序中,我們需要將kaffe虛擬機(jī)的初始化函數(shù)做為主應(yīng)用程序中的某個(gè)任務(wù)來運(yùn)行。kaffe虛擬機(jī)的初始化與啟動(dòng)是通過在主程序中運(yùn)行initializeKaffe()函數(shù)來完成的。  

4 測試與結(jié)果  

在主程序中,調(diào)用OS20操作系統(tǒng)中的系統(tǒng)調(diào)用task_create()來將Kaffe虛擬機(jī)初始化為系統(tǒng)的一個(gè)進(jìn)程。并為它分配必要資源,包括進(jìn)程優(yōu)先級(jí)、系統(tǒng)需要的內(nèi)存空間等。依照分配的優(yōu)先級(jí),參與系統(tǒng)的進(jìn)程調(diào)度。最后,將整個(gè)修改好的源代碼在新的編譯環(huán)境下編譯連接成可執(zhí)行代碼,通過JTAG口下載到機(jī)頂盒開發(fā)板中運(yùn)行。  
  
Kaffe虛擬機(jī)的“輸入”是“hello.java”,經(jīng)過編譯后生成類文件“hello.class”。運(yùn)行下載到Flash的主程序,在調(diào)試終端可以看到“hello world”字樣,這是Kaffe虛擬機(jī)解釋字節(jié)碼的結(jié)果。說明基于Sti5516芯片的Kaffe虛擬機(jī)移植成功。  

5 結(jié)束語  
  
以上介紹了Java虛擬機(jī)Kaffe的軟件架構(gòu),從中我們可以看出,Kaffe虛擬機(jī)具有較好的可擴(kuò)展結(jié)構(gòu)模型,是遵循Java規(guī)范的優(yōu)良的開放源碼虛擬機(jī),可以適應(yīng)多種嵌入式應(yīng)用環(huán)境。本文按照歐洲D(zhuǎn)VB-MHP規(guī)范,給出了Kaffe虛擬機(jī)在Sti5516機(jī)頂盒環(huán)境下的移植方案,使其可以應(yīng)用于要求較高的嵌入式系統(tǒng)中,為機(jī)頂盒在證券信息服務(wù)、電子節(jié)目、MP3音樂下載、電子郵件、網(wǎng)頁瀏覽等新型服務(wù)領(lǐng)域的開發(fā)應(yīng)用奠定堅(jiān)實(shí)的基礎(chǔ)。我們相信,隨著基于Java技術(shù)的DVB-MHP中間件技術(shù)的廣泛使用,將使嵌入式系統(tǒng)的應(yīng)用開發(fā)更加簡捷方便。
本文地址:http://www.qingdxww.cn/thread-16586-1-1.html     【打印本頁】

本站部分文章為轉(zhuǎn)載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀點(diǎn)和對(duì)其真實(shí)性負(fù)責(zé);文章版權(quán)歸原作者及原出處所有,如涉及作品內(nèi)容、版權(quán)和其它問題,我們將根據(jù)著作權(quán)人的要求,第一時(shí)間更正或刪除。
您需要登錄后才可以發(fā)表評(píng)論 登錄 | 立即注冊(cè)

廠商推薦

  • Microchip視頻專區(qū)
  • Dev Tool Bits——使用MPLAB® Discover瀏覽資源
  • Dev Tool Bits——使用條件軟件斷點(diǎn)宏來節(jié)省時(shí)間和空間
  • Dev Tool Bits——使用DVRT協(xié)議查看項(xiàng)目中的數(shù)據(jù)
  • Dev Tool Bits——使用MPLAB® Data Visualizer進(jìn)行功率監(jiān)視
  • 貿(mào)澤電子(Mouser)專區(qū)

相關(guān)視頻

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權(quán)所有   京ICP備16069177號(hào) | 京公網(wǎng)安備11010502021702
快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 综合欧美视频一区二区三区 | 久久一本日韩精品中文字幕屁孩 | 国产女同一区二区三区五区 | 香蕉草莓丝瓜茄子番茄绿巨人 | 日韩福利一区 | 2019天天做天天拍天天夜 | kugua66演艺圈| 网站国产 | 国自产拍亚洲免费视频 | 在线观看91精品国产剧情免费 | 欧美国产亚洲一区 | 久久99精品亚洲热综合 | 91www| 四虎网址最新 | 99久9在线视频 | 四虎永久网址在线观看 | 天天操网 | 欧美在线播放 | 破外女出血一级毛片 | 精品欧美一区二区在线观看 | 四虎新地址 | 色www永久免费网站国产 | 蓝月战士奥特曼免费看 | 四虎4hu永久免费国产精品 | 狂野欧美老黑粗又硬 | 免费av片在线观看网站 | 日韩欧美国产中文字幕 | 色在线影院 | 羞羞影院免费观看网址在线 | 久热这里只有精品6 | 精品国产香蕉伊思人在线 | 国产成人精品免费久久久久 | 得得操 | 中文字幕天堂在线 | 久久国产精品无码网站 | 黄色手机看片 | 国产日韩欧美视频在线 | 亚洲高清在线观看 | a毛片免费全部播放完整成 a毛片免费看 | 国产女人好爽好多水 | 日本黄色不卡视频 |