Forum: Mikrocontroller und Digitale Elektronik Speicher im Flash oder im RAM??


von Gast (Gast)


Lesenswert?

Hallo,

habe eine Anfänger Frage an euch!!

wann wird Speicher im RAM verbraucht und wann im Flash??

Z.B.:
int a; sind das 2 Bytes im Flash??

oder
int a = 10;???


Gruß

von holger (Gast)


Lesenswert?

Schöne Frage !

Jetzt weiss natürlich JEDER welchen uC du meinst.

Stell die Frage doch einfach noch einmal.
Mit mehr Informationen.

von Gast (Gast)


Lesenswert?

Ich habe gedacht, dass das unbahängig vom uc ist???

Pic18F
C18

von holger (Gast)


Lesenswert?

>Ich habe gedacht, dass das unbahängig vom uc ist???

Ist es aber nicht. Ein int ist auf einem ARM7 32 Bit.

von Gast (Gast)


Lesenswert?

das ist schon klar, die Anzahl von Bytes war nicht so wichtig bei der 
Frage!!

von Klaus Falser (Gast)


Lesenswert?

Die Variable a liegt im Normalfall im RAM, das kann man schon sagen.
Variable die ein Compiler oder Linker ins FLASH oder ins ROM geben soll, 
müssen in ein eigenes Segment oder mittels eines Modifiers 
gekennzeichnet werden.
Diese Variablen können aber dann nicht einfach durch Zuweisung
a = 5;
geändert werden, so intelligent ist der Compiler nicht.
Es muß eine spezielle Funktion zum Schreiben des Flash aufgerufen 
werden.

von ARM-Fan (Gast)


Lesenswert?

Dein int a = 10 wird die Variable a im RAM anlegen.
Der Initialisierungswert 10 landet allerdings im Flash.
Somit verbrauchst du je 2 Byte im RAM und im Flash.

von Gast (Gast)


Lesenswert?

vielen Dank, das war was ich wissen wollte.

von holger (Gast)


Lesenswert?

Ich versuche das mal einfach zu erklären.

>int a; sind das 2 Bytes im Flash??

Nein das sind zwei Bytes im RAM.

>int a = 10;???

Das sind zwei Bytes im RAM und zwei Bytes im Flash.

Warum ? Ein einfaches int a; bedeutet für den Compiler
eine Variable a mit Startwert 0. Das macht er im Startupcode.
Er löscht alle Variablen denen kein Wert zugeordnet wird einfach
mit dem Wert 0.

>int a = 10;???

Hier geht das nicht mehr. Der Wert 10 muss im Flash liegen
damit a der Wert 10 zugewiesen werden kann. Woher sollte
der Wert 10 sonst kommen ?

Ganz so einfach ist es aber dann doch nicht !
Wenn mehrere Variablen den Wert 10 haben kann der
Compiler das zusammenfassen indem nur einmal der
Wert 10 im Flash gespeichert wird.

Ich hoffe das war verständlich.

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
Noch kein Account? Hier anmelden.