国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于RTSJ的嵌入式系統(tǒng)API的研究與應(yīng)用

2011-06-22 08:18滕海坤陸二慶
關(guān)鍵詞:應(yīng)用程序嵌入式處理器

滕海坤,陸二慶

(1.桂林理工大學(xué)信息科學(xué)與工程學(xué)院,桂林541004;2.黑河學(xué)院)

滕海坤(碩士研究生),研究方向?yàn)榍度胧较到y(tǒng);陸二慶(高級(jí)工程師),研究方向?yàn)榍度胧较到y(tǒng)、計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)。

引 言

隨著計(jì)算機(jī)技術(shù)、網(wǎng)絡(luò)通信技術(shù)和微電子技術(shù)的迅猛發(fā)展和廣泛應(yīng)用,實(shí)時(shí)嵌入式系統(tǒng)(RTES)已經(jīng)深入到科學(xué)研究和社會(huì)生活的各個(gè)領(lǐng)域。傳統(tǒng)的觀念認(rèn)為,實(shí)時(shí)嵌入式系統(tǒng)一般采用過時(shí)或者晦澀的語(yǔ)言,如C/C++、匯編語(yǔ)言等。這些開發(fā)手段編程過于復(fù)雜、開發(fā)效率低、容易出錯(cuò)和安全性差等缺點(diǎn)已經(jīng)成為嵌入式系統(tǒng)發(fā)展的阻礙。新一代的實(shí)時(shí)嵌入式系統(tǒng)期盼增加更多的新功能,這大大提高了嵌入式系統(tǒng)的復(fù)雜度,因此需要新的開發(fā)語(yǔ)言和手段促進(jìn)實(shí)時(shí)嵌入式系統(tǒng)的開發(fā)應(yīng)用。幸運(yùn)的是,Java技術(shù)的特點(diǎn)彌補(bǔ)了上述缺點(diǎn),并且越來(lái)越受嵌入式編程人員的青睞。Java實(shí)時(shí)規(guī)范[1-2]RTSJ(也稱為Java規(guī)范申請(qǐng)JSR-001)的出現(xiàn)就是最好的例證。實(shí)時(shí)Java為實(shí)時(shí)程序員提供了一種為生產(chǎn)率而設(shè)計(jì)的現(xiàn)代主流語(yǔ)言。

Java實(shí)時(shí)規(guī)范(RTSJ)是實(shí)時(shí)Java專家組(RTJEG)制定的Java在實(shí)時(shí)性方面的擴(kuò)展規(guī)范,彌補(bǔ)了Java語(yǔ)言在實(shí)時(shí)應(yīng)用程序中的缺陷。它提供了創(chuàng)建、驗(yàn)證、分析、執(zhí)行和管理實(shí)時(shí)Java線程的應(yīng)用程序接口(API)。目前,國(guó)內(nèi)外已經(jīng)存在許多支持RTSJ的Java平臺(tái),并且已有相應(yīng)成熟的商業(yè)產(chǎn)品。如TimeSys公司推出了第一個(gè)符合RTSJ的工業(yè)版嵌入式Java平臺(tái)JTime[3],以及基于RTSJ擴(kuò)展GCJ(GNU Compiler for Java)的jRate[4]運(yùn)行時(shí)系統(tǒng)。jRate與其他實(shí)時(shí)Java平臺(tái)有些不同,因?yàn)樗鼘ava應(yīng)用程序源代碼提前編譯(AOT)生成本地代碼,這就意味著不需要Java虛擬機(jī),節(jié)省了很多不必要的開銷。然而,這些實(shí)現(xiàn)并不是針對(duì)實(shí)時(shí)嵌入式領(lǐng)域的,因?yàn)樵谇度胧较到y(tǒng)中開銷足跡(footprint)要求與實(shí)時(shí)要求同樣重要。本文的宗旨是利用可配置的嵌入式Java處理器FemtoJava[5]執(zhí)行Java字節(jié)碼,并且最優(yōu)化地執(zhí)行應(yīng)用程序所需的有效操作碼。定制的Java應(yīng)用程序可以通過Sashimi開發(fā)環(huán)境編譯,以VHDL形式實(shí)現(xiàn)處理器核心。Sashimi可以自動(dòng)改裝FemtoJava處理器的體系結(jié)構(gòu)。FemtoJava是根據(jù)特定應(yīng)用并基于FPGA技術(shù)設(shè)計(jì)的精簡(jiǎn)指令的哈佛結(jié)構(gòu)處理器,它含有多個(gè)多路復(fù)用器和寄存器,以及一個(gè)唯一的ALU,較適合用于頻繁變化的應(yīng)用領(lǐng)域。

