Forum: Mikrocontroller und Digitale Elektronik AVR EEPROM Arbeitskopie


von ... .. (docean) Benutzerseite


Lesenswert?

Moin,

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

Also z.B.
1
static struct anzeige_struct anzeige[16] EEMEM;
2
3
...
4
5
extern uint8_t get_anzeige_aktiv(uint8_t welche)
6
{
7
  return anzeige[welche].aktiv;
8
}

Geht das? (aktiv ist in der struct enthalten)

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

von Johannes M. (johnny-m)


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.

von VomForumstonGenervter (Gast)


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-Tutorial:_Speicher
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.

von ... .. (docean) Benutzerseite


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...

von Johannes M. (johnny-m)


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...

von VomForumstonGenervter (Gast)


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.

von ... .. (docean) Benutzerseite


Lesenswert?

D.h.

Ich mach
1
static struct anzeige_struct anzeige[16];
2
static struct anzeige_struct anzeige_eemem[16] EEMEM;
3
4
...
5
void speicher_anzeige()
6
{
7
       //Von anzeige nach anzeige_eemem mit EEProm Fkt. schreiben
8
}
9
10
void lese_anzeige()
11
{
12
       //Von anzeige_eemem nach anzeige mit EEProm Fkt. schreiben
13
}

Und dann gehts?

von VomForumstonGenervter (Gast)


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.

von ... .. (docean) Benutzerseite


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...

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.