Datum: 24.04.2008 16:34
Wer hat einen kurzen Tip wie ich eine Variable beim AT91SAM7 ins Flash netzausfallsicher schreiben kann. Lesen und ablegen im Code über __at (adresse) geht, aber schreiben muss man ja anders. Leider habe ich hier nicht gefunden wie das geht und im einzig guten Beitrag den ich gesehen habe http://www.mikrocontroller.net/articles/AVR-GCC-Tu... wird eine eeprom.h benutzt, die aber beim Keil nicht dabei ist. Wäre toll wenn jemand eine Antwort weiß!
Datum: 24.04.2008 19:12
Daten werden in der Regel im EEPROM abgelegt und nicht im Flash. Das hat verschiedene Gründe: 1. Die Schreib-Lese-Zyklen sind beim EEPROM in der Regel um den Faktor 10 höher. 2. Der EEPROM läßt sich byte-(word-)weise beschreiben, der Flash ist in Pages angeordnet. Also erstmal im Datenblatt nachsehen, ob der Controller internes EEPROM hat oder externes verwenden. Man kann natürlich auch eine EEPROM-Simulation inm Flash machen. Dazu muß man mindestens eine Page freihalten. Man braucht genau so viel RAM, um bei Änderungen erst den RAM-Spiegel upzudaten und dann die komplette Page wieder zu flashen. Gruß Matthias
Datum: 24.04.2008 20:02
Der µC hat kein EEPROM und ich muss auch nicht ständig Werte speichern. Es geht um einige Parameter, die in den ersten Tagen des Gerätes verändert werden und dann nahezu bis zum Defekt gleich bleiben ;). Lediglich ein Wert könnte ggf. bei jedem Netz aus gesichert werden, aber das ist nur 1-2 x am Tag und das Flash hat 100000 Zyklen - sollte gehen. Mit dem Hinweis kann ich schon mal weitersuchen. Dennoch ist es ggf. einfacher ein externes EEPROM zu nehmen. Hat da jemand schon mal was mit einem seriellen Typ gemacht. Ich möchte nicht zu viele I/Os opfern. Am Atmel soll ja auch eine SD oder MMC gehen. Wäre ja eigentlich das Optimale, denn dann könnte man die Parameter sogar extern ändern. Wäre schön noch weitere Hinweise zu bekommen!
Datum: 25.04.2008 10:22
@wolfgang: für deine zwecke ist das flash durchaus geeignet da du nur eine begrenzte anzahl von schreibzyklen vor hast. das schreiben in das flash erfolgt durch entsprechende routinen. im anhang ein beispielprogramm von atmel (für iar, sollte aber ohne probleme mit anderen compilern nutzbar sein). wichtig ist nur, daß deine schreib-funktion im ram (such mal nach _ramfunc) liegt da das flash nicht schreibfähig ist wenn gerade daraus gelesen wird. gruss gerhard
Datum: 25.04.2008 10:43
@gerhard: Danke für deine Hilfe. Ich probiere das gleich mal aus. _ramfunc kenne ich bereits, da ich auch die Interruptroutinen ins RAM gelegt habe damit es schneller geht. So langsam wird einem das Teil ein wenig vertrauter, aber aller Anfang ist schwer ;).
Antwort schreiben
Die Angabe einer Email-Adresse ist freiwillig. Wenn Sie automatisch per Email über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.
Wichtige Regeln - erst lesen, dann posten!
- Suchfunktion und Betreffsuche benutzen - vielleicht gibt es schon einen ähnlichen Beitrag
- Aussagekräftigen Betreff wählen
- Im Betreff angeben um welchen Controllertyp es geht (AVR, PIC, ...)
- Groß- und Kleinschreibung verwenden
- Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang
- JPEG-Dateien (.jpg) nur für Fotos und Scans verwenden
- Schaltpläne, Screenshots usw. als PNG oder GIF anhängen
Formatierung (mehr Informationen...)
- [c]C-Code[/c]
- [avrasm]AVR-Assembler-Code[/avrasm]
- [pre]vorformatierter Text (z.B. Code in anderen Sprachen)[/pre]
- [math]Formel in LaTeX-Syntax[/math]
- [[Titel]] - Link zu Artikel