Hey Leute, ich habe einen LPC3250 Controller von embedded artists und möchte diesen Controller gerne in Java programmieren. Wie kann ich in Java einen I/O-Port abfragen? Prinzipiell müsste man ja abfragen können ob das zugehörige Register gesetzt ist?! Oder ist das nicht ohne weiteres möglich? Danke für eure Antworten Andi
Java selbst erlaubt keine direkten Zugriff auf die Hardware. Du brauchst eine Library (typischerweise in C), über deren Prozeduren/Funktionen Du auf die Hardware zugreifen kannst. Vermutlich enthält Deine Java Laufzeitumgebung (als der Teil, der sich in der Firmware des Controllers befindet) bereits eine oder mehrere Libraries für den Zugriff auf die Hardware.
Dann brauch ich also einen Art InputReader aus dem Package java.io oder? Aber dann muss ich ja auch noch eine Information über diesen I/O-Port geben, also welcher das ist. Ich habe leider auf dem Mikrocontroller gebiet nicht soviel Ahnung. Grüße.
Andreas S. schrieb: > Dann brauch ich also einen Art InputReader aus dem Package java.io oder? Nein du benötigst die zu diesem Board hofentlich mitgelieferte RuntimeUmgebung welche einen entsprechende Schnittstell bereistellt (z.B. JNI). Ist das Baord überhaupt für das Programmieren mit Java ausgelegt?
Läubi .. schrieb: > Ist das Baord überhaupt für das Programmieren mit Java ausgelegt? Ja, auf dem Board läuft embedded Linux und hat somit auch eine Runtime Umgebung. Ich habe allerdings keine Ahnung wie ich die Schnittstellen nützen kann. Alternativ habe ich mir überlegt ein kleines C-Programm zu schreiben das den Port ausliest und dann diese Information an mein Java Programm übergibt. Allerdings weis ich hier auch nicht wie ich ein Java Programm mit einen C Programm verknüpfen kann.
Ich würde ein Kernel-modul schreiben, welches mir über einen proc-entry die nötige Funktionalität zur Verfügung stellt. Den proc-entry kann man dann einfach lesen und schreiben, als wäre er eine Datei. Gruß Oliver
Andreas S. schrieb: > Ja, auf dem Board läuft embedded Linux und hat somit > auch eine Runtime Umgebung. Ich meinte eher Ob es dafür ein "Java binding" oder so etwas gibt. Im einfachstem Falle gibt es doch für die I/Os auch einfach entsprechende /dev/balblabla Sachen welche man in Java einfach als Datei öffnen kann. Andreas S. schrieb: > Allerdings weis ich hier auch nicht wie ich ein Java > Programm mit einen C Programm verknüpfen kann. Dafür gibt es JNI: http://docs.oracle.com/javase/6/docs/technotes/guides/jni/ Imprinzip ist das nicht viel mehr als eine Javadatei welche einige Methoden als "native" markeirt hat, dann wird mit dem JNI Compiler daraus eine c und h Datei mit Definitionen erzeugt welche mal als dll/so übersetzt. Also kein Hexenwerk, du benötigst aber eine C-Buildumgebung für dein Zielboard und natürlich dann in C Zugriffsmöglichkeiten auf die Ports.
Java kann häufig diese virtuellen /dev Device in der Regel nicht sauber ansprechen, sondern nur Dateien. Embedded Linux bedeutet noch lange nicht, dass Du die nötigen Java Libraries hast. Der Knackpunkt ist, dass Java Programme von einer virtuellen Maschine (man könnte sie auch "Intepreter" nennen) ausgeführt wird. Unter Windows ist das die java.exe. Vereinfacht gesagt, arbeitet die java.exe die Befehle aus, die im Java Programm (jar Datei oder *.class Dateien) stehen. Alle mir bekannten virtuellen Java Maschinen kennen Files, Console, Grafische Bildschirmausgaben und TCP/IP. Mehr nicht. Alles Weitere ist hardwarespezifisch und muss durch die Laufzeitumgebung bereitgestellt werden. Die Laufzeitumgebung besteht typischerweise auf einem Satz Java Libraries, welche wiederum C Libraries aufrufen, welche über Kernel Module, Gerätetreiber oder direktem Hardwarezugriff mit der Hardware kommunizieren. Ein typischer Fall ist der serielle Port. Dafür nutzt man bei PC's die RxTxComm Library, eben weil Java keine seriellen Ports kennt und dementsprechend keine Befehle für diese Ports bereit stellt. Ähnlich ist es mit deinen I/O Pins. Java kennt keine Befehle für den Zugriff auf I/O Pins, C aber schon. Also schreibt man sich eine C-Library, mit Funktionen zum Zugriff auf den Port. Dazu schreibt man sich eine Java Library, welche die C Library aufruft. Die Schnittstelle zwischen C und Java heisst JNI. Die Java Version für Windows, Linux, MAC, ... enthält einige solcher JNI Libraries, sonst könnten Java Programme gar keine Windows Funktionen Funktionen nutzen - sie hätten keine I/O Schnittstellen, also weder Tastatur, noch Bildschirm, noch Netzwerk. Java besteht also auf einer virtuellen Maschine, plus einer Laufzeitmgebung (die mitgelieferten Libraries). Die Laufzeitumgebung ist abhängig vom Betriebssystem. Manche Computer haben gar kein Betriebssystem, aber dennoch Java (zum Beispiel Lego Mindstorms mit Lejos). In diesem Fall enthalten die C Libraries ALLE Funktionen zum Zugriff auf die Hardware, Kernel Module und Gerätetreiber entfallen.
Stefan schrieb: > Java kann häufig diese virtuellen /dev Device in der Regel > nicht sauber ansprechen, sondern nur Dateien. Dafür hast du bestimmt konkrete Beispiele... Stefan schrieb: > Java kennt keine Befehle für den > Zugriff auf I/O Pins, C aber schon. Dann zeig mir mal die I/O Pin Spezifikation im C Standard... C "kennt" genausowenig die I/O Ports, du benötigst da im einfachstem Falle ein Headerfile vom Hersteller und passende "Aufrufkonventionen" im einfachstem Falle werden die Bits direkt in eine Speicheradresse geschrieben (z.B. AVR). Stefan schrieb: > eben weil Java keine seriellen Ports kennt Hängt wie gesagt von der Runntime ab.
Vielen Dank für die Tipps. Ich habs jetzt schonmal hinbekommen ein HelloWorld Programm zu schreiben wobei ich eine C Funktion in eine Java Klasse eingebunden habe. Im nächsten Schritt versuch ichs jetzt mit dem I/O Pin. Grüße
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.