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?
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.
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?)
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
> 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).
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?
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.
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.