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
** 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?
oder z.B. so: (modulo und divisionen sind ziemlich teuer) if ( A == event_n3) { event_n3 += 3; ... } if ( A == event_n7) { event_n7 += 7; ... }
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.)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.