<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > Java在嵌入式系統(tǒng)中的解決方案

          Java在嵌入式系統(tǒng)中的解決方案

          作者: 時(shí)間:2011-08-08 來(lái)源:網(wǎng)絡(luò) 收藏

          一、引言

          本文引用地址:http://www.ex-cimer.com/article/150399.htm

            的設(shè)計(jì)者企圖建立一個(gè)簡(jiǎn)單的、面向?qū)ο蟮?、智慧的、已?jīng)解譯的、強(qiáng)大的、安全的、架構(gòu)合理的、可移植的、高性能的、多線程的、動(dòng)態(tài)的語(yǔ)言。為使對(duì)開(kāi)發(fā)者有吸引力,Sun公司融合了類似于C語(yǔ)言的語(yǔ)法和結(jié)構(gòu)。然而Sun最終沒(méi)有達(dá)到這個(gè)目標(biāo),還是被證明不適合小型的電子設(shè)備,這很大程度是因?yàn)樗蠖宜俣嚷?。?yīng)用Java程序所需要的處理能力和內(nèi)存量,對(duì)這類設(shè)備來(lái)說(shuō)太昂貴了。

            然而,Sun公司設(shè)計(jì)Java時(shí)最重要的是平臺(tái)無(wú)關(guān)及網(wǎng)絡(luò)集成。一個(gè)無(wú)須更改能夠在幾種不同硬件和軟件平臺(tái)運(yùn)行的程序,對(duì)網(wǎng)絡(luò)環(huán)境來(lái)說(shuō)是一個(gè)理想的程序。對(duì)想建立通過(guò)網(wǎng)絡(luò)來(lái)通訊并利用網(wǎng)上資源的分布式程序的開(kāi)發(fā)者來(lái)說(shuō),一種在任何平臺(tái)上都有內(nèi)置的和標(biāo)準(zhǔn)的網(wǎng)絡(luò)支持的語(yǔ)言是一個(gè)大實(shí)惠。

            1、Java語(yǔ)言與

            對(duì)于選用編程語(yǔ)言,一般說(shuō),越是高級(jí)的語(yǔ)言,其編譯和運(yùn)行庫(kù)施加的開(kāi)銷越大,你的應(yīng)用程序也越大,越慢。已經(jīng)公認(rèn)用匯編語(yǔ)言能寫(xiě)出最小最快的程序,其次是用C或Forth,接下來(lái)較大的是C++或Basic,然后才是Java。因此一般來(lái)說(shuō),編程人員都會(huì)首選匯編和C,而然后才會(huì)考慮C++或Java。

            但是開(kāi)發(fā)者為何要來(lái)關(guān)注Java呢?筆者以為,隨著不斷增長(zhǎng)的市場(chǎng)需求,很多嵌入設(shè)備必須適應(yīng)網(wǎng)上交流的需要,為了迎合此要求,考慮這種到開(kāi)發(fā)Internet應(yīng)用程序的便利,眾多開(kāi)發(fā)者都發(fā)現(xiàn)使用這種語(yǔ)言是有意義的。另一個(gè)原因是隨著內(nèi)存條及32位處理器價(jià)格的下降,最初在嵌入使用Java太昂貴的問(wèn)題不再有了。隨著使用Java的成本代價(jià)減少,它的很多優(yōu)點(diǎn)應(yīng)當(dāng)被考慮作為嵌入平臺(tái)。

            2、Java對(duì)于嵌入式的優(yōu)點(diǎn)分析

            Java語(yǔ)言的優(yōu)點(diǎn)在于:它當(dāng)初就是由理解和信奉網(wǎng)絡(luò)計(jì)算夢(mèng)想的一個(gè)小巧而專注的開(kāi)發(fā)組設(shè)計(jì)的,雖然該語(yǔ)言最初的實(shí)施方案有點(diǎn)缺陷,有許多后來(lái)已被解決了,但為了這個(gè)夢(mèng)想,他們很少在技術(shù)上妥協(xié),結(jié)果誕生了一種專為以相互通訊為主要目的的設(shè)備而設(shè)計(jì)的語(yǔ)言。

            有許多技術(shù)上的優(yōu)點(diǎn)都可能會(huì)引導(dǎo)嵌入開(kāi)發(fā)者選擇Java,以下就是這些優(yōu)點(diǎn)(其中有幾個(gè)也適用于通用編程)

            A)與處理器無(wú)關(guān)

            Java的第一個(gè)優(yōu)點(diǎn)就是與處理器無(wú)關(guān),這個(gè)優(yōu)點(diǎn)似乎與嵌入式沒(méi)什么相干。傳統(tǒng)上,嵌入程序就是針對(duì)特定的微處理器設(shè)計(jì)并在其上運(yùn)行的,而C語(yǔ)言程序的可移植性則可通過(guò)編譯或交叉編譯來(lái)保障。

            但是在Sun公司的模型中,一個(gè)程序可能是存儲(chǔ)在一個(gè)系統(tǒng)上,而被下載并運(yùn)行在另一個(gè)完全不同的系統(tǒng)上;設(shè)備可能從不同地方下載一些程序來(lái)在一個(gè)處理器上運(yùn)行,或者不同的處理器運(yùn)行一個(gè)程序,通過(guò)網(wǎng)絡(luò)在相互間傳遞數(shù)據(jù)。使用Java,一個(gè)嵌入式系統(tǒng)就可能成為一個(gè)通用的通信設(shè)備,能下載并運(yùn)行能完成特定任務(wù)的程序。

            對(duì)嵌入式系統(tǒng),這是一個(gè)新的模型,已經(jīng)有一些開(kāi)發(fā)者正在向它靠攏。例如,電視機(jī)機(jī)頂盒的供應(yīng)商已宣布并入JVM,以使用戶能通過(guò)Java applets在他們觀看電視的同時(shí)接收到的支持該電視節(jié)目的一些內(nèi)容。這樣你在觀看足球比賽時(shí),看到的支持內(nèi)容就可以是對(duì)球員的技術(shù)統(tǒng)計(jì);若你在看電影,看到的支持內(nèi)容就可以是演員的背景資料。JVM還被并入到移動(dòng)電話中,這樣用戶可接收股票報(bào)價(jià)信息、比賽分?jǐn)?shù)及其他即時(shí)信息。

            筆者以為,這是一個(gè)恰當(dāng)?shù)脑O(shè)計(jì)和實(shí)施模型。其一是你在選擇開(kāi)發(fā)平臺(tái)時(shí)更加靈活了。你無(wú)需在與目標(biāo)相同的平臺(tái)上開(kāi)發(fā),也不用去關(guān)心交叉編譯,因?yàn)镴ava字節(jié)碼能在任何有JVM的操作系統(tǒng)中運(yùn)行;另一個(gè)優(yōu)點(diǎn)是:幾乎所有的檢測(cè)和調(diào)試可以獨(dú)立于目標(biāo)設(shè)備來(lái)進(jìn)行。但是,一些數(shù)據(jù)輸入和硬件交互要求在目標(biāo)(或是很好的仿真系統(tǒng))上測(cè)試。由于個(gè)別JVM有時(shí)有兼容性的問(wèn)題,你應(yīng)該在所有將用到該程序的平臺(tái)上測(cè)試它。但一般來(lái)說(shuō),你并不要高級(jí)而昂貴的、配備有邏輯探針、ICE以及其它調(diào)試工具的、針對(duì)目標(biāo)平臺(tái)的開(kāi)發(fā)環(huán)境。

            B)面向?qū)ο蟮木幊?/p>

            Java是一種純粹面向?qū)ο蟮恼Z(yǔ)言。所有代碼和數(shù)據(jù)都是某個(gè)類的一部分,沒(méi)有全局變量或是獨(dú)立于類存在的代碼,一個(gè)對(duì)象是一個(gè)類的實(shí)例,對(duì)象是通過(guò)調(diào)用操作方法,或者說(shuō)函數(shù)來(lái)操作的,而這些方法或函數(shù)也是類的一部分,對(duì)象的方法就對(duì)象的數(shù)據(jù)進(jìn)行操作。Java類被組織成一個(gè)等級(jí)層次,在層次結(jié)構(gòu)中,一個(gè)子類能夠繼承其超類的行為,并可用子類所具備的一些特有功能來(lái)擴(kuò)展其超類的功能。對(duì)象模型是你能定義對(duì)應(yīng)真實(shí)事物的數(shù)據(jù)結(jié)構(gòu),使得程序的任務(wù)和任務(wù)如何實(shí)現(xiàn)者二者之間的轉(zhuǎn)換變得基本上透明。

            面向?qū)ο蟮脑O(shè)計(jì)和編程的優(yōu)點(diǎn)在于其開(kāi)發(fā)速度和代碼的可維護(hù)性,許多面向?qū)ο蟮拈_(kāi)發(fā)都能通過(guò)利用和更改現(xiàn)存類庫(kù)來(lái)完成,而不是創(chuàng)造一個(gè)新的結(jié)構(gòu),這就使開(kāi)發(fā)加快了,例如,一個(gè)硬件開(kāi)關(guān)能在軟件中使用一個(gè)開(kāi)關(guān)對(duì)象來(lái)實(shí)現(xiàn),該對(duì)象包含用于控制和操作開(kāi)關(guān)的所有必需的數(shù)據(jù)和代碼。面向?qū)ο蟮姆椒ㄟ€盡量使用自然的結(jié)構(gòu),使其有很高的可讀性,且可輕易更改和加強(qiáng)。

            C)安全和安全操作

            由于有了JVM,一個(gè)Java應(yīng)用程序與操作系統(tǒng)或硬件完全隔絕,因此計(jì)算機(jī)病毒或其它作祟的的代碼就很難獲得對(duì)設(shè)備的控制。虛擬機(jī)是主機(jī)設(shè)備和那些可能難以確定其質(zhì)量和可靠性的軟件之間的一個(gè)保護(hù)層。

            另外,Java設(shè)計(jì)者從該語(yǔ)言中去掉了指針變量的概念。Java不能任意訪問(wèn)其內(nèi)存位置,它們只能讀寫(xiě)有Java內(nèi)存分配管理系統(tǒng)創(chuàng)建的對(duì)象。由于Java編譯器所強(qiáng)制的嚴(yán)格的分類機(jī)制,從理論上來(lái)說(shuō),訪問(wèn)那些未分配給程序的內(nèi)存區(qū)域是不可能的。這個(gè)限制使得要寫(xiě)惡意代碼的程序變得非常困難了。

            對(duì)Java applet施加的限制就更加嚴(yán)格了。由于Java applet被設(shè)計(jì)成從Internet上下載,因而被視為不可信任的代碼,除非它包括你已認(rèn)定為可信任的主機(jī)的數(shù)字指紋。JVM在內(nèi)存的一個(gè)稱之為sandbox的區(qū)域運(yùn)行諸如applet這種不可信任的代碼。它給每個(gè)applet分配資源和特權(quán),并將其限定在這些分配區(qū)域范圍中。

            D)內(nèi)存管理

            Java的內(nèi)存管理遠(yuǎn)比其他語(yǔ)言簡(jiǎn)單,因?yàn)樗皇褂弥羔?。?dāng)對(duì)象被實(shí)例化時(shí),內(nèi)存被動(dòng)態(tài)分配。正如我們前面分析的,對(duì)個(gè)別內(nèi)存地址的訪問(wèn)被Java的設(shè)計(jì)者視為一個(gè)對(duì)安全的潛在危險(xiǎn),因此,訪問(wèn)也被禁止。而且,Sun的網(wǎng)絡(luò)模型已假定你也許不知道目標(biāo)處理器,而引用專用內(nèi)存地址變得沒(méi)有必要。去掉指針的結(jié)果不僅提高了安全性,還簡(jiǎn)化了編程,錯(cuò)誤也減少了。

            在C語(yǔ)言中,可以用值或引用的方式來(lái)訪問(wèn)數(shù)據(jù)。事實(shí)上,出于靈活性和控制考慮,非原始數(shù)據(jù)類型都由引用方式來(lái)存取,即通過(guò)指針訪問(wèn)。因此,值和引用的不同變得非常清楚,特別是:因?yàn)槟悴坏貌皇褂貌煌姆?hào)(*和)來(lái)存取數(shù)據(jù)。要用這兩種不同的訪問(wèn)方式,你必須清楚理解它們是什么以及你為什么應(yīng)該使用這一個(gè),而不使用那一個(gè)。

            在Java中,由值和引用來(lái)存儲(chǔ)是無(wú)縫的,尤其因?yàn)槠浞?hào)都一樣。兩者間唯一不同在于數(shù)據(jù)類型本身:所有原始數(shù)據(jù)類型始終由值的方式存取;所有對(duì)象,包括字串、數(shù)組以及文件流,始終由引用方式訪問(wèn)。聲明為原始數(shù)據(jù)變量類型包含該變量的值,聲明為對(duì)象的變量則包含對(duì)該對(duì)象(即該對(duì)象的地址)的一個(gè)引用,而非對(duì)象自身的引用。僅僅聲明一個(gè)對(duì)象變量并不給對(duì)象分配內(nèi)存,你必須用“new”關(guān)鍵字來(lái)分配內(nèi)存和創(chuàng)建對(duì)象。

            這兩種方法最根本的不同在于:不可能象在C中那樣就Java內(nèi)存地址做指針?biāo)阈g(shù)或其他操作。Java中對(duì)象的地址是相對(duì)的(或虛擬的),它由虛擬機(jī)任意分配,因此你沒(méi)有理由還想要指針地址。

            E)垃圾收集

            垃圾收集自動(dòng)收集內(nèi)存中未引用的內(nèi)存,并將其歸回空閑內(nèi)存鏈表中。JVM使用此功能將不在使用的內(nèi)存還給系統(tǒng)。

            當(dāng)Java程序說(shuō)明并實(shí)例化一個(gè)對(duì)象或數(shù)組時(shí),它僅僅做一個(gè)JVM請(qǐng)求,訪問(wèn)其下面的系統(tǒng)內(nèi)存(通常是通過(guò)主機(jī)操作系統(tǒng))并分配內(nèi)存,Java的垃圾收集系統(tǒng)通過(guò)內(nèi)存收集對(duì)象,然后檢查它們的引用鏈。Java的垃圾收集系統(tǒng)的工作方式一般是搜索內(nèi)存中的對(duì)象,然后檢查它們的引用表。它計(jì)算程序中有多少變量當(dāng)前正在引用每個(gè)對(duì)象。若對(duì)象的引用數(shù)目為零,它知道此對(duì)象不再在使用了,它的內(nèi)存可以收回。其結(jié)果就是,不必像你在C語(yǔ)言所作的那樣,要人工來(lái)釋放分配的內(nèi)存。在C中,釋放內(nèi)存是一個(gè)必要、耗時(shí)且易出錯(cuò)的細(xì)節(jié)。Java自動(dòng)而精確的處理此過(guò)程,去除了C/C++程序中那種常見(jiàn)的錯(cuò)誤致因。

          linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)

          上一頁(yè) 1 2 3 下一頁(yè)

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();