www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik µC Reset durch Stack?


Autor: J.J. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Ich habe ein Programm geschrieben und immer wieder r16 auf den Stack 
geschrieben, -> jedoch vergessen es wieder aus dem Stack zu holen.
Nach einer gewissen Zeit hat der Microkontroller immer automatisch einen 
Reset ausgeführt. Nun habe ich das geändert und es läuft.

=> Führt der Microkontroller einen Reset aus, wenn der Stack 
vollgeschrieben wurde?

MFG J.J.

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> => Führt der Microkontroller einen Reset aus, wenn der Stack
> vollgeschrieben wurde?

Nein. Sicher dass es ein Reset ist? Oder ist es nur ein Sprung nach 
Adresse 0?

Kann man per MCUCSR rausfinden. Beim Start auslesen, löschen und dann 
anzeigen.

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn ein Unterprogramm per ret oder reti eine Rücksprungadresse vom 
Stack holt und da (bedingt durch die pusherei ohne entsprechendes 
poppen) entweder eine Null steht oder eine Adresse von ungültigem Code 
("leerer" Speicher), dann fängt das Programm wieder von vorne an, was 
aber nicht mit einem Reset gleichzusetzen ist.

Autor: J.J. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für eure Antworten!

An sowas habe ich garnicht gedacht -> dachte sofort an RESET!

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
J.J. wrote:

> => Führt der Microkontroller einen Reset aus, wenn der Stack
> vollgeschrieben wurde?

Nein.

Der Stackpointer wird irgendwann den SRAM verlassen und im IO-Bereich 
landen.

Und da der IO-Bereich nicht vollständig belegt ist, könnten nicht 
definierte IO-Register als 0x00 gelesen werden.

Laut Datenbblatt ist der Zugriff auf nicht vorhandene Register aber 
undefiniert.


Peter


P.S.:
Mit Erstaunen habe ich festgestellt, daß neuere AVRs endlich vom 8051 
gelernt haben und schon beim Reset den Stackpointer auf eine gültige 
Adresse setzen.
Die alten AVRs wollten ja nach nem Reset immmer auf Adresse 0xFFFF 
pushen.

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>P.S.:
>Mit Erstaunen habe ich festgestellt, daß neuere AVRs endlich vom 8051
>gelernt haben und schon beim Reset den Stackpointer auf eine gültige
>Adresse setzen.
>Die alten AVRs wollten ja nach nem Reset immmer auf Adresse 0xFFFF
>pushen

Bei welchen AVR trifft dass denn zu?

Ich hab hier das neueste Datenblatt (08-2007) von einem mega8 und da 
kann ich nichts dergleichen erkennen.

S. 13:
Stackpointer:  initial value 0x00
muss auf einen Wert >0x60 gesetzt werden, bevor eine Subroutine 
aufgerufen wird (so sinngemäß übersetzt)

Oder hab ich das falsch verstanden?

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Mega8 ist ja auch mittlerweile ein Uralt-AVR! Unter "neuen" AVRs, 
bei denen der SP automatisch auf das RAMEND zeigt, versteht man die 
Typen, die in den letzten sagen wir mal zwei Jahren auf den Markt 
gekommen sind.

EDIT:
Schau Dir z.B. mal die neuen ATMega48/88/168 oder ATTiny45 an. Bei denen 
ist das z.B. so.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gast wrote:
>>P.S.:
>>Mit Erstaunen habe ich festgestellt, daß neuere AVRs endlich vom 8051
>>gelernt haben und schon beim Reset den Stackpointer auf eine gültige
>>Adresse setzen.
>>Die alten AVRs wollten ja nach nem Reset immmer auf Adresse 0xFFFF
>>pushen
>
> Bei welchen AVR trifft dass denn zu?

Z.B. Mega88, Tiny25 usw.


Peter

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Schau Dir z.B. mal die neuen ATMega48/88/168 oder ATTiny45 an. Bei denen
>ist das z.B. so.

Danke für den Tip.
Da die mega8 immer das hatten, was ich bei meinen Sachen brauchte, hab 
ich mich in letzter Zeit gar nicht mehr damit beschäftigt, was Atmel so 
neues rausgeworfen hat.
Werd ich wohl sofort nachholen.

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.