Forum: Mikrocontroller und Digitale Elektronik Warum funktioniert das Programm ohne Stack?


von Michael D. (etzen_michi)


Angehängte Dateien:

Lesenswert?

Bin grad im Tutorial bei den LCD`s und frage mich warum das angehängte 
Programm ohne einen Stack funktioniert.

Zumindest sehe ich nirgends das ein Stack initialisiert wurde, er zeigt 
mir aber die richtige Zahl auf dem Display an.

Theoretisch müsste er doch spätestens beim zweiten durchlauf nurnoch 
Müll schreiben b.z.w. schon beim ersten ret Mist bauen.

von Oliver J. (skriptkiddy)


Lesenswert?

Michael Dierken schrieb:
> Theoretisch müsste er doch spätestens beim zweiten durchlauf nurnoch
> Müll schreiben b.z.w. schon beim ersten ret Mist bauen.
Ja tut er auch. Hab grad mal dein Programm laufen lassen. Nur wenn der 
Stackpointer initialisiert wird funktioniert es.

von Michael D. (etzen_michi)


Lesenswert?

Aber wie kommt es das er mir alles richtig auf dem Display angezeigt 
wird .. ist es möglich das der Stack nach einem Reset weiterhin 
initialisiert ist?


Edit: Läuft auch nach kurzem abschalten der Spannung (lasse das jetzt 
mal etwas länger abgeschaltet)

Edit2: Habe nun 10Minuten aus gehabt .. geht noch immer ... AVR 
gelöscht, neu beschrieben .. geht immernoch...

von Oliver J. (skriptkiddy)


Lesenswert?

Michael Dierken schrieb:
> Aber wie kommt es das er mir alles richtig auf dem Display angezeigt
> wird .. ist es möglich das der Stack nach einem Reset weiterhin
> initialisiert ist?

Ich habe dir ne Fehlinformation gegeben. Im Datenblatt steht, dass der 
Stackpointer beim Reset mit RAMEND initialisieret wird.

Den AVR-Simulator scheint das aber wenig zu kümmernn. Damit habe ich 
den Code getestet unter Zuhilfenahme von Hapsim.


Gruß Skriptkiddy

von Michael D. (etzen_michi)


Lesenswert?

Wenn ich dich richtig verstehe wird der Stack automatisch initialisiert 
.... Sprich ich brauch den nie Initilisieren???

von Oliver J. (skriptkiddy)


Lesenswert?

Michael Dierken schrieb:
> Sprich ich brauch den nie Initilisieren???

Beim tiny2313 trifft das zu. Beim Atmega8 nicht. Da wird der 
Stackpointer mit 0x0000 initalisiert. Im Datenblatt des jeweiligen 
Controllers stehen die Resetwerte drinnen.

Gruß Skriptkiddy

von Michael D. (etzen_michi)


Lesenswert?

Auch gut ... alles total lustig hier


Vielen Dank für deine Hilfe .. währe ich nie drauf gekommen.

von Oliver J. (skriptkiddy)


Lesenswert?

Michael Dierken schrieb:
> währe ich nie drauf gekommen.

Ein Blick ins Preliminary ist manchmal sehr aufschlussreich. ;)

Gruß Skriptkiddy

von Karl H. (kbuchegg)


Lesenswert?

Michael Dierken schrieb:
> Auch gut ... alles total lustig hier
>
>
> Vielen Dank für deine Hilfe .. währe ich nie drauf gekommen.

Was glaubst du, warum fast jede dritte Frage hier im Forum mit einem 
"Schau ins Datenblatt" beantwortet wird.

von Michael D. (etzen_michi)


Lesenswert?

Sagen wir so .. ich habe das so "gerlernt" das der Stack immer wenn call 
oder rcall verwendet werden soll initialisiert werden MUSS.

Ich hatte jetzt erstmal nach fehlern im Programm, initialisierung des 
Stack und sonstiges geguckt ... aber ins Datenblatt ... da währe massig 
Zeit vergangen .... werde ich mir merken einmal mehr ins Datenblatt zu 
schauen.

von Peter D. (peda)


Lesenswert?

Michael Dierken schrieb:
> aber ins Datenblatt ... da währe massig
> Zeit vergangen

Nö.
Ein Datenblatt ist kein Roman, den man komplett lesen muß.
Und es gibt eine Suchfunktion, ruckzuck ist man beim "Stack Pointer" und 
dessen "Initial Value".
Dauert schätzungsweise 5s zum Öffnen des PDF und nochmal 5s zum Suchen 
nach "Stack Pointer".


Peter

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.