Verständnisfrage zum Speicher

Gast #2596321
Lesenswert?

Hallo, ich habe eine kleine Verständnisfrage zu den verschiedenen 
Speichern im Mikrocontroller.

Wenn ich eine Variable während der Laufzeit berechnen lasse, liegt sie 
zu diesem Zeitpunkt ja im SRAM.
Was ist aber, wenn ich eine Variable mit einem festen Wert belege?
Wird diese in den SRAM geladen, damit mit ihr gearbeitet werden kann 
oder wird dabei auf den Flash zugegriffen?

Hintergrund:
Ich will mein späteres Programm möglichst Ressourcensparend 
programmieren. Dabei habe ich zb. einen Wert, mit dem etwas verglichen 
wird.
Ist es SRAM schonender, wenn ich den Festwert als Zahl benutze oder kann 
ich, um die Konfiguration nachher zu erleichtern, eine Variable dafür 
nehmen?

Und wie sieht es eigentlich mit der Benutzung von Arrays aus?
Brauchen sie mehr oder weniger Speicher als einzelne Variablen?

Gruß, Holger
#2596399
Lesenswert?

@  Holger (Gast)

>Wenn ich eine Variable während der Laufzeit berechnen lasse, liegt sie
>zu diesem Zeitpunkt ja im SRAM.

Ja.

>Was ist aber, wenn ich eine Variable mit einem festen Wert belege?

Liegt sie immer noch im SRAM.

>Ich will mein späteres Programm möglichst Ressourcensparend
>programmieren. Dabei habe ich zb. einen Wert, mit dem etwas verglichen
>wird.

Dafür gibt es feste Werte, die man sinnvoll mit #define darstellt.

1
#define MAXIMUM 100    // define kostet keinen Speicher
2
int meine_variable;      // variablen kosten echten Speicher
3

4
if (meine_variable > MAXIMUM) blub();

>Und wie sieht es eigentlich mit der Benutzung von Arrays aus?
>Brauchen sie mehr oder weniger Speicher als einzelne Variablen?

Was wohl? Mal in ein C-Buch geschaut? Was ist denn ein Array?

MFG
Falk
#2596409
Lesenswert?

>Wenn ich eine Variable während der Laufzeit berechnen lasse, liegt sie
>zu diesem Zeitpunkt ja im SRAM.
Ja

>Was ist aber, wenn ich eine Variable mit einem festen Wert belege?
>Wird diese in den SRAM geladen, damit mit ihr gearbeitet werden kann
>oder wird dabei auf den Flash zugegriffen?
JA, wenn Du keine speziellen Vorkehrungen triffst, wie z.B. das 
Attribute "PROGMEM" verwendest, werden ALLE Variabeln im RAM 
initialisiert oder in einem der CPU-Register. Selbst Variabeln die CONST 
sind. Lokale Vaiabeln auf dem Stack, Globale oder Static Variabeln im 
Heap.

>Ist es SRAM schonender, wenn ich den Festwert als Zahl benutze oder kann
>ich, um die Konfiguration nachher zu erleichtern, eine Variable dafür
>nehmen?
Ja, dann werden sie schon vom Compiler ausgewertet und fest in die 
ASM-Instruktionen eingebaut und belegen kein zusätzliches RAM

>Und wie sieht es eigentlich mit der Benutzung von Arrays aus?
>Brauchen sie mehr oder weniger Speicher als einzelne Variablen?
Nein, es wird immer exakt so viel Speicher belegt, wie die Variabeln 
benötigen
#2596419
Lesenswert?

Deine Frage lässt mich vermuten daß du Anfänger bist.
Mein Tipp, nicht so viel theoretisieren und schon vor den ersten Zeile 
Code Optimierungsüberlegungen anstellen, sondern
üben
lesen
üben
lesen
...

Und dann wenn es konkret knapp wird über Optimierungen nachdenken, nicht 
vorher!
Du bekommst für unbenutzten Speicher kein Geld zurück.
Gast #2601559
Lesenswert?

Sorry, dass ich mich jetzt erst melde und vielen Dank für eure 
Antworten!

Udo Schmitt schrieb:
> Deine Frage lässt mich vermuten daß du Anfänger bist.
> Mein Tipp, nicht so viel theoretisieren und schon vor den ersten Zeile
> Code Optimierungsüberlegungen anstellen, sondern
> üben
> lesen
> üben
> lesen
> ...
>
> Und dann wenn es konkret knapp wird über Optimierungen nachdenken, nicht
> vorher!
> Du bekommst für unbenutzten Speicher kein Geld zurück.

Ich bin zwar nicht der erfahrenste, gerade was C angeht, aber als 
blutigen Anfänger würde ich mich auch nicht sehen.
Das Problem ist, dass man in der Windowsprogrammierung (kleine Programme 
zum üben) nicht auf Teufel komm raus Ressourcen sparen muss und man sich 
daher nicht allzu viele Gedanken drum macht, was ein wenig sparsamer 
wäre. ;)

Mein Problem ist, dass ich ein Array zur Laufzeit berechne und dieses 
mit anderen festen Arrays vergleichen wollte.
Aber es bleibt mir wohl nichts anderes übrig, als jeden Wert einzeln mit 
einem Festwert zu vergleichen, oder?
(Es sind zu viele, als das sie als Array in den SRAM passen würden, 
daher mein Wunsch der Optimierung.)

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