Mikrokontroller voll? Compiler Settings

Gast #1919430
Lesenswert?

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
Angehängte Dateien:
#1919445
Lesenswert?

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.
Gast #1921987
Lesenswert?

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?
#1922015
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren