Kommen sich zwei Timer in die Quere?

#808837
Lesenswert?

Henrik wrote:
> Hi,
> wenn zwei Timer parallel laufen (natürlich verschieden schnell), können
> die sich in die Quere kommen?
> Eigentlich schaltet der Mega (in meinem Fall Mega32) doch das Interrupt
> Enable Bit ab, wenn er eine ISR betritt, oder?

Wenn wir mal Design Fehler auf dem Chip ignorieren, sehe ich
eigentlich keine Möglichkeit, wie sich 2 Timer in die Quere
kommen können.
Ja, das IE-Bit wird während der Ausführung einer ISR
abgeschaltet und mit dem reti in der ISR wieder eingeschaltet.
Solange man also nicht selbst an diesem Bit in einer ISR
rumspielt, ist es nicht möglich, daß eine ISR von einer
anderen ISR unterbrochen wird.
Gast #808954
Lesenswert?

Sehr merkwürdig.

Ich hatte Dutzende "Abstürze" (Resets, oder Sprünge zur Adresse 0). 
Nachdem ich nun einen Timer abgeschaltet habe, scheint es zu laufen.
Jedenfalls hat es 4x ~15 Minuten OHNE Reset überlebt, während es vorher 
geschätzt zwischen 30 sek und 5 Min gedauert hat, bis ein Reset kam.

Erklären kann ich es nicht, was da schiefläuft. Ich weiß auch noch 
nicht, ob es nun wirklich geht; paar Mal klappte es ja.
#808963
Lesenswert?

Henrik wrote:
> Sehr merkwürdig.
>
> Ich hatte Dutzende "Abstürze" (Resets, oder Sprünge zur Adresse 0).
> Nachdem ich nun einen Timer abgeschaltet habe, scheint es zu laufen.
> Jedenfalls hat es 4x ~15 Minuten OHNE Reset überlebt, während es vorher
> geschätzt zwischen 30 sek und 5 Min gedauert hat, bis ein Reset kam.
>
> Erklären kann ich es nicht, was da schiefläuft. Ich weiß auch noch
> nicht, ob es nun wirklich geht; paar Mal klappte es ja.

Ich tippe mal auf einen Programmfehler.
Gast #808970
Lesenswert?

Vielleicht weil Du keine Interruptserviceroutine definiert hast. Oder 
einen illegallen Speicherzugriff machtst. Oder der Stack überläuft. Oder 
einen Pointer nicht initialisiert hast...
Gast #808974
Lesenswert?

Die beiden Timer ISRs hab ich; Stack hat noch 700 Byte frei :)
Pointer sind an dieser Stelle keine.

Das Merlwürdige ist halt: es läuft eine Zeit normal, bis es dann 
abschmiert. Und zwar nicht reproduzierbar. Manchmal nach 30 s, manchmal 
nach 5 Minuten, wie es grade will ...
#808975
Lesenswert?

Henrik wrote:
> Die beiden Timer ISRs hab ich; Stack hat noch 700 Byte frei :)
> Pointer sind an dieser Stelle keine.
>
> Das Merlwürdige ist halt: es läuft eine Zeit normal, bis es dann
> abschmiert. Und zwar nicht reproduzierbar. Manchmal nach 30 s, manchmal
> nach 5 Minuten, wie es grade will ...

Könnte natürlich auch eine schmutzige Spannungsversorgung sein
oder ein Wackelkontakt.

Ich tippe aber weiterhin auf einen Fehler im Programm :-)
Gast #809379
Lesenswert?

Nö, wollen wir nicht. Aber Du kannst den Code ja soweit reduzieren, bis 
der Fehler gerade noch so auftritt.
Und wenn Du den Fehler bis dahin nicht sebst gefunden hast, postest Du 
den Rest hier.
Und dann schauen wir mal ;-)

Gruss
Andy
#809489
Lesenswert?

Henrik wrote:
> Ihr wollt 2000 Zeilen Code lesen? Nun dann...

Bei der Codegröße bin ich mir zu 99.9% sicher, dass der Fehler
im Programm liegt.

Hilft alles nichts:
Entweder mit jemand anderem einen Code-Review durchführen
oder abspecken, abspecken, abspecken. Das Programm auf
das absolute Minimum reduzieren und und dann sukzessive
Codeteile wieder einbauen, bis der Fehler wieder auftritt.
Und dann hoffen, dass sich das Problem im zuletzt zugefügten
Baustein zeigt.

Du bist nicht der Einzige, der 'große' (*) Projekt debuggen muss.


(*) 2000 Zeilen sind für einen Desktop Rechner noch nicht wirklich
groß. Auf einem AVR hast du natürlich ohne JTAG nicht wirklich
dieselben Debug-Möglichkeiten. Also muss man sich behelfen.
Aber die Strategie: Ich schreibe fehlerfreien Code, also muss
der Fehler irgendwo entweder im Compiler oder in der Hardware
sein funktioniert in der Praxis nicht. In praktisch allen Fällen
ist es irgendein Fehler im Code. Das muss auch keinem peinlich
sein, jeder von uns hat schon die dümmsten Fehler gemacht und
stunden/tagelang danach gesucht. Heisse Kandidaten sind immer
irgendwelche Array-Overflows und da ganz speziell immer wieder
String-Verarbeitung.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren