Timer in C - Motorsteuerung

Hallo,
ich arbeite zur Zeit an einer Steuerung für einen Schrittmotor; programmiert in C (Borland C++ Builder).
Der Motor selbst läuft nur Timergesteuert, was auch im Einzelaufruf kein Problem darstellt, da keine andere Funktion (per „Knopfdruck“) aufgerufen werden kann, bis die Zielposition erreicht ist (Button deaktiviert).

Jetzt will ich eine Funktion erstellen, der man die Motorparameter übergibt, die den Motor wie bisher per Timer startet und aus der man erst zurückkehrt, wenn die Zielposition erreicht ist. Mein Problem dabei: Die Funktion wird beendet, bevor das Ziel erreicht ist. Der Motor fährt zwar auf die Zielpos., allerdings werden währenddessen evt. schon weitere Funktionen ausgeführt. Das würde ich gerne verhindern.

Ich habe schon mit TEvent (WaitFor) und Sleep experimentiert, allerdings läuft das ganze in einem Thread und der wird leider für die Zeit komplett angehalten. Hat jemand eine Idee, wie man diese Funktion realisieren kann? Meine Erfahrungen mit C sind leider begrenzt…

Hallo Fragewurm,

Jetzt will ich eine Funktion erstellen, der man die
Motorparameter übergibt, die den Motor wie bisher per Timer
startet und aus der man erst zurückkehrt, wenn die
Zielposition erreicht ist. Mein Problem dabei: Die Funktion
wird beendet, bevor das Ziel erreicht ist. Der Motor fährt
zwar auf die Zielpos., allerdings werden währenddessen evt.
schon weitere Funktionen ausgeführt. Das würde ich gerne
verhindern.

Du brauchst eine Semaphore:
http://de.wikipedia.org/wiki/Semaphor_%28Informatik%29

In deinem Fall sollte ein Flag genügen.

  1. Deine Funktion checkt als erstes das Flag, ist es gesetzt kehrt sie mit einer Fehlermeldung zurück oder wartet bis das Flag gelöscht wird.
  2. Ist das Flag gelöscht, wird es gesetzt und die Timerfunktion gestartet.
  3. Hat die Timerfunktion die Endposition erreicht, löscht sie das Flag.

MfG Peter(TOO)

Vielen Dank für die Antwort. Mal schauen, ob ich damit allein zurecht komme - falls nicht, drohe ich schon mal weitere Fragen an :wink: VIelen Dank!

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]