www.mikrocontroller.net

Forum: Compiler & IDEs Timer Problem ..


Autor: macke_a (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!
Ich möchte gerne den Untenstehende Timer stoppen und bei Bedarf weiter 
laufen lassen. Leider finde ich keinen geeigneten Systemaufruf um eine 
saubere Lösung zu programmieren. Ich hoffe irgendjemand kann mir weiter 
helfen!

void handler()
{...}

struct itimerval myTime;
myTime.it_value.tv_sec = 1;
myTime.it_value.tv_usec = 0;

myTime.it_interval.tv_sec = 1;
myTime.it_interval.tv_usec = 0;

signal(SIGALRM, (void(*)(int)) handler);
setitimer(ITIMER_REAL, &myTime, NULL);

Der Timer löst jede Sekunde aus und ruft den handler auf.
Nun möchte ich gerne den Timer stoppen und bei Bedarf wieder aufrufen, 
sodass er erneut die Sekunden weiter zählt und den handler aufruft.

Danke vorab für Eure Antworten!!

mfg macke_a

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tante Manual sagt mir:

 Timers decrement from it_value to zero, generate a signal, and reset
 to it_interval.  A timer which is set to zero (it_value is zero or
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 the timer expires and it_interval is zero) stops.
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Autor: macke_a (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aha...
wo lebt denn Dein Tante "Manual" ?

Autor: macke_a (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok ! Danke noch mal für die Info!
Allerdings muß ich sagen, das mir die Lösung nicht so ganz gefällt.

Es gibt doch bestimmt eine Möglichkeit, den Timer individuell zum 
Beispiel mit einem Flag zu löschen und anschließend wieder zu setzen.

Vielleicht hat jemand von Euch noch eine weiter Idee.??

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
man setitimer

Autor: macke_a (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok..jetzt habe ich es auch gefunden...
Nun brauche ich noch eine andere Lösung, wie ich am "saubersten" meinen 
Timer unterbrechen kann.
Ich habe schon sämtliche Variation durch und mein Timer läuft immer noch 
im Sekundentakt, es sei denn ich setzte ihn gleich auf 0.

Freue mich auf kreative Antworten!!

Mfg macke_a

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Erzähl dochmal, wovon Du überhaupt sprichst.

Du zählst da irgendwelche Funktionen und Variablen auf, mit denen keiner 
was anfangen kann.

Da muß doch irgendein Quelltext dazugehören, in den man reingucken kann.

Vermutlich ist das irgendein RTOS für irgendeine CPU.

Beides endlich mal anzugeben (Link, Typ) könnte viel helfen.


Peter

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich verstehe schon was er meint, allerdings habe ich keine Lösung für 
Ihn.

Er will den Timer einfach stoppen, um eine bestimmte Anweisung wie den 
handler zu unterbrechen!

Angenommen der handler macht jede Sekunde eine Ausgabe.

Nun jetzt soll er aufgrund eines Ergeignisses gestoppt werden, sodaß der 
handler nicht mehr im Sekundentakt aufgerufen wird.
Sobald das Ereigniss wieder zurückgesetzt wird, soll der handler wieder 
aktiviert werden.

So hätte ich das jetzt interpretiert!


Michael

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dazu gibt's doch die Funktion sigprocmask. Alternativ im Signalhandler 
einfach ein simples:
if (gestoppt)
  return;

  

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.