Forum: Compiler & IDEs period. ereignisse aus free running counter ?


von Stefan Sczekalla (Gast)


Lesenswert?

Hi,

ich habe eine Timerinterrupt der nach ablauf einer bestimmten Zeit eine
Variable "A" erhöht ( ergibt einen free-Running counter ) der sich all
x millisekunden erhöht.

Aus "A" wuerde ich mir gerne einige periodische Ereignisse ableiten.

ich suche jetzt ne idee das eleganter zu machen als:

if ( "A" == n ) { ... }

im Besonderen, da ein Ereignis nicht nicht nur bei n sondern auch bei
2n, 4n, 6n eintreten soll, ein anderes Ereigniss bei m, 3m, 6m, 9m etc
...

Vieleicht hat ja jemand eine idee hierzu.

Grüße,

Stefan

von Rufus T. Firefly (Gast)


Lesenswert?

switch (a % modn)

von Rufus T. Firefly (Gast)


Lesenswert?

** GRR!

Nochmal von vorne:

Angenommen, Dein "A" wäre ein Int-Wert, dann känntest Du das so
erledigen:

  if (!((a / n) % 2))
    Ereignis_n;

  if (!((a / m) % 3))
    Ereignis_m;

Ereignis_n wird aufgerufen für a = 0, a = 2n, a = 4n etc.

Ereignis_m wird aufgerufen für a = 0, a = 3m, a = 6m etc.

Wär' das was?

von Werner Hoch (Gast)


Lesenswert?

oder z.B. so: (modulo und divisionen sind ziemlich teuer)

if ( A == event_n3) {
  event_n3 += 3;
  ...
}

if ( A == event_n7) {
  event_n7 += 7;
  ...
}

von Jörg Wunsch (Gast)


Lesenswert?

Oder auch one-shot timers:

http://www.sax.de/~joerg/avr-timer/

(Hatten wir schon mal diskutiert.  Peter Danneger hat auch noch eine
Variante davon vorgestellt.)

von Stefan Sczekalla (Gast)


Lesenswert?

Hi,

Erst mal vielen Dank für Eure Antworten.

Die Idee von Werner ist das was ich mir als "Gotcha" ;-) aus meiner
Frag erhoft habe.

An die Modulo Rechnerei hatte ich auch schon lose gedacht, hab mich
aber nicht wirklich dran gewagt, das so zu machen wegen des
befürchteten code/rechen/Zeitaufwandes ( die division ).

Die One-Shot Timer Bibliothek ist auch interessant,
mit Werners Vorschlag komme ich aber , da er hinreichend für mein
Problem ist mit deutlich weniger Code weg.

Grüße,

     Stefan

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.