Toon posts:

[Java] compiler vraagje

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hey,

Ik ben voor school bezig met het modificeren van een compiler zodat java gedraaid kan worden op een platform met een ARM processor en een linux distro.

Ik gebruik hiervoor GCJ. Opzich niets mis mee, alleen ik moet nu gaan communiceren met de RS232 poorten. En met windows kan je wel de Comm API installeren, maar deze werkt niet echt met de GCJ.

Weet iemand toevallig een mogelijkheid?

Maar wat ik eigenlijk wilde weten was:
Jcreator zet een .java bestand om naar .class, dus byte code
Nu kan de gcj ook byte code omzetten naar native code, wat dus moet gebeuren.
Staat alle nodige info al in de byte code of moet ik alsnog een library hebben waar alle java code in staat?

Dus heb ik voor het compileren van Java byte code (.class) een library voor gcj nodig?

Alvast bedankt!

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

mbt de bytecode: je bent in principe niet de orginele java source nodig. Bytecode kan in principe weer gedecompileerd worden naar javasource... de bytecode is ook nauwelijks geoptimaliseerd (dat is namelijk taak van de Just In Time Compiler)

Verwijderd

Topicstarter
Alarmnummer schreef op dinsdag 01 februari 2005 @ 20:11:
mbt de bytecode: je bent in principe niet de orginele java source nodig. Bytecode kan in principe weer gedecompileerd worden naar javasource... de bytecode is ook nauwelijks geoptimaliseerd (dat is namelijk taak van de Just In Time Compiler)
Wat ik hier dus uit gebrijp moet ik dus de library van Java zelf wel hebben. En is dus byte code niet te compileren naar native zonder de SDK of bij de gcj de Libgcj!

toevoeging:

Dus inweze kan je java niet cross compilen als je de Comm API nodig heb. Deze werkt alleen met behulp van de SDK. De GCJ werkt niet met de SDK, dus kan ook niet werken met de Comm API.

Heb ik dat correct?

[ Voor 18% gewijzigd door Verwijderd op 01-02-2005 20:29 ]


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Verwijderd schreef op dinsdag 01 februari 2005 @ 20:17:
[...]

Wat ik hier dus uit gebrijp moet ik dus de library van Java zelf wel hebben.
Wat bedoel je met 'de library'
En is dus byte code niet te compileren naar native zonder de SDK
Ik snap niet hoe je dit hier uit opmaakt.


Javabytecode is gecompileerde java. Maar in tegenstelling tot veel andere compilers is de bytecode bijna een 1 op 1 afspiegeling van je sourcecode. Dat heb ik gezegt..


Ik zou trouwens gewoon kijken naar j2me.. Ben je meteen klaar...

[ Voor 8% gewijzigd door Alarmnummer op 01-02-2005 20:30 ]


Verwijderd

Topicstarter
Alarmnummer schreef op dinsdag 01 februari 2005 @ 20:29:
[...]

Wat bedoel je met 'de library'


[...]

Ik snap niet hoe je dit hier uit opmaakt.


Javabytecode is gecompileerde java. Maar in tegenstelling tot veel andere compilers is de bytecode bijna een 1 op 1 afspiegeling van je sourcecode. Dat heb ik gezegt..


Ik zou trouwens gewoon kijken naar j2me.. Ben je meteen klaar...
Dus als ik van die bytecode een native programma wil maken, moet ik dus wel de SDK hebben?
En als library zie ik dus de SDK

En ik zal even naar j2me kijken.

  • Macros
  • Registratie: Februari 2000
  • Laatst online: 30-04 09:28

Macros

I'm watching...

Om verbinding te maken met RS232 poorten kan je geen windows library gebruiken. Daarvoor zal je een c lib moeten gebruiken dat je kan compilen voor ARM. Daar kan je java dan mee laten communiceren mbv. JINI (dat is de Java - C koppeling als ik me goed kan herinneren). Dat zou moeten werken als je een jvm gebruikt of het naar native compiled met gcj.

"Beauty is the ultimate defence against complexity." David Gelernter


  • Robtimus
  • Registratie: November 2002
  • Laatst online: 11:55

Robtimus

me Robtimus no like you

Macros schreef op dinsdag 01 februari 2005 @ 20:33:
Om verbinding te maken met RS232 poorten kan je geen windows library gebruiken. Daarvoor zal je een c lib moeten gebruiken dat je kan compilen voor ARM. Daar kan je java dan mee laten communiceren mbv. JINI (dat is de Java - C koppeling als ik me goed kan herinneren). Dat zou moeten werken als je een jvm gebruikt of het naar native compiled met gcj.
Ik zou ipv JNI (niet JINI ;) Het is Java Native Interface) eerder kijken naar CNI: Compiled Native Interface. Zie http://gcc.gnu.org/onlinedocs/gcc-3.4.3/gcj/ voor meer info.

Heb ik zelf ervaring mee, werkt goed. Stappen:
- maak een Java class met native methods, en compile deze
- haal gcjh over die class files heen en creeer een C++ header file
- implementeer die methods in C++
- compile de Java code naar objecten (.o; gcj -c File.java -o File.o)
- compile de C++ code naar objecten (.o; g++ -c File2.cpp -o File2.o)
- link de bestanden (gcj --main=<MAIN CLASS> -o executable *.o)

More than meets the eye
There is no I in TEAM... but there is ME
system specs


Verwijderd

Topicstarter
Thanks, ik ga even knutselen met die CNI :)

  • Macros
  • Registratie: Februari 2000
  • Laatst online: 30-04 09:28

Macros

I'm watching...

Ik deed het uit me hoofd en zat er toch dicht bij met de afkorting vind ik zelf ;) Computers en hun miljarden acroniemen... ;)

"Beauty is the ultimate defence against complexity." David Gelernter


  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 09-04 22:08
Waarom moet een compiler iets met een COM poort? Volgens mij zit je daarmee al op het verkeerde spoort.

javac: compileert java source naar byte codes.
gcj: compileert byte codes naar ARM assembly/executables
kleine extra app: zet ARM assembly over van build systeem (PC) naar target

Overigens denk ik dat de libraryvraag wel logisch is: Waar haal je bijvoorbeeld String vandaan? Heb je daar byte codes voor in de SDK die je compileert? Misschien. GUI? Vrijwel zeker niet, dat is waarschijnlijk overal native geimplementeerd. Je zult toch op een of andere manier direct naar de Framebuffer moeten, of je moet X voor ARM hebben. Geen van beide is aan te sturen vanuit byte codes.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


Verwijderd

Topicstarter
de opdracht is als volgt:

Maak een toepassing die gebruikt van een ARM-platform.
GCC is er al, alleen nu moet GCJ nog werken.

Op het platform zijn er alleen rs232 poorten naar buiten, dus om een sensor aan te sluiten heb ik die poorten dus nodig.

En het enige wat ik gebruik is:
- tekst op het scherm weergeven (menu functie)
- invoer van toetsenbord
- verzenden naar RS232
- ontvangen van RS232

De eerste 3 zijn totaal geen probleem, dat is zo standaard eigenlijk, alleen de RS232 moet dus met JNI / CNI gebeuren. En dus eigenlijk met C++.

En ik heb gister een heel tijd naar JNI / CNI gekeken, maar voor een elektrotechniek student is het mij net iets te veel algebra :P Maar ik ga er vandaag weer mee verder.

Het is voor een advies rapport, en het wordt steeds meer een C++ verhaal ... :P
Pagina: 1