mikrocontroller.net

Forum: PC-Programmierung Java und Parallel-Port Antwortzeiten


Autor: Michael d. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin,

kennt sich hier jemand mit Java und Parallel-Ports unter WinNT/2k aus?

An die Hardware kommt man ja über JNI und DLLs ran.

Aber: ich habe hier eine Anwendung, bei der auf eine Veränderung am
Parallelport (beim einlesen, da hängen Sensoren dran) innerhalb von
50ms ein Ereignis ausgelöst werden muss. Kann das funktionieren?

Mir ist schon klar, dass Java keine Echtzeitkriterien erfüllen kann
(Windows ja auch nicht) aber 50ms sollten doch machbar sein?
Oder gibt es mit der Garbage-Collection zwangsweise Probleme?

Viele Grüße,
Michael

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

wie du schon selber bemerkt hast: Windows ist kein RT OS. Es besteht
also durchaus die Möglichkeit das deinem Java Programm (bzw. der Java
VM) für mehr als 50ms der Prozessor entzogen wird. 50ms würde ich sogar
für nicht sehr unwahrscheinlich halten.

Matthias

Autor: Michael d. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie sieht es im Vergleich Java - Visual C aus?

Liegen die Probleme am OS und sind von der Programmiersprache
unabhängig, oder schneidet Java (z.B. wegen VM und Garbage Collection)
schlechter ab als C?

Also unter DR-DOS klappt das mit dem 50ms, und DOS ist nun ja auch
nicht besonders RT geeingnet. Nun muss aber eine Windowsanwendung
her...

MfG,
Michale

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

DOS ist nicht RT geeignet? Wer erzählt den sowas. Unter DOS gehört dir
der Prozessor ganz alleine. Antwortzeiten im Bereich einiger µs sollten
unter DOS überhaupt kein Problem sein.

Unter Windows kann dir der Scheduler aber einfach so den Prozessor
entziehen. Du kannst zwar die Priorität deines Prozesses hochdrehen
aber ob das soweit geht das man die 50ms garantieren kann weiß ich
leider nicht. Multi-Processing und Echtzeit beißen sich halt. Ohne
speziell dafür optimierten Scheduler kann man Antwortzeiten nicht
garantieren.

C/C++ dürfte sich etwas besser eignen da da nicht noch eine Schicht
zwischen Prozessor und Anwendung liegt.

Matthias

Autor: Noyas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schreibt doch bitte nicht solch ein Blech, Michael, schau dir bitte mal
das javax.comm package an, gibt's bei java.sun.com, damit kannst du
Inputstreams auslesen, schau's dir einfach mal an...

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

wer hat den bezweifelt das es nicht geht eine Par/Ser. Port mit Java
auszulesen. Es garantiert nur niemand 50ms Antwortzeit.

Matthias

Autor: Hans (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
tjo so richtig garantieren lann das kein os... es sei denn es ist ein
rtos das time slicing macht ;)

unter win sollten eigentlich 50ms bei recht hoher thread priorität
eigentlich drinnen sein... hängt aber von der prozessorlast ab...

73 de oe6jwf / hans

Autor: Noyas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hey,
war je net so bös gemeint. Schaut euch mal die "jnpout32.dll" an
(google). Hab damit nen Mini-Weihnachtsbaum über den LPT-Port zum
Leutchen gebracht, basiert letzendlich auf JNI (sry, javax.comm is net
geeignet gewesen) bzw. der WinAPI.
Und 50ms sind da gar kein Thema...

Gruß

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Leute, Hallo Namensvetter

50ms sind mit Windows (95) eigentlich schon machbar, jedenfalls kann
man damit Servos steuern. Die wollen alle 20ms für ein paar ms einen
Impuls... OK, unter Windows ruckelts ein bisschen, aber es geht - und
zwar sogar im interpretierten QBasic-Modus - OK, ist nicht ganz
Java...

Gruss

Michael

Autor: thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dass es mit Win95 klappt ist gut möglich da Win95 auch auf MS-DOS
basiert bzw. dies als Grundlage benutzt.
Bei den neueren Windows Versionen 2000 & XP kann es klappen, muss es
aber nicht unbedingt.

Autor: Roman (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also, ich beutze die JAVA communications API zum Zugriff auf
Schnittstellen, und kann die auch empfehlen. Nun aber was neues:
System.currenttimemillis() liefert die Zeit (nach meinen Experimenten)
mit einer Auflösung von etwa 10ms, Thread.sleep [garantiert] dir eine
feinere Auflösung. Man sollte halt nur das JAVA-Programm am laufen
haben und nicht nebenbei 10000 Stellen von PI berechnen...

Autor: Rufus T. Firefly (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die 10 ms von Roman sind die übliche Schedulergranularität der
ernstgemeinten Windows-Versionen. Die kann übrigens mit einer der
"multimedia-Timer"-Funktionen* auf 1 ms herabgesetzt werden - es
entzieht sich allerdings gänzlich meiner Kenntnis, wie man das aus
einer Java-Anwendung heraus macht.


*) timeBeginPeriod, deklariert in mmsystem.h

Autor: T.Stütz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es ist vielleicht sinnvoller den zeitkritischen Zugriff in einen
(Kernel-)Treiber zu packen.
Achtung nur für Fortgeschrittene Programmierer, nicht für ungeübte
geeignet. Dort sind dann sehr schnelle Antwortzeiten möglich.

Gruss

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.