Der WD wird alle 8sec ausgelöst, funktioniert also grundsätzlich.
Jetzt soll der WD aber nur dann auslösen, wenn sich das Hauptprogramm
wegen eines Fehlers aufgehängt hat. Deswegen soll der WD-counter bei
jedem Sekundendurchlauf im Hauptprogramm zurückgesetzt werden.
Mit >wdt_reset();< funktioniert das nicht. Was mache ich falsch?
grundschüler schrieb:> wenn du da noch einen Fehler findest,> bist du wirklich gut - jedenfalls danke für das Interesse.
Meister!!
Ich habe wenig Interesse deine Fehler zu finden, wenn du dich so
sperrst....
Auch wenig Spass an der Salami Taktik.
Die Aussage timer_proc_10ms(); wird in einer ISR aufgerufen hätte fast
gereicht.....
Schön wäre es noch zu sehen, wie du timer_smh definiert hast.....
(aber das ist wohl erst die nächste Salamischeibe)
§1:
timer_smh muss volatile deklariert werden.
§2:
Das Bearbeiten von timer_smh im Hauptprogramm muss ATOMIC erfolgen.
> das ist langbewährte software,
Und auch diese muss man richtig verwenden...
Tipp:
Der Fehler findet sich immer an der Stelle, wo man zuletzt sucht.
Tipp2:
Es macht keinen Sinn, den Boten mit Verachtung zu überschütten.
Ulrich F. schrieb:> Tipp2:> Es macht keinen Sinn, den Boten mit Verachtung zu überschütten.
Das war keineswegs gewollt, ich bin für alle Hinweise dankbar, auch wenn
sie nicht direkt zielführend sind. Ich gehe davon aus, dass du besser
programmieren kannst als ich.
timer_smh ist volatile deklariert, da es außerhalb der ir im
Hauptprogramm bearbeitet wird
Der Timer funktioniert und ist nicht das Problem. Die Zeit wird am LCD
fortlaufend angezeigt.Die LED blinkt.
Die Frage bleibt, warum die Atmel-wdt_reset-Funktion den wdg-Timer nicht
ordnungsgemäß zurücksetzt und wie man das richtig handelt. WDG müsste
doch eigentlich Standard in vielen Programmen sein. Ich habe aber trotz
einigem Suchen keinen lauffähigen Beispielcode gefunden.
Vielleicht ist es ja unter gegangen.....
Darum nochmal:
Ulrich F. schrieb:> §2: Das Bearbeiten von timer_smh im Hauptprogramm muss ATOMIC erfolgen.
Denn das fehlt in deinem gepostetem Code.
grundschüler schrieb:> ich gehe davon aus, dass du besser> programmieren kannst als ich.
Da kannst du von ausgehen, wobei ich mir aber nicht sicher bin, ob das
stimmt....
KA!
grundschüler schrieb:> timer_smh ist volatile deklariert,
Ja, da ist sie ja die Salamischeibe....
Zumindest die halbe...
Der Datentype ist mir dadurch auch noch nicht bekannt....
Wie gesagt, wenn die zu bearbeitende Struktur mehr als 1 Byte
beinhaltet, oder mehrfach gelesen/geschrieben wird (und das wird sie bei
dir), ist die Angelegenheit ATOMIC zu machen.
Solange das nicht ATOMIC ist, hast du da einen Zufallsgenerator.
Und das wollen wir doch nicht.....
Ulrich F. schrieb:> Bei mir funktioniert es in der Arduino IDE!> (nach dem ich Timer0 frei geschaufelt habe)
danke für deine hilfe. ich hab es jetzt nocheinmal ohne timer aufgebaut.
Es funktioniert wie es soll. hätte ich nicht gedacht, dass der wdg von
anderen timern beeinflusst wird.
>hätte ich nicht gedacht, dass der wdg von>anderen timern beeinflusst wird.
Das wird er nicht. Du hast einfach nur Mist gebaut irgendwo
in deinem Programm.
holger schrieb:> Das wird er nicht. Du hast einfach nur Mist gebaut irgendwo> in deinem Programm.
Das sehe ich ähnlich.
Timer0 musste ich von dem Arduino - Ballast befreien, um deinen 10mSec
Timer betreiben zu können.
Bin halt nur so ein Arduino C++ Jünger.....
holger schrieb:> Das wird er nicht. Du hast einfach nur Mist gebaut irgendwo> in deinem Programm.
guter Hinweis. Fehler gesucht, Fehler gefunden, hatte absolut nichts mit
dem Timer zu tun.
Ulrich F. schrieb:> Das sehe ich ähnlich
Nochmals danke für die Unterstützung. Der Hinweis auf den
funktionierenden wdg beim arduino war hilfreich.