Hi, ich nutze den Codevision Compiler und einen Atmega1280. Dieser besitzt 128kB Flash, 4kB EEPROM und 8 kB RAM Nun habe ich bereits ein umfangreiches Programm geschrieben und bekomme folgende Errormeldungen beim Compilieren: Wenn ich die Variablen innerhalb der Main deklariere: Error: D:\main.c(66): too many local variables declared inside this function Wenn ich die Variablen außerhalb der Main deklariere: Linker error: global RAM variables size: 5343 bytes is too large Ich habe meine Compiler Settings und die Info des letzten noch funktionsfähigen Programms mal angehängt. Welche Settings kann ich hier noch vornehmen, um den Speicher zu vergrößern? DANKE
Adam Ries kannte zwar noch keine Computer, aber das es etwas schwierig ist, deine 8KB RAM in 4-5KB für Stacks und 5-6KB für Daten aufzuteilen, das wäre auch ihm aufgefallen. Wobei 4KB (estimated usage) für den Data Stack etwas heftig ausfallen. Und daran drehst du nicht mit einer Option, sondern mit dem Programm.
Stefanie schrieb: > Welche Settings kann ich hier noch vornehmen, um den Speicher zu > vergrößern? Dem Ding geht der RAM aus. Häng nen externen RAM dran. Oder Programmierstil ändern :-) Oder nen fetteren µC hernehmen, wenn's wirklich so viel RAM braucht.
Du mußt feststellen, welche Variablen so groß sind und ob sie wirklich so groß sein müssen. Peter
Mal ein erster Tipp: Wenn du ein Display verwendest und Texte ausgibst sollten diese als Konstanten im Flash liegen. Oft werden diese als Variabel angelegt und brauchen dann doppelt Platz. hans
Danke für die Antworten, doch ich versteh es noch nicht ganz. Program size: 53540 Bytes = Flash (40,8%) also noch problemfrei Problematisch sind nur die 8192 Bytes internen RAM, davon reserviere ich 6144 Bytes für meine Variablen und den Stack und es werden aber nur (schätzungsweise) 4092 Bytes dafür gebrauchte. Hier muss ich auch noch die 995 Bytes für die Globalen RAM Variablen zählen und die 1053 für den Hardwarestack (wie kann ich diesen Wert beeinflussen?) -> Das macht zusammen genau 8192 Bytes. Der Compiler meldet mir, wenn ich meine DataStack Size zu klein einstelle, aber kann der Compiler schon sehen, dass während des Programmablaufs zu Fehlern aufgrund des vollen RAM-Speichers kommen kann? Kann ich irgendwo sehen, was bzw. wo ich genau soviel Speicher verbrauche?
Stefanie schrieb: > -> Das macht zusammen genau 8192 Bytes. Das kann ja nicht stimmen, sonst würde der Linker nicht meckern. 5343 bytes globale Variablen ist ein heftiger Brocken, wozu brauchst Du soviel? Variablen dienen dazu, sich Werte zu merken. Was man später nicht nochmal braucht, gehört nicht in globale Variablen. Peter
Stefanie schrieb: > Der Compiler meldet mir, wenn ich meine DataStack Size zu klein > einstelle, > aber kann der Compiler schon sehen, dass während des Programmablaufs zu > Fehlern aufgrund des vollen RAM-Speichers kommen kann? Nein. Denn wieviel Stack tatsächlich verbraucht wird, hängt davon ab, welche Wege der Programmfluss durch die Funktionen nimmt und welche Funktionen daher aufgerufen werden. Das aber hängt dann des öfteren auch wieder davon ab, welchen Input (Tastendrücken, ADC Wert etc.) dein Programm vorgesetzt bekommt. Von daher solltest du mit solchen Aussagen 'mein Compiler passt auf mich auf' sehr vorsichtig sein. Das einzige was Compiler/Linker mit Sicherheit richtig bestimmen können, ist der Verbrauch, der durch globale Variablen entsteht. Alles andere ist mit einem gewissen Fehlerpotential zu sehen.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.