Forum: PC-Programmierung Ausgabe über LPT-Port


von knecke (Gast)


Angehängte Dateien:

Lesenswert?

Moins,
also ich habe mich in den letzten tagen etwas mit der ansteuerung des
Druckerprots beschäftigt. Also ein paar leds hängen auch dran und
blinken fleißig. Álles läuft eigendlich aber da währe noch was.
Das Programm was ich geschrieben habe läuft über eine gewisse zeit also
es hört nicht auf zu "arbeiten". Ist halt ein lauflicht.
So jetzt zum Problem und zwar solange das prog läuft hängt der rechner.

Was kann ich dagegen tun???
Ich habe mal was über thread programmierung (ich hoffe richtig
geschrieben) gelesen. Kann man das damit realiesieren?? Oder ist das
was anderes?

Prog im anhang!

von Hans (Gast)


Lesenswert?

nun eine kleine frage bidde...

windows ? wenn ja 9x oder nt bzw ähnliche (nt,2k,xp)
dos ?
linux ?

unter windows würd ich die mfc reincompilieren und dann mit
AfxBeginThread den thread starten...

da du aber gesagt hast der computer hängt... nehm ich stark an du
arbeitest unter dos...richtig ???

dort bräuchtest eine multithreading erweiterung...da gibts so
task-switcher (oder context switcher) die schon jahrelang eingesetzt
werden... hin und wieder... einfach mal googlen ;)

sonnst wär da noch die möglichkeit den rtc-interrupt zu überschreiben
und dort das lauflicht reinzutun...unter dos möglich...

73 de oe6jwf

von hebel23 (Gast)


Lesenswert?

Hi Knecke,

ein Thread würde sich hier schon anbieten, da Du das Programm sonst
auch nicht durch irgendeinen Tastendruck o.ä. unterbrechen kannst. Wenn
Du im Thread dann an irgendeiner Stelle ein Sleep(1) einbaust, kann der
Scheduler des Betriebssystems dann auch die anderen Threads hin und
wieder ranlassen, so dass der Rechner nicht hängt und auf Eingaben
reagieren kann.

Gruß Andreas

von knecke (Gast)


Lesenswert?

Das BS ist windows 95, ich hab das programm unter xp getestet.
unter xp hängt es nicht mehr so stark (sorry für diese beschreibung).

Ich muss alerdings noch sagen ich benutze den Borland C++ 3.1
compiler.
Also beim start erhalte ich nur ein Fenster mit den Cout text.
Ist das dann ein Windows programm oder nicht, hat das damit überhaupt
was zu tun??

Also die sache ist die ich will später die schaltung etwas erweitern
zum einlesen von daten. dazu müsste ich die eingänge ständig abrufen.
So wie es jetzt aussieht würde das heißen das das programm alles andere
blockiert.

Deswegen bräuchte ich ein "Programm" (Thread??) was mir die daten im
hintergrund also ohne den rechner voll auszulasen ausliest.

danke für die antwort
knecke

von knecke (Gast)


Lesenswert?

Kann mir noch jemand sagen wo ich im Internet nachlesen kann wie man so
ein thread programmiert.

Oder gibt es da "gut" Bücher die sowas beinhalten.
ich kenne mich in C nur ein wenig aus.
Ich sach mal "Hallo ich bin ein C-Programm" und ein bisschen mehr.

mfg knecke

von Hans (Gast)


Lesenswert?

das probelm ist das du einen win32 compiler brauchst... weil das borland
teil ist meines erachtens schon recht alt...

lad dir einfach von der borland seite den aktuellen runter... zumindest
gabs mal die command line-tools gratis...

oder hol dir irgendwo her das visual-studio von microsoft..aber bitte
das 6er...das 5er is nicht so konfortabel und das 7bener...naja... .net
halt ;P

wenn du doch lieber ohne mfc herumbastelst... halt den von
borland...die api-funktion heisst CreateThread ... beschreibung z.b
unter msdn.microsoft.com ;)

viel spass & 55 de oe6jwf

von knecke (Gast)


Lesenswert?

