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ß
Schöne Frage ! Jetzt weiss natürlich JEDER welchen uC du meinst. Stell die Frage doch einfach noch einmal. Mit mehr Informationen.
>Ich habe gedacht, dass das unbahängig vom uc ist???
Ist es aber nicht. Ein int ist auf einem ARM7 32 Bit.
das ist schon klar, die Anzahl von Bytes war nicht so wichtig bei der Frage!!
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.