然而,Sashimi環(huán)境缺少一個(gè)表示并發(fā)的和實(shí)時(shí)約束條件的編程模型。本文的主要目標(biāo)是通過提供基于RTSJ的支持并發(fā)任務(wù)規(guī)范的API彌補(bǔ)Sashimi環(huán)境的不足,這些API支持并發(fā)任務(wù)規(guī)范和時(shí)間限制規(guī)范。為了克服Sashimi環(huán)境這一限制,本文對(duì) RTSJ規(guī)范進(jìn)行了一些修改。在Sashimi環(huán)境上使用提供的API,程序員能夠開發(fā)并發(fā)的實(shí)時(shí)應(yīng)用程序,并且將它們部署到FemtoJava處理器,實(shí)現(xiàn)基于RTSJ的API在實(shí)際嵌入式系統(tǒng)中的應(yīng)用。

1 Sashimi環(huán)境

Sashimi開發(fā)環(huán)境[5]是一個(gè)免費(fèi)有效的嵌入式系統(tǒng)JVM 優(yōu)化工具,開發(fā)人員可以用Java模擬、仿真和直接實(shí)現(xiàn)嵌入式系統(tǒng)。Sashimi環(huán)境可以通過擴(kuò)展API支持并發(fā)任務(wù),實(shí)現(xiàn)RTSJ標(biāo)準(zhǔn)。根據(jù)Sashimi環(huán)境的定義,設(shè)計(jì)人員可以直接使用Java語(yǔ)言開發(fā)他們的應(yīng)用程序。為了滿足Sashimi環(huán)境的約束條件,必須遵循一些編程限制。例如,程序員只可以使用Sashimi環(huán)境提供的API而不是標(biāo)準(zhǔn)的Java應(yīng)用程序接口。此外,設(shè)計(jì)者們只可以使用靜態(tài)方法和屬性,因?yàn)槟壳癝ashimi環(huán)境不支持對(duì)象的動(dòng)態(tài)分配,也不支持類層次結(jié)構(gòu)的繼承和方法的多態(tài)性以及面向?qū)ο箝_發(fā)的基本概念。在Sashimi環(huán)境中,Java源代碼使用標(biāo)準(zhǔn)Java編譯器編譯生成Java字節(jié)碼。這些生成類可以在主機(jī)平臺(tái)上使用仿真Sashimi環(huán)境的API類庫(kù)進(jìn)行測(cè)試。接下來(lái)的工作是,基于生成的Java字節(jié)碼,綜合應(yīng)用程序和FemtoJava處理器生成一個(gè)定制的Femto-Java處理器控制單元。該控制單元僅支持應(yīng)用程序使用的操作碼??刂茊卧拇笮∨c應(yīng)用程序軟件利用的不同操作碼數(shù)量成正比,使其適合嵌入式系統(tǒng)應(yīng)用。

另外,需要擴(kuò)展Sashimi環(huán)境的API允許并發(fā)編程,增加一個(gè)動(dòng)態(tài)任務(wù)調(diào)度的操作系統(tǒng)層,從而使Sashimi環(huán)境支持不同的調(diào)度算法。在開銷足跡、能量消耗和實(shí)時(shí)性能方面,這些算法的影響評(píng)估在參考文獻(xiàn)[6]中有詳細(xì)描述。Sashimi環(huán)境的缺點(diǎn)是缺少高級(jí)的實(shí)時(shí)架構(gòu),導(dǎo)致設(shè)計(jì)師們只能使用低級(jí)系統(tǒng)調(diào)用生成并發(fā)進(jìn)程,與調(diào)度器相互作用。此外,Sashimi環(huán)境沒有任何機(jī)制清楚地表達(dá)任務(wù)時(shí)間限制。這些問題在下一小節(jié)通過提供的API進(jìn)行處理。

