µC Reset durch Stack?

Gast #655030
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.
#655048
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.
#655063
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.
Gast #656919
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?
#656920
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.
#656925
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
Gast #656943
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

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