Gast
#412235
Hallo. Ich schreibe zur Zeit an einem guten Stück Software für meinen ATMega128, der ja bekanntlich 4kb Ram hat. Ich brauche 3 mal einen 512-Byte-Buffer und habe noch einige globale Variablen. AVR-Studio mit ggc-Plugin sagt: Program: 42284 bytes (32.3% Full) (.text + .data + .bootloader) Data: 1943 bytes (47.4% Full) (.data + .bss + .noinit) Threoretisch müsste ich ja jetzt noch ungefähr die Hälfte des Rams frei haben. Wenn ich mir ein paar Adressen von globalen Variablen ausgeben lasse, liegen die alle so bei ~1600. Lokale Variablen z.B. ein paar 64-Byte Arrays liegen bei ~4300. Die Prozedurverschachtelung ist nicht sehr hoch, weshalb ich ausschließen kann, dass der Stack mit Rücksprungaddressen vollgemüllt ist. Aber mir stellt sich die Frage: mit was dann? Wie sieht es z.B. mit Strings aus? Werden die in den Ram geladen, wenn das Programm startet? Als weiteres ist mir aufgefallen, dass sich die Funktionalität meines Programms verbessert, wenn ich die globalen Variablen als extern deklariere. Warum? Gibt es eigentlich eine Möglichkeit lokale Variablen (und Arrays) vor dem return zu vernichten (also sofort nachdem ich die Variable nicht mehr brauche)? Oder müsste ich dann auf malloc und free zurückgreifen.... Ich vermute nämlich das dieses Vorgehen auch ein wenig helfen würde. Dann würden nicht alle kleinen Arrays noch leben, wenn ich schon in einer ganz anderen Unterprozedur gelandet bin und des Datenbereich eh nicht mehr brauche... Auf geschwindigkeits kommts bei mir nicht wirklich an. Falls sonst noch jemand Tips hat, wie man den Speicher leerer bekommt - ich bin für alles offen. MFG