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
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.
>Endschuldigung für meine Dumme Frage
Es gibt keine dummen Fragen,
es gibt nur Dumme die nicht fragen.
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.
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.
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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.