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!
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;});
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.
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!
Danke für eure Hilfe!
Dann kann ich ja doch, soweit ich das gesehen habe, einige Daten im Stack bzw. SRAM ablegen!
Danke nochmals! :-)
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.