Danke erstmal für die antworten.
Ich werde mich dann mal ein bisschen einarbeiten.

MFG knecke

von AndreasH (Gast)


Lesenswert?

Ich glaube nicht, daß Dein Problem mit der Thread-Programmierung gelöst
wird.
Du benutzt den alten Borland-Compiler. Dabei mußt Du mit outp auf den
Port zugreifen.
Unter Windows 95/98/NT.... sollte dies mit WriteFile erfolgen. Ob das
allerdings auch für den parallelen geht weiss ich nicht. Auf jeden Fall
läßt dadurch Windows die anderen Programme zum Zug kommen.
Versuch einfach mal in Deine Delay-Funktion
   ProcessMessages();
aufzurufen. Damit sagst Du Windows, daß die anderen Programme jetzt
dürfen.
Falls der Borland diese Funktion nicht kennt, besorg Dir einfach den
dev-c++ incl. Compiler (http://www.bloodshed.net/) und compilier dein
Programm neu. Dabei weiss ich definitiv, daß es geht.

Wenn Du dann immer noch die Thread-Programmierung brauchst, melde Dich
nochmal. Ich habe das für die serielle Schnittstelle schon gemacht.
Weiss aber im Moment nicht wo ich es habe.

Grüße
Andreas

von Stefan (Gast)


Lesenswert?

Hi, du willst später noch was über LTP einlesen?
Und erzeugst ein Lauflicht mit Warteschleifen?
Hab es zumindest mal so verstanden..

Wenn du einfach die Warteschleifen einige zyklen kürzer machst kannst
du deinen restlichen Programmcode da noch mit einbringen! Jedoch hat
der Rechner danach noch immer die selbe Prozessorlast wie bisher. Aber
ggf. stört es ja nicht wenn sonst nichts laufen muß!

Stefan

von RafiK (Gast)


Lesenswert?

<quote>
AndreasH
Wenn Du dann immer noch die Thread-Programmierung brauchst, melde Dich
nochmal. Ich habe das für die serielle Schnittstelle schon gemacht.
Weiss aber im Moment nicht wo ich es habe.
</quote>

Sowas müsste ich auch machen (bau einer kleinen wetterstation),
könntest du mir evtl. dies schicken, falls es noch vorhanden ist?
wäre froh über eine art "vorlage"

per mail an mich falls möglich wär ganz nett ;), ned das ein fremder
thread missbraucht wird ;)

vielen dank
rafiK

von AndreasH (Gast)


Lesenswert?

email ist unterwegs

von nobody0 (Gast)


Lesenswert?

Man kann dafür auch Posix-Threads nehmen.

von Matthias (Gast)


Lesenswert?

Also ich habe mal ein bißchen mit server programierung rumgespielt. also
ich ahbe damals unter windows threads gebraucht, sonst hing der server
immer bis wieder nen Net Paket reinkam. Ich in dem Fall ja nicht
anders, bei dir kommt nur nen LPT, Paket. Also ich würde das Programm
in drei Threads unterteilen, Einer zum senden, einer zum empfangen und
einen Hauptthread der die steuerung und verarbeitung macht. Die
kommunikation zwischen thred funktioniert über buffer.

Zb. der hauptthread schreibt nen byte in den Buffer (Sende thread) und
der sendthread erkennt das, und schickt es raus.

Für die ganze realiesierung kann ich SDL empfehlen.
http://www.libsdl.org/index.php. Es ist recht einfach zu implementieren
und gibt der gute Werkzeuge an die Hand, mit denen du auch System
unabhängig bist, es ist fast egal ob du unter WIn / linux ...
enwickelst.

Aber ich kann dir sagen das thread progrmaierung schon etwas
aufwendiger werden kann ;)

mfg Matthes

von RafiK (Gast)


Lesenswert?

Vielen Dank für all die Infos... werde mir mal alles in Ruhe
anschauen...

von nobody0 (Gast)


Lesenswert?

Man kann auch eine Iterruptserviceroutine schreiben, denn der
Parallelport hat ja einen Interrupt.

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
Noch kein Account? Hier anmelden.