mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Kommen sich zwei Timer in die Quere?


Autor: Henrik (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Gruß
Henrik

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Mike R. (thesealion)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das einzige was passieren kann ist, das der Interrupt des Timers der zu 
spät kommt etwas verzögert ausgeführt wird.

Autor: Henrik (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Henrik (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nur wie kann der denn dann resetten?
Oder wieso kann er zur Adresse 0 zurückspringen...?

Autor: Matthias Kölling (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielleicht weil Du keine Interruptserviceroutine definiert hast. Oder 
einen illegallen Speicherzugriff machtst. Oder der Stack überläuft. Oder 
einen Pointer nicht initialisiert hast...

Autor: Henrik (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ...

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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 :-)

Autor: Henrik (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Spannung ist sauber. Die hatte zwar Spikes drauf, die sind aber weg.

Und Wackelkontakt halte ich für unwahrscheinlich; auch wenn man gar nix 
macht, stürzt es ab.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich frage mich, wie lange es noch dauert, bis er den Wink
mit dem Zaunpfahl versteht.

Fangen wir beim Naheliegensten an. Dazu tippe ich immer
noch auf einen Fehler im Programm.

Autor: Michael U. (amiga)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

nun nerv ihn doch mal nicht so, Karl Heinz, ist schließlich die neue 
Software der Ariadne, die kann er nicht so einfach rumzeigen...

Gruß aus Berlin
Michael

Autor: Henrik (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ihr wollt 2000 Zeilen Code lesen? Nun dann...

Autor: andy (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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

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.