Forum: Mikrocontroller und Digitale Elektronik Grundlagen Frage AT91SAM7X Flash und RAM


von Jens S. (jenss)


Lesenswert?

Hallo zusammen,

ich habe noch einmal eine Grundlagen Frage:
Wie Funktioniert das mit Flash und RAM Programmierung? :D

Normal werden doch Programme in den RAM gespeichert damit sie schnell 
laufen und größere Tabellen oder Arrays in den Flash (einfach mit const 
oder?)

Was bringt es nun eignetlich ein Programm ganz in den Flash zu 
schreiben? Das macht das doch nur unnötig langsam oder?

Programme im RAM werden doch auch nach dem Neustart ausgeführt oder?

Irgendwie versteh ich noch nicht den Sinn des Unterschiedes zwischen 
Programmen im RAM und im Flash.

Vielleicht kann mir jemand mal etwas dazu erzaehlen.

Vielen Dank und Gruß
Jens

von Andreas K. (a-k)


Lesenswert?

Jens S. wrote:

> Irgendwie versteh ich noch nicht den Sinn des Unterschiedes zwischen
> Programmen im RAM und im Flash.

RAM-Inhalt ist nach Stromausfall weg. RAM benötigt bei gleicher 
Kapazität auf dem Chip viel mehr Platz als ROM.

von Jens S. (jenss)


Lesenswert?

hmmm ich sehe gerade
ein EEPROM hat der Controller dann garnicht?

Aber das Programm was ich doch in den SRAM geschrieben habe ist nach dem 
täglichem neuen Start also Spannung ab und wieder dran auch noch da....

zumindest Programmiere ich nicht bewusst mein Programm in den Flash 
speicher.


Wie kann ich denn Daten bei dem SAM7X Netzausfallsicher speichern? Also 
einzelne Variablen eventuell in den Flashspeicher schreiben? Muss ich 
die nur irgendwie deklarieren oder brauch ich da noch extra Funktionen?

Kennt sich damit jemand aus?

von Bernhard _. (Firma: dl1bg) (bernhard_)


Lesenswert?

Im Normalfall schreibst du dein Programm immer in's Flash und der 
Startup Code copiert sie in's RAM, bevor in die main()-Schleife 
gesprungen wird.

von TheMason (Gast)


Lesenswert?

dazu mal von meiner seite zwei fragen ...

wenn ich funktionen ins ram kopiert haben möchte muß ich dem gcc ja 
mitteilen das diese funktion im ram zu stehen hat (bzw. der startup code 
mir diese ins ram kopiert). reicht es vor meiner funktion ein attribut 
(ähnlich dem irq bzw. fiq) zu setzen oder muß dazu noch zusätzlich in 
der memory map etwas definiert werden ?
ist es möglich funktionen zur laufzeit ins ram zu kopieren 
(vorrausgesetzt diese sind vollkommen relokatibel compiliert) um 
dynamisch bestimmte programmteile schneller laufen zu lassen ?

gruß
rene

von Jens S. (jenss)


Lesenswert?

ja es gibt doch das Attribut __ramfunc welche Funktionen ins RAM 
kompiert.

Also im Normallfall schreibe ich mein Programm ins Flash und dann wird 
beim Start ALLES ins SRAM kopiert.

Anders gäb es noch die Methode das mein Programm ins Flash gespeichert 
wird und auch von dort ausgeführt wird und nur einzelne Funktionen die 
vorher mit dem Attribut deklariert wurden wirklich im RAM gespeichert 
werden???

Stimmt das? Alles sehr verwirrend :D

Nun bleibt immer noch die Frage: Wieso macht man sowas?

Und wie kann ich Variablen Netzausfallsicher speichern? Soll ich für die 
Frage mal ein neuen Thread starten oder meint ihr hier sieht das noch 
jemand? :D

Ich hoffe es kann mir noch wer helfen!

von TheMason (Gast)


Lesenswert?

>Und wie kann ich Variablen Netzausfallsicher speichern?

man kann so vorgehen :

brownout-detekor (unterspannungs-erkennung) stößt eine interrupt routine 
an die sich im das speichern der wichtigsten variablen kümmert.
im falle des arms bleibt da wohl nur der flash-speicher übrig. bei 
anderen uCs bietet sich (falls vorhanden) das eeprom ab.
dann kann auch direkt festgehalten werden das eben ein brown-out 
aufgetreten ist und beim nächsten start kann man enstprechend reagieren.
ob ein brownout-detektor eingebaut ist und ob dieser einen int auslösen 
kann muß man im datenblatt lesen.

>Wieso macht man sowas?

geschwindigkeit !

das ram ist bedeutend schneller als flash-speicher (ich tippe mal in die 
luft faktor 2-4).
bei zeitkritischen oder rechenintensiven anwendungen kann das durchaus 
sinn machen bzw. unumgänglich sein.

von gerhard (Gast)


Lesenswert?

>Wieso macht man sowas?
ein weiterer grund: um auf das flash schreiben zu können muß der 
programmcode der schreib-funktion im ram stehen (gilt zumindest für alle 
at91sam mit single plane flash).

gruss
gerhard

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.