Java i inbyggda system gör applikationsutveckling billigare

Java i inbyggda system gör applikationsutveckling
billigare
Jonas Jonsson utvecklare Data Respons AB
Vad har hänt med Java? För några år sedan, före IT-bubblans kulmen, talade många
varmt om Java och plattformsoberoende. Trots att intresset svalnat något har en del
hänt till dags dato. Det finns flera implementeringar och leverantörer av Virtuella
Javamaskiner JVM (Java Virtual Machine) som även anpassats för inbyggda system.
Målet och visionen med Java är, och har varit, att skapa plattformsoberoende. Genom
att låta en programvara arbeta som en virtuell processor på hårdvaruprocessorn kan
plattformar, med olika arkitektur, köra samma applikation, förutsatt att en JVM finns
för plattformen.
Målet och visionen med Java har gjort att många lärt sig språket. Väl spridda
kunskaper av programmering i ett språk bidrar till att öka efterfrågan av möjligheten
att programmera även inbyggda system i det aktuella språket. Idag byggs dessutom
allt större och mer komplexa system där olika hårdvaruarkitekturer ansluts.
Utveckling av nya produkter har länge krävt
bakåtkompabilitet. När större system med
hårdvaruarkitekturer från olika leverantörer och av
olika arkitektur sätts samman, växer behovet av att
underlätta bakåtkompabilitet i framtiden. De system
som ligger på ritbordet konstrueras för att ha
möjlighet att inkludera andra hårdvaruarkitekturer i
framtiden och därigenom uppfylla framtida behov.
Application
Java VM (JVM)
Native Interface (NI)
Application Programming
Interface API
Problem som uppstår när systemen blir större och
Realtids OS RTOS
olika komponenter integreras är att antalet
mjukvaror och mjukvaruversioner riskerar att växa
Emb. Hardware
till ett svårhanterbart antal.Även små förändringar i
välskriven C-kod som använder maskinspecifika
definitioner konsekvent orsakar mycket arbete när
Figur 1 Den virtuella maskinen
placeras mellan API och
ändringar måste göras på flera ställen i olika
applikation för att göra
källkoder.
applikationen mindre beroende
Därefter följs ändringarna av kompileringar och
av hårdvaran.
uppdatering av applikationer för varje enskilld
hårdvaruarkitektur. Om samtliga embedded system
istället använder samma Java källkod för de uppgifter som är gemensamma, t.ex
kommunikation, protokollhantering och textbehandling/parsning, underlättas
förfarandet eftersom applikationen är generell och endast finns i en version som ej
behöver kompileras gentemot varje system. Med en JVM och ett NI (Native Interface)
görs hårdvaran åtkomlig på ett generellt sätt. Genom ett generellt beteende för all
hårdvara kan samtliga komponenter exekvera samma applikationer. När endast en
generell applikation behöver underhållas förenklas administrationen av komplexa
system. Därtill minskas beroendet av enskilda leverantörer genom att mjukvaran blir
fristående från hårdvaran.
Ytterligare fördelar med att implementera JVM är att de nackdelar som följer när en
kund skall motiveras att köpa utvecklingsmiljöer för specifika RTOS (Real-Time
Operating System) undviks. I vissa fall är kostnaden för dessa hög i förhållande till
den produkt som skall säljas. Det krävs varken ekonomi- eller psykologiexamen för
att förstå svårigheten att motivera en produkt för en kund som själv vill utveckla
applikationer när konstnaden för utvecklingsverktygen är betydande. Framförallt vid
små volymer och produkter med lågt pris förskjuts prisbilden, utslaget per enhet,
kraftigt. Till denna direkta kostnad kommer i många fall en utbildnings- och
uppstartsperiod av nya utvecklingsmiljöer innan applikationsutvecklingen kan ta fart.
För utveckling i Java finns en ett större antal alternativa utvecklingsverktyg som
utvecklas snabbare i förhållande till de specifika verktygen för enskillda RTOS.
Vilka frågeställningar är det som väcks vid implementation av en JVM? Två centrala
aspekterna vid implementation av en JVM i inbyggda
Javainstruktion
system är, exekveringshastigheten kontra realtidskrav och
begränsningar i minneskapacitet. I standarden för Java
Bytekoder
kompileras källkoden till bytekoder. Bytekoderna tolkas
och länkning (dvs klassladdning) sker under körning, av
C instruktioner
den virtuella maskinen som i sig är ett program som
agerar som en processor. Härigenom kommer exekvering
Operationskoder
av en enskild Javainstruktion att kräva exekvering av en
mängd operationskoder.
Figur 2 Effektivitet vi exekvering
J2M
E
AP
PD
JGP
...
J2E
E
J2SE
CDC
DC
CL
Sun har lett arbetet vid framtagningen av Java. Med
tiden har Sun delat in Java teknologin i flera delar för
att passa olika typer av plattformar med olika resurser.
Den första delningen utgörs av
• J2EE - Java2 Enterprise Edition avsedd för
server och finansiella applikationer.
• J2SE - Java2 Standard Edition primärt avsedd
för webutveckling
• J2ME - Java2 Micro Edition avsedd för
inbyggda system.
Micro Edition är i sin tur indelad i CLDC - Connected
Limited Device Configuration och CDC - Connected
Limited Device Configuration. För anpassning mot de
minsta systemen har CLDC indelats i ytterligare
profiler bl.a. mot mobila informationsenheter och
handdatorer.
M
ID
P
av Javaapplikationer.
Det andra problemet som uppkommer med begränsningar
i minneskapacitet består i ambitionen att göra Java
flexibelt ”-Write Once Run Anywhere, WORA”. Konceptet WORA kräver minne
eftersom klasser, även om att de aldrig används, finns permanent i minnet för att, vid
behov kunna, anropas under exekvering. För att lösa dessa problem finns framförallt
två ansatser och dessa tillämpas av olika leverantörer.
Figur 3 Indelning av Java teknologi
från Sun
För att öka exekveringshastigheten kan Java koden kompileras till exekverbar
maskinkod. Denna kompilerade lösning erbjuds bl.a. med CEE-J från USA baserade
Skelmir. Genom att bygga applikationen före nedladdning går det att undvika att icke
använda klasser laddas ner och förbrukar minneskapacitet. Detta kan vara att föredra
om minneskrav är en central aspekt bl.a. finns SimpleRTJ från den Australiensiske
leverantören RTJ Computing. Utöver detta erbjuds även kombinationer av de två
åtgärderna för att höja prestandan från bl.a. Schweiziska Esmertec i form av Jbed och
Fast-J från WindRiver.
Memory usage:
Linking
Compile
Interpret
Run-time
Execution speed:
Tyvärr innebär, som oftast, fördelar ur en synvinkel
nackdelar i en annan. När implementation av JVM
görs på system med väsentligt begränsade resurser
och specifik I/O i jämförelse med en desktop PC
kan detta innebära behov, eller krav, att frångå en
komplett implementation. Priset för att öka
exekveringshastigheten eller minska minnesbehovet
medför ofta avsteg från Java standard. Om länkning
sker före nerladdning blir det ej möjligt att ladda
generella Java klasser. Det blir inte heller möjligt att
exekvera generella bytekoder om kompilering sker
till operationskod för att öka
exekveringshastigheten.
Sun
Build-time
SimpleRTJ
Skelmir
Skelmir
Esmertec
Fast-J
Figur 4 Leverantörers anpassningar
mot inbyggda system
I vissa sammanhang kan det även vara acceptabelt att förbättra den ena av
minnesbehov och exekveringshastighet på bekostnad av den andra men med fullt Java
stöd. En metod som används för detta är JIT kompilering (Just In Time). JIT innebär
att klasserna kompileras till maskinkod, på målsystemet, när de laddas. Detta ökar
exekveringshastigheten och närmar sig i detta hänseende Java kod som kompilerats
till maskinkod. Det krävs dock en kompilator som exekverar på målsystemet vilket
ökar behovet av minne och minskar exekveringshastigheten vid första exekveringen
av en klass, å andra sidan bibehålles möjlighet till dynamisk klassladdning.
Data Respons har med relativt små ansträngningar genomfört en portning av
SimpleRTJ från RTJ Computing, som ett examensarbete vid KTH-Syd. SimpleRTJ är
förmodligen den lösning som kan köras med minst krav på hårdvaran i fråga om
processor och minne. Alternativet är relativt billigt med licensavgift från US$3000 +
royalty, vilket kan jämföras med andra alternativ från 500 000 SEK och uppåt. Låga
avgifter beror till stor del på att leverantören själv inte har som ambition att
genomföra portningen. Av detta följer endast generellt Javastöd och ej stöd som
kräver anpassning gentemot specifik hårdvara. I inbyggda sammanhang finns ej, i alla
tillämpningar, behov för stöd av t.ex. GUI (Graphic User Interface). Ett exempel på
detta är Data Respons produkt RIO*
(Remote Input Output), mot vilken
portningen gjorts, där avsaknad av GUI inte
utgör någon begränsning eftersom grafiska
enheter saknas. Möjlighet finns dock att
själv skapa detta om behov uppkommer i
framtiden.
Data Respons har även hållit
aftonseminarium med titeln ”Java och
inbyggda system” vid det nyöppnade
kontoret i Göteborg. Detta seminarium
planeras även att hållas i Stockholm under
september.
Källförteckning
http://java.sun.com
http://www.esmertec.com
http://www.skelmir.com
http://www.rtjcom.com
*
RIO GSM är en produkt för M2M
applikationer. Den har flera
kommunikaitonsmöjligheter t.ex.
analog input, digital I/O, RS232/485
Därtil finns tillval såsom GSM modul
och bluetooth. Bredden av
kommunikationsmöjligheter gör RIO
användbar vid fjärrövervakning och
fjärrstyrning