
Håller på med ett AVR-program nu (I AVRStudio5 som använder sig av GCC). och får följande meddelande när jag kompilerar:
om jag förstår saken rätt så lagras de globala variablerna i fasta minnesadresser, men lokala variabler uppstår och försvinner när funktioner anropas. Jag undrar om det gäller även lokala arrayer (t.ex. en sträng)... Dessa kan ju ta hur mycket utrymme som helst, och man kan ju hamna låååångt över tillåten gräns om man inte ser upp.AVR Memory Usage
----------------
Device: atmega644
Program: 30910 bytes (47.2% Full)
(.text + .data + .bootloader)
Data: 2177 bytes (53.1% Full)
(.data + .bss + .noinit)
EEPROM: 277 bytes (13.5% Full)
(.eeprom)
Hamnar alla lokala variabler på stacken?
Det är väl i så fall knappast möjligt för kompilatorn att räkna ut hur mycket minne som eventuellt kan gå åt då?
Finns det något sätt för mig att veta att jag inte går för långt i minnesanvändningen?
Behöver jag förstöra data i vissa fall för att frigöra minne?
vad betyder .data .bss och .noinit ???
-----------------------------------------------------------------------------------------
EDIT: läste lite här...
Och som jag misstänkte så är det bara de globala variablerna som finns med i "Data".
Tänk om jag lägger alla stora arrayer i main() istället för globalt - då kommer dessa alltså inte att synas!
Och jag tror att jag har massor av utrymme kvar! Hur sjutton kan man vara säker på det?
Måste jag räkna ut för hand hur mycket plats alla lokala variabler kommer att ta, eller finns det något sätt att få reda på det? (Fast optimeringen gör ju också att en variabel kanske hinner försvinna innan nästa skapas vilket då sparar minne... så det blir kanske ändå en gissning. Men man kan väl i alla fall räkna ut hur mycket SRAM en funktion kan utnyttja maximalt?
Så länge man inte programmerar rekursivt kan man då gå igenom alla nivåer (det blir ju ett herrans jobb!).