Verwendung von SRAM, FLASH und EEPROM

Gast #139925
Hallo,

mal ´ne generelle Frage: Im SRAM werden also Variablen und vor allem
der Stack untergebracht, ohne das man was "besonderes" machen oder
beachten muß, macht der Compiler. Im FLASH wird das Programm selbst
gespeichert, ohne das man was "besonderes" machen oder beachten muß.
Im EEPORM werden z.B. Konstanten abgelegt.
Frage: Wenn ich bei "Haus- und Hofanwendungen" (wie z.B. einer
Temperaturregelung mit KTY, ADC) genug FLASH habe, kann ich dann nicht
alles da reinpacken? Oder gibt es irgendwelche guten Gründe, doch was
gezielt ins EEPROM oder FLASH zu schreiben, obwohl das ja etwas
aufwändiger ist?
Gast #139926
Meist ist der Flash bei Mikrocontrollern nicht so oft wiederbeschreibbar
wie der EEPROM, außerdem lässt sich der Flash nur Blockweise (z.B.
256Byte auf einmal) löschen (was vor einem überschreiben nötig ist).
Zuletzt unterstützen nicht alle Mikrocontroller das beschreiben des
Flash, während das Programm läuft.
Gast #139927
Dem zuletzt sei noch hinzugefügt, daß gerade beim AVR das Flash-ROM auch
noch aufgrund der Harvard-Architektur in einem ganz anderen Adressraum
liegt als RAM und EEPROM und damit nicht mit den gleichen Instruktionen
darauf zugegriffen werden kann wie auf RAM/EEPROM.

Dabei stellt sich am Rande folgende Frage:
Kann der AVR überhaupt Schreibzugriffe auf den ROM-Adressbereich
durchführen? (Mir ist klar, daß Flash-ROM so nicht beschrieben werden
kann, aber denkbar wäre ja der Betrieb mit externem Programmspeicher,
und der könnte ja mit einem RAM aufgebaut sein ... oder geht bereits
das beim AVR nicht?)
Gast #139928
Außerdem dauert EEPROM-Schreiben so etwa 4-8msec, während der SRAM in
zwei Zyklen geschrieben wird, also im 1-0.1usec-Bereich. Und ich möcht
meine Variablen für z.B. eine Motorregelung nicht wirklich in EEPROM
oder FLASH zwischenspeichern;-)

Sven
Gast #139929
> Kann der AVR überhaupt Schreibzugriffe auf den ROM-Adressbereich
> durchführen?
Ja. Die ATmegas haben Bootloader-Support. Das ist prinzipiell erstmal
nicht mehr als ein "reservierter" Speicherbereich ganz am Ende des
Flashspeichers.
Dieser Bereich kann von normalen Programmen völlig normal benutzt
werden und ist in keiner Weise besonders, außer in einer: Die
SPM-Anweisung (Store Program Memory) ist dort (und nur dort) erlaubt.
Damit kann man den Flash im laufenden Programm beschreiben.
Geht allerdings auch nur seitenweise (in der avr-libc-doku ist ein
Beispiel dafür).
Gast #139930
Also wie ich vermutet habe: Wenn irgend möglich immer ins "normale"
Programm schreiben, landet dann im FLASH? Beim Programmstart wird dann
das Benötigte automatisch ins SRAM geladen?
Gast #139931
So ungefähr. SRAM verliert seine Daten bei Spannungsabfall, somit muss
das Programm nach dem Start erst einmal die gewünschten Daten aus dem
Flash ins RAM kopieren. Wenn du in C programmierst übernimmt dies aber
meist der Compiler für dich.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 21 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.