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


von J.J. (Gast)


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.

von Andreas K. (a-k)


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.

von Johannes M. (johnny-m)


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.

von J.J. (Gast)


Lesenswert?

Danke für eure Antworten!

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

von Peter D. (peda)


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.

von Gast (Gast)


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?

von Johannes M. (johnny-m)


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.

von Peter D. (peda)


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

von Gast (Gast)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.