mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AVR EEPROM Arbeitskopie


Autor: ... ... (docean) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin,

es es nötig eine Arbeitskopie bei Verwendung des EEProm zu erstellen?

Also z.B.
static struct anzeige_struct anzeige[16] EEMEM;

...

extern uint8_t get_anzeige_aktiv(uint8_t welche)
{
  return anzeige[welche].aktiv;
}

Geht das? (aktiv ist in der struct enthalten)

Bzw, geht dann auch
extern void set_anzeige_aktiv(uint8_t welche, uint8_t aktiv)
{
  anzeige[welche].aktiv=aktiv;
}

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ratespiel: Controller ist ein AVR und der Compiler ist GCC, liege ich da 
richtig? Wenn ja, dann solltest Du in der libc-Doku und/oder im 
AVR-GCC-Tutorial nachsehen, wie Zugriffe auf das EEPROM durchgeführt 
werden. Dafür gibt es in der eeprom.h spezielle Funktionen.

Autor: VomForumstonGenervter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Johannes
Man findet ja zu allen Fragen die Infos in der Doku, bzw. mit Google.
D.h. es ist garnicht notwendig, diese Fragen hier zu stellen.
Aber ist nicht dieses Forum gerade auch dafür da, bei solchen Fragen
weiterzuhelfen und Tips zu geben?

Dieses Forum ist echt das Grauen, wieviele sich wohl garnicht erst 
trauen,
hier zu fragen, da IMMER gleich rumgemault wird.
Echt bitter.

@Nix Nix:
Nein, so geht das leider nicht. Du mußt spezielle Schreib- und 
Leseroutinen für das EEPROM verwenden. Das ist vom verwendeten 
Controller unabhängig.
Falls Du GCC und AVR verwendest, dann findest Du weitere Hinweise
z.B. im AVR-Tutorial:
http://www.mikrocontroller.net/articles/AVR-Tutori...
und und zu der Doku der AVR-LIBC im Internet:
http://www.nongnu.org/avr-libc/user-manual/index.html
In der Lib sind diese Routinen enthalten, die einem das Leben da schon 
einfacher machen.
Oder Du benutzt die Methode, so wie sie Peter Dannegger hier:
Beitrag "Re: [AVR] per Interrupt ins EEPROM schreiben"
beschrieben hat. Ist auch sehr schön, finde ich.

Autor: ... ... (docean) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Tut hatte ich mir durchgelesen und mich gewundert das das immer so 
gemacht wird mit der lokalen Kopie...

Weil der Compiler meckert ja nich...

PS:
Das es ein AVR ist steht im Titel...

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ VomForumstonGenervter:
Nun, in einem Forum wie diesem kann man nicht erwarten, immer extrem 
ausführliche Antworten in druckreifen Sätzen zu erhalten (und ich wage 
mal zu behaupten, dass ich mir schon vergleichsweise einigermaßen Mühe 
gebe, wenn ich hier was schreibe). Wenn man kurz und knapp auf eine 
Frage eingeht, dann ist das gleich "rumgemaule" und irgendjemand fühlt 
sich dadurch angepisst. Dabei war rein gar nichts in meinem Posting auch 
nur im geringsten böse gemeint.

Ich habe auch nichts dagegen wenn Du meinst, Du müsstest dem OP alles 
vorkauen. Ist Deine Zeit...

Ich habe einige Hinweise zur Lösung gegeben und wenn der OP ernsthaft an 
der Sache interessiert ist und ihm die Infos ernsthaft nicht reichen, 
dann kann er immer noch nachhaken.

OK, das "AVR" im Betreff hatte ich glatt überlesen, aber die Angabe, mit 
welchem Compiler der OP arbeitet, fehlte. Und darauf sollte man ruhig 
hinweisen, damit der OP beim nächsten Mal dran denkt...

Autor: VomForumstonGenervter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Johannes:
Hmmmm.... nun gut, vielleicht ist mein "AngepisstLevel" sehr niedrig
heute;-)
Ich hatte es eben so verstanden: "Mann! Dann ließ doch das Manual....".

Nun denn.... lass gut sein.
Oft werden die Leute hier wirklich angemacht bei Fragen. Dabei ist es
auch normal, dass Fragen gestellt werden, deren Antworten irgendwo
beschrieben sind.

@Nix Nix: Hmmmm im Tutorial steht tatsächlich nicht, dass es sich bei
EEPROM um einen besonderen Speicher handelt, nur das er nichtflüchtig 
ist
und man besondere Routinen braucht.
Die Speicherzugriffe sind anders als beim RAM, man muß besondere 
"Mechanismen" zum Lesen/Schreiben verwenden. Das EEPROM hat dafür 
besondere Steuerregister. Darum geht das nicht so, wie Du es Dir 
vorgestellt hast.
Weitere Infos dazu findest Du auch im Datenblatt Deines AVRs.

Autor: ... ... (docean) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
D.h.

Ich mach
static struct anzeige_struct anzeige[16];
static struct anzeige_struct anzeige_eemem[16] EEMEM;

...
void speicher_anzeige()
{
       //Von anzeige nach anzeige_eemem mit EEProm Fkt. schreiben
}

void lese_anzeige()
{
       //Von anzeige_eemem nach anzeige mit EEProm Fkt. schreiben
}

Und dann gehts?

Autor: VomForumstonGenervter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, wenn Du dann die Eepromfunktionen richtig verwendest.

Du must auch beachten, dass EEPROM-Speicher grundsätzlich eine begrenzte
Anzahl an SCHREIB-Zyklen hat. Lesen kannst Du so oft du möchtest.
Schreibzyklen sind nach Herstellerangaben bei ATMEL ca. 100000 möglich. 
Meist  geht es öfter, aber es können dir dann Daten verloren gehen.

D.h. Du must aufpassen, dass Du nicht andauernd ins EEPROM schreibst, 
sondern nur, wenn sich en Wert ändert. Und wenn sich andauernd Werte 
ändern, dann must Du Deine SW so ändern, dass das nicht passiert oder 
Dir ein anderes Speichermedium suchen.

Autor: ... ... (docean) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das es nur Konfigurationsdaten sind werde ich die beim Start von EEPROM 
rauslesen...

Wiederreinschreiben bzw die Konfiguration on-the-fly ändern ist noch gar 
nicht vorgesehen...

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.