mikrocontroller.net

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


Autor: Jens S. (jenss)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Jens S. (jenss)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Bernhard __ (Firma: dl1bg) (bernhard_)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: TheMason (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jens S. (jenss)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: TheMason (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: gerhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.