mikrocontroller.net

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


Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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ß

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schöne Frage !

Jetzt weiss natürlich JEDER welchen uC du meinst.

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

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe gedacht, dass das unbahängig vom uc ist???

Pic18F
C18

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Ich habe gedacht, dass das unbahängig vom uc ist???

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

Autor: Gast (Gast)
Datum:

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

Autor: Klaus Falser (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: ARM-Fan (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
vielen Dank, das war was ich wissen wollte.

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.