2 基于RTSJ的APⅠ設(shè)計(jì)

正如前面所述,開發(fā) API的主要目的是為基于FemtoJava微控制器的可配置的嵌入式系統(tǒng)的硬件/軟件結(jié)構(gòu)提供高級(jí)的實(shí)時(shí)編程架構(gòu)支持。這些API是基于Java實(shí)時(shí)規(guī)范[1]制定的。它允許使用調(diào)度對(duì)象,該對(duì)象是實(shí)現(xiàn)Schedulable(調(diào)度)接口類的實(shí)例,和 RealtimeThread(實(shí)時(shí)線程)類一樣。同時(shí),它也提供了一組類的存儲(chǔ)參數(shù),這些參數(shù)表示一個(gè)或更多調(diào)度對(duì)象的特殊資源要求。例如,RaleaseParameters類(釋放參數(shù)類,是AperiodicParameters和PeriodicParameters的父類)包含了一些滿足實(shí)時(shí)需求規(guī)范的有用參數(shù)。此外,基于RTSJ的API還支持以下概念:時(shí)間值(絕對(duì)時(shí)間和相對(duì)時(shí)間)、定時(shí)器、周期性/零星、非周期性任務(wù)和調(diào)度策略。術(shù)語(yǔ)“任務(wù)”表示系統(tǒng)上下文的調(diào)度成員,也可以稱為調(diào)度對(duì)象。以下是主要類的簡(jiǎn)單描述。

RealtimeThread:實(shí)時(shí)線程類擴(kuò)展了默認(rèn)的 java.lang.thread類。在實(shí)時(shí)嵌入式系統(tǒng)中RealtimeThread類表示一個(gè)實(shí)時(shí)任務(wù),該任務(wù)是周期性的還是非周期性的,取決于給出的釋放參數(shù)對(duì)象。如果任務(wù)使用PeriodicParameters類型的釋放參數(shù),那么任務(wù)是周期性的;如果任務(wù)使用的是AperiodicParameters或者SporadicParameters類的實(shí)例,那么任務(wù)是零星的、非周期性的。

ReleaseParameters:釋放參數(shù)類是實(shí)時(shí)任務(wù)的所有釋放參數(shù)的基類。ReleaseParameters類的實(shí)例包括發(fā)布的成本、啟動(dòng)時(shí)間、以及錯(cuò)過最后期限的處理器或者成本超支。它的子類PeriodicParameters和AperiodicParameters分別表示周期性和非周期性任務(wù)的釋放參數(shù)。PeriodicParameters必須包含一個(gè)周期值和開始/結(jié)束的時(shí)間值。作為一個(gè)非周期性任務(wù)的類型,SporadicParameters類繼承了AperiodicParameters類,偶發(fā)性任務(wù)的運(yùn)行周期等于它的兩次到達(dá)間隔的最小值。

SchedulingParameters:調(diào)度參數(shù)類是調(diào)度器對(duì)象使用的所有調(diào)度參數(shù)的基類。PriorityParamters類表示任務(wù)的優(yōu)先級(jí),它的實(shí)例分配給Schedulable對(duì)象,它們的執(zhí)行資格是由優(yōu)先級(jí)決定的。設(shè)計(jì)者們只需創(chuàng)建一個(gè)新的實(shí)例或共享現(xiàn)有的實(shí)例,提供一個(gè)整型值給構(gòu)造函數(shù)作為優(yōu)先級(jí),并且分配給現(xiàn)有的Schedulable。

Scheduler:調(diào)度器本身是一個(gè)抽象類。它的子類“PriorityScheduler”、“RateM onotonicScheduler”和“EDFScheduler”分別表示固定優(yōu)先、速率單調(diào)(Rate Monotonic)和最早期限優(yōu)先調(diào)度算法。

HighResolutionTime:與 java.util.Date類相比,RTSJ對(duì)時(shí)間概念提供有力的支持。高解析度時(shí)間類是一個(gè)抽象類,不能實(shí)例化。不過它為所有其他高解析度時(shí)間類存儲(chǔ)ms和 ns字段,并為它的子類 AbsoluteTime(絕對(duì)時(shí)間)、RelativeTime(相對(duì)時(shí)間)提供方法。絕對(duì)時(shí)間是以一個(gè)偏移量給出的,參考值是格林威治時(shí)間;相對(duì)時(shí)間總是一段持續(xù)的期限,它可以取整數(shù)、負(fù)數(shù)或零。另外,RationalTime(有理時(shí)間)類通過增加頻率擴(kuò)展了 RelativeTime類,它表達(dá)的是每段時(shí)間間隔內(nèi)某事物發(fā)生的頻率。

Clock:RTSJ支持多個(gè)時(shí)鐘概念,基于RTSJ的Clock API定義了實(shí)時(shí)時(shí)鐘表達(dá)全球性的時(shí)鐘參考。該時(shí)鐘類返回一個(gè)絕對(duì)時(shí)間對(duì)象表示系統(tǒng)的當(dāng)前日期和時(shí)間。

Timer:定時(shí)器類是一個(gè)表示系統(tǒng)定時(shí)器的抽象類。它的子類OneShotTimer和PerodicTimer分別表示一次性定時(shí)器和周期性定時(shí)器。

本文一些API類的實(shí)現(xiàn)方式與RTSJ推薦的方式比較,有些微的差異,這是由于FemtoJava處理器結(jié)構(gòu)的限制。在RealtimeThread類中就存在著這種差異。實(shí)時(shí)線程類中有兩個(gè)抽象方法必須在它的子類中實(shí)現(xiàn)——mainTask()和exceptionTask()。它們分別表示任務(wù)主體(相當(dāng)于普通Java線程的 run()方法)和錯(cuò)過最后期限的異常處理代碼。后者代替了一個(gè)AsyncEventHandler(異步事件處理器)對(duì)象,在RTSJ中異步事件處理程序是設(shè)計(jì)用來(lái)處理實(shí)時(shí)應(yīng)用程序可能需要處理的不同的系統(tǒng)和編程定義的事件,并且異步事件處理器對(duì)象應(yīng)該傳遞給釋放參數(shù)對(duì)象。如果任務(wù)錯(cuò)過了最后期限,則會(huì)拋出異常并且執(zhí)行exceptionTask()函數(shù)。異常處理代碼執(zhí)行以后,任務(wù)執(zhí)行流程可能會(huì)跳轉(zhuǎn)到run()方法或者終止,這取決于實(shí)時(shí)任務(wù)的特征。如果任務(wù)是周期的,那么 run()方法應(yīng)該重新啟動(dòng)。這種差異建議使用在任務(wù)對(duì)(taskpairs)概念的調(diào)度算法。

在第1小節(jié)中提到Sashimi環(huán)境的傳統(tǒng)版本不支持對(duì)象創(chuàng)建。因此,為了給在FemtoJava平臺(tái)上制定的API提供全面支持,需要擴(kuò)展一些新屬性到Sashimi環(huán)境。首先,需要擴(kuò)展Sashimi環(huán)境支持對(duì)象的綜合。根據(jù)相關(guān)修改,應(yīng)用程序?qū)ο笤诤铣蓵r(shí)間進(jìn)行靜態(tài)分配。換言之,在系統(tǒng)中所有對(duì)象都定義了一個(gè)優(yōu)先級(jí),并且為了方便將對(duì)象存儲(chǔ)到RAM中允許檢測(cè)整個(gè)內(nèi)存。雖然這種做法可能涉及到較高的內(nèi)存用法,但是在實(shí)時(shí)系統(tǒng)開發(fā)中這種做法是非常適當(dāng)?shù)?因?yàn)樗苊饬死占?GC)的使用。垃圾收集器算法沒有時(shí)間限制,不可中斷,使得Java運(yùn)行程序相當(dāng)缺乏確定性。在實(shí)時(shí)嵌入式系統(tǒng)中這種不確定性是不能容忍的。

FemtoJava微處理器引入了4個(gè)新的操作碼以支持提供的 API:getfiel、putfield、invokevirtual和 invokespecial。前面兩個(gè)操作碼與對(duì)象區(qū)域的訪問相關(guān),它們的功能分別是獲取和設(shè)定值。另外兩個(gè)操作碼與方法調(diào)用相關(guān),invokevirtual操作碼用來(lái)調(diào)用公共的或者受保護(hù)的方法,invokespecial操作碼用來(lái)調(diào)用構(gòu)造函數(shù)和私有方法。FemtoJava微處理器的另一個(gè)擴(kuò)展是增加一個(gè)實(shí)時(shí)時(shí)鐘,用來(lái)提供嵌入式系統(tǒng)的時(shí)間概念?;赗TSJ的API成員和調(diào)度層都可以使用這個(gè)時(shí)鐘。

3 APⅠ在實(shí)際嵌入式系統(tǒng)中的應(yīng)用

本文選用電梯控制系統(tǒng)[7]作為驗(yàn)證Sashimi環(huán)境擴(kuò)展的案例。該系統(tǒng)是一種多臺(tái)電梯優(yōu)化調(diào)度的系統(tǒng),包含了并發(fā)任務(wù)和硬實(shí)時(shí)限制條件。由于電梯控制系統(tǒng)任務(wù)的多樣性,傳統(tǒng)的開發(fā)手段將很難解決在線調(diào)度及資源配置的組合優(yōu)化問題。本文使用實(shí)時(shí)Java多線程技術(shù)改變了這些現(xiàn)狀。圖1表示電梯控制系統(tǒng)的類協(xié)作圖,從圖中可以觀察出,Timer類實(shí)現(xiàn)了Sashimi環(huán)境的任務(wù)時(shí)間限制條件。其通過getRealtimeClock()方法調(diào)用實(shí)時(shí)時(shí)鐘對(duì)象,獲得單一實(shí)時(shí)時(shí)鐘的引用。

圖1 電梯控制系統(tǒng)的類協(xié)作圖

雖然電梯控制系統(tǒng)中包含了很多類,但是本文將主要討論LiftInitializer和LiftDoor類,因?yàn)楣P者認(rèn)為這兩個(gè)類在API的使用中具有足夠的代表性。LiftInitializer類是電梯控制系統(tǒng)實(shí)現(xiàn)的主要類。這個(gè)類的功能是負(fù)責(zé)對(duì)象分配、初始化和啟動(dòng)(實(shí)時(shí)任務(wù)應(yīng)用)。從電梯控制系統(tǒng)代碼中能夠看到,只有靜態(tài)對(duì)象被分配。initSystem()方法表示應(yīng)用程序執(zhí)行流程的起始點(diǎn),并且提供對(duì)象初始化和實(shí)時(shí)任務(wù)啟動(dòng)的功能。實(shí)時(shí)任務(wù)啟動(dòng)可以通過調(diào)用start()方法實(shí)現(xiàn)。代碼的最后調(diào)用了 sleep()方法,這就意味著這個(gè)初始化類不再使用并被鎖定。這種做法僅在系統(tǒng)初始化方法中使用。電梯控制系統(tǒng)的LiftInitializer類代碼如下:

LiftDoor類在系統(tǒng)中關(guān)聯(lián)模式表示一個(gè)并發(fā)實(shí)時(shí)任務(wù),與系統(tǒng)時(shí)鐘有著密切的關(guān)系。本文使用一個(gè)自定義異步事件和一個(gè)一次性定時(shí)器分別實(shí)現(xiàn)電梯門打開和關(guān)閉的任務(wù)。在電梯門應(yīng)用中,FloorSensor類是一個(gè)事件處理程序,等待聽到請(qǐng)求的樓層已經(jīng)到達(dá)。當(dāng)它到達(dá)時(shí),它停止電梯并打開門。這個(gè)舉動(dòng)觸發(fā)了關(guān)閉定時(shí)器(One-ShotTimer類),其處理類是DoorTimer。當(dāng)它觸發(fā)時(shí),在等待10 s后,closeDoors方法被調(diào)用,電梯按設(shè)定將開始再次移動(dòng)。作為一次性定時(shí)器,門定時(shí)器不會(huì)再次觸發(fā),除非用戶再次調(diào)用它的enable和start方法。電梯門類部分代碼:

本文最后的工作是整合API、Sashimi環(huán)境和Femto-Java處理器生成完整的嵌入式系統(tǒng)。Sashimi環(huán)境把Java編譯器生成的 Java類文件作為輸入,生成FemtoJava處理器的硬件單元(以VHDL文件形式)和嵌入式系統(tǒng)的應(yīng)用軟件。由優(yōu)化的Sashimi環(huán)境生成的FemtoJava處理器是非常重要的,因?yàn)樗恢С智度胧较到y(tǒng)軟件使用的Java操作碼。另一個(gè)值得注意的是:一旦應(yīng)用程序?qū)ο笤谡蠒r(shí)間內(nèi)分配,就沒有必要使用垃圾收集器。雖然這會(huì)導(dǎo)致較高的內(nèi)存消耗,但是它提供了實(shí)時(shí)嵌入式系統(tǒng)的確定性要求。

結(jié) 語(yǔ)

本文的目標(biāo)是使用基于RTSJ的API,優(yōu)化實(shí)時(shí)嵌入式系統(tǒng)開發(fā)。該API是以專門執(zhí)行Java字節(jié)碼的FemtoJava處理器為目標(biāo)平臺(tái)。這些API為程序員提供了必要的工具來(lái)解決虛擬機(jī)和應(yīng)用程序中的易變性,并且程序員可以在實(shí)時(shí)應(yīng)用程序中使用高級(jí)機(jī)制表示并發(fā)和時(shí)間性的約束條件。為了保證API盡可能地接近RTSJ規(guī)范,對(duì)RTSJ規(guī)范進(jìn)行了較小的修改,進(jìn)一步提高了嵌入式實(shí)時(shí)性的服務(wù)質(zhì)量。同時(shí),實(shí)時(shí)Java所具備的優(yōu)勢(shì)將極大地改變嵌入式控制軟件的設(shè)計(jì)難度。相信在未來(lái)的幾年里,實(shí)時(shí)Java技術(shù)將會(huì)給嵌入式控制領(lǐng)域帶來(lái)巨大的影響。

[1]Greg Bollella,James Gosling.The Real-Time Specification for Java[OL].[2011-04].http://www.rtj.org/rtsj-V1.0.pdf.

[2]Bruno Eric J,Bollella Greg.Java實(shí)時(shí)編程[M].田思源,譯.北京:機(jī)械工業(yè)出版社,2010.

[4]Corsaro Angelo,Schmidt Douglas C.The Design and Performance of the jRate Real-time Java Implementation[C]//the 4th International Symposium on Distributed Objects and Applications.Irvine,CA,October-November,2002.

[5]S A Ito,L Carro,R P Jacobi.M aking Java Work for Microcontroller Applications[J].IEEE Design&Test of Computers,2001,18(5).

[6]L B Becker,M A Wehrmeister,L Carro,et al.Evaluating High-level Models for Real-Time Embedded Systems Design[C]//29thWorkshop on Real-Time Programming.Istanbul,2004.

[7]曹建忠,羅飛,等.新型電梯群控系統(tǒng)的建模和控制策略研究[J].微計(jì)算機(jī)信息,2006,22(13).

猜你喜歡
應(yīng)用程序嵌入式處理器
刪除Win10中自帶的應(yīng)用程序
谷歌禁止加密貨幣應(yīng)用程序
搭建基于Qt的嵌入式開發(fā)平臺(tái)
嵌入式軟PLC在電鍍生產(chǎn)流程控制系統(tǒng)中的應(yīng)用
Imagination的ClearCallTM VoIP應(yīng)用現(xiàn)可支持Cavium的OCTEON? Ⅲ多核處理器
ADI推出新一代SigmaDSP處理器
Altera加入嵌入式視覺聯(lián)盟
倍福 CX8091嵌入式控制器
三星電子將開設(shè)應(yīng)用程序下載商店
微軟軟件商店開始接受應(yīng)用程序