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
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.
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?
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.
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
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!
>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.
>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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.