PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Stack im AVR



Schulbankwärmer
12.10.2005, 09:58
Hallo Leute!
Wie tief ist der Stack, also wie viele z.B. Labeladressen kann ich da hineinpumpen, mit z.B. push?

Danke für Eure Hilfe!

PicNick
12.10.2005, 10:07
Eine normale return-addresse braucht zwei byte vom Stack. d.h. du kannst Stacksize/2 adressen reinpushen, theoretisch SRAM/2.
Da die Variablen-adressen von unten wachsen, der Stack aber von oben knabbert, werden sie sich gegenseitig überschreiben, wenn sie sich in der Mitte treffen.
D.h. irgendwie bleibt das in der realität immer eine Schätzung.

SprinterSB
12.10.2005, 10:43
In den avr-linkscripten wird das Symbol __heap_start definiert:

_end = . ;
PROVIDE (__heap_start = .) ;
Das kann man verwenden, um einen Laufzeit-Test auf den noch verbleibenden Platz zu zu machen.

unsigned char *first_free;
extern unsigned char __heap_start;
first_free = &__heap_start;
oder

unsigned char *first_free;
first_free = ({extern unsigned char __heap_start; &__heap_start;});

PicNick
12.10.2005, 10:52
Problem ist, die untersten Routinen sind meist irgendwelche library-fuzzies, denen das ziemlich egal ist, was frei ist und was nicht.
Heap mit ein paar verwuzelten "k" ist und bleibt eine inferiore Angelegenheit.

Florian
12.10.2005, 16:36
Hallo Schulbankwärmer!
Ich hatte damit auch früher immer Vorstellungsprobleme!
Auf der folgenden Seite kannst das alles gut nachlesen!
http://www.avr-asm-tutorial.net/avr_de/beginner/sram.html

Im Anhang findest Du noch ein Bild aus dem Datenblatt des Mega8, wo Du die genauen Adressen ablesen kannst.
Die Adressen 0x0060 bis 0x045F kannst Du frei als Speicher verwenden, also auch für den Stack!

Viel Erfolg damit!

13.10.2005, 11:23
Danke für eure Hilfe!
Dann kann ich ja doch, soweit ich das gesehen habe, einige Daten im Stack bzw. SRAM ablegen!

Danke nochmals! :-)