AVR Reset

Gast #107919
Hallo zusammen!

Ich hab ein größeres Programm geschrieben und gerade festgestellt, dass
es manchmal während des Programmablaufs sich selbst in den Reset
schickt.

Das Programm wäre zum posten etwas zu umfangreich.

Mich würde nur interessieren, welche Möglichkeiten ihr seht, einen
Controller (ATmega8515) per Software zu reseten. Also in welchen Ecken
ich den Fehler suchen muss.

Programmiersprache ist ARV Embedded Workbench.

Danke!
Grüße
Steffen
Gast
stack overflow
heapüberschreiber
returns aus nem interrupt
unter umständen div durch 0

das fällt mir auf die schnelle dazu ein...

73 de oe6jwf /hans
Gast
Hallo Andy,

ich verwende keinen Watchdog.

Hier meine verwendeten Peripherien:
- Timer0 Overflow -> Interrupt
- Timer1 Output Compare -> OCA1 Toggle
- USART
- I2C (als Software)

Kann das irgendwie mit dem Stack zusammenhängen? Ich habe ihn auf 0x80
Bytes und Return adress stack auf 24 levels gestellt.

Es ist mir sonst unerklärlich, wie er wieder an den Anfang springt und
in der ersten Schleife wieder hängenbleibt (gewollt)..

Grüße
Steffen
Gast
Hallo Hans:

stack overflow
 -> möglich - siehe oberen Beitrag
heapüberschreiber
 -> ich verwende keine dynamische Speicherreservierung

returns aus nem interrupt
 -> hm - kann man da in C nen Fehler machen?

unter umständen div durch 0
 -> darauf werd ich das Programm mal checken.

Das Resetsignal ist zum Zeitpunkt des Resets einwandfrei (gerade mit
dem Oszi überprüft).

Grüße
Steffen
Gast
Hi

wieso soll ne Division durch 0 auf dem AVR zu einem Reset führen? Der
Controller hat ja schon gar keine Möglichkeit zur hardwaremäßigen
Division die evtl. einen Interrupt auslösen könnte. Und ich kann mir
nicht vorstellen das ein Compilerbauer da was selber zusammenbastelt.
Wenn doch -> RTFM.

Neben den von meinen Vorschreibern genannten Möglichkeiten: Könnte es
evtl. ein Hardwareproblem sein?


Matthias
Gast
Hallo!

Ich verwende keine Division. Das habe ich gerade nochmals sicher
gestellt.

Ein Hardwareproblem kann ich sicher ausschließen - die Resetleitung
liegt auch während des Resets sicher auf 5V.

Was ist mit dem Stack? Kann ich den so wählen, wie ich oben geschrieben
habe?

Grüße
Steffen
Gast
Ist es möglich, dass der Controller Resetet, wenn man auf einen nicht
vorhandenen Array zugreift?

Sollte zwar nicht der Fall sein, aber wäre evtl. möglich.

Bsp:

int test[100];

n = 102;
test[n] = 0x12;

Grüße
Steffen
Gast
Hi

Das kann durchaus passieren wenn du durch den schreibenden Zugriff im
Stack herummanipulierst. Sowas nennt sich dann Buffer Overflow.

Matthias
Gast
Hallo!

test[102] = 0x12 würde 0x12 an die 102. Speicherstelle nach dem Beginn
des array schreiben... also Startadresse + 202 bytes (int = 2 byte).
Was sich dort aber tatsächlich befindet (das array hast du ja nur mit
100 definiert) weiß wohl niemand... kann also durchaus zu nem Fehler
führen.

mfg
Gast
hallo Steffen,

sieh mal in den Assembler-Quelltext:
in meiner Interrupttabelle waren die Interruptaufrufe mit "rjmp"
versehen. Wenn das Programm zu groß wird, wird die Inttable zwar
angesprungen aber der intvector wird nicht erreicht (+-2K relative
Sprungweite). Den FastAVR-"Compiler", den ich in jedem dritten
Posting so hoch lobe, kümmerts sich z.B. nicht darum, wie gros mein
Programm wird und ob da die RJMP's in der Tabelle noch reichen... Ich
habe da zu fuß "JMP" reingetan, und dann ging alles wieder. Bei mir
trat der effekt bei Zeichenemfang auf der UART auf.
Gruß
Axel

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 22 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.