Forum: Compiler & IDEs Bitte um Aufklärung RAM / FLASH


von Pier S. (bigpier)


Lesenswert?

Hallo ,
ich bräuchte mal Eure Hilfe da ich ein Verständnis Problem habe !
(mit Sicherheit eine sehr Dumme Frage !)
Also wie oder wann soll man Daten ins Flash packen ???
Welche Vorteile / Nachteile bringt dies mit ???
Könnte Mir jemand dazu ein klares beispiel zeigen ???

Endschuldigung für meine Dumme Frage

Gruß
Pier

von Niklas F. (n8fever)


Lesenswert?

http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Programmspeicher_.28Flash.29

Flash speicher lässt sich Flashen, aber nicht dynamisch beschreiben, 
also zur Laufzeit.
Flash speicher hast du in der Regel viel.

von Ulrich aus W (Gast)


Lesenswert?

>Endschuldigung für meine Dumme Frage

Es gibt keine dummen Fragen,
es gibt nur Dumme die nicht fragen.

von Günter R. (galileo14)


Lesenswert?

Niklas hat es schon richtig gesagt.

Im Flash steht i.d.R. das Programm; wenn man aber zusätzlich noch 
Tabellen oder Texte hat, kann man diese auch ins Flash schreiben lassen. 
Vorteil: sie sind, wie das Programm, immer da und werden beim Flashen 
mit dem Programm ins Flash gebracht (beim Programmieren des System mit 
dem Flasher). Nachteil: diese Daten sind zunächst mal unveränderlich 
(das kann aber auch ein Vorteil sein, je nach Anwendung).

Alternative: diese Daten ins EEPROM schreiben (z.B. bei AVR-Controller). 
Vorteil: diese Daten kann man vom Programm aus ändern; Nachteil: 
eigentlich keiner.

von Johannes M. (johnny-m)


Lesenswert?

Bei AVRs gilt:
Flash: nichtflüchtiger Speicher, Daten bleiben nach Abschalten des 
Controllers erhalten, nicht ohne weiteres aus dem Programm heraus 
beschreibbar (Ausnahme: Bootloader)
-> Daten, die beim Programmieren schon feststehen und während des 
Programmablaufs nicht geändert werden (Textstrings für Display-Ausgabe, 
Konstanten...)

RAM: flüchtiger Speicher, Daten sind nach dem Abschalten weg
-> Daten, die während des Programmablaufs erzeugt und verarbeitet 
werden.

EEPROM: nichtflüchtiger Speicher, der vom Programm aus geschrieben 
werden kann, Daten bleiben nach Abschalten erhalten, i.a. begrenzte 
Anzahl Lösch-Schreibzyklen, Schreibzugriff relativ langsam
-> Daten, die nur selten geändert werden (z.B. Parameter)

Immer dran denken: Initialisierungswerte und Konstanten, die im RAM 
angelegt werden, stehen immer zusätzlich noch mal im Flash 
(Programmspeicher) und werden von dort aus bei Programmstart ins RAM 
geladen. Deshalb ist es i.d.R. sinnfrei, z.B. vorgegebene Texte für eine 
Ausgabe auf einem Display im RAM anzulegen. Die kann man, wenn sie 
gebraucht werden, auch direkt aus dem Flash laden. RAM ist i.d.R. 
relativ kostbar und sollte mit Bedacht genutzt werden.

von Pier S. (bigpier)


Lesenswert?

Vielen Dank für Eure Erklärung !!
Werden Variablen die mit static Deklariert werden bei Start trotzdem ins 
Ram geholt oder werden diese nur dann geladen wenn sie auch gebraucht 
werden ??

Allen ein schönes Wochenende

Danke

Gruss Pier

von Johannes M. (johnny-m)


Lesenswert?

Pier S. wrote:
> Werden Variablen die mit static Deklariert werden bei Start trotzdem ins
> Ram geholt oder werden diese nur dann geladen wenn sie auch gebraucht
> werden ??
Eine static -Variable ist im Prinzip nichts anderes als eine 
gewöhnliche globale Variable, mit dem Unterschied, dass sie nicht global 
sichtbar ist. Dementsprechend wird sie bei Programmstart angelegt und 
initialisiert (Wenn nichts anderes angegeben, mit 0). Wenn sie mit einem 
Initialisierungswert ungleich 0 vorbelegt ist, dann wird dieser 
selbstverständlich auch bei Programmstart aus dem Flash geholt.

von Rolf Magnus (Gast)


Lesenswert?

Hier geht anscheinend mal wieder jeder ganz selbstverständlich vom AVR 
aus. Es sei angemerkt, daß es noch andere Prozessor-Architekturen gibt, 
bei denen es anders ist.
So gilt auch folgendes speziell für AVR:

> Wenn sie mit einem Initialisierungswert ungleich 0 vorbelegt ist, dann
> wird dieser selbstverständlich auch bei Programmstart aus dem Flash
> geholt.

Um das noch etwas klarer zu sagen: Sie wird beim Programmstart aus dem 
Flash ins RAM kopiert und danach als normale RAM-Variable behandelt.

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.