Forum: Mikrocontroller und Digitale Elektronik Test: EEPROM vollschreiben


von Johannes (menschenskind)


Lesenswert?

Ich wollte mal testen, den EEPROM komplett vollzuschreiben.
habe also hier

uint16_t eeTest EEMEM;

dann schreiben in ner Schleife:
eeprom_write_word(&eeTest, 0xABAB);

Und dann möchte ich natürlich in jedem Schleifendurchlauf die Adresse 
erhöhen, aber
eeTest++; ist ja Quark.

Oder muss ich für jede Adresse eine neue Variable aufmachen? In dem Fall 
dann natürlich ein Array.

von Karl H. (kbuchegg)


Lesenswert?

Johannes Hofmann schrieb:

> Oder muss ich für jede Adresse eine neue Variable aufmachen?

Musst du nicht.
Die Variable brauchst du in einerm regulärem Programm nur, damit sich 
der gcc um die Verteilung der Adressen kümmert und dir den EEPROM 
sinnvoll aufteilt. Aber nichts und niemand hindert dich daran, in 
eeprom_write_word selber eine Adresse reinzuschieben, die du dir zb 
errechnet hast.

Also: for Schleife, die eine Adresse durch den Adressbereich des EEPROM 
duchlaufen lässt und innerhalb der Schleife das Byte an die Adresse 
schreiben.

von Joachim B. (jojo84)


Lesenswert?

Hallo!

Zu der Antwort von Karl Heinz hätte ich eine Frage. Ich bin nämlich auch 
grad dabei das EEPROM voll zu schreiben und Daten an direkte Adressen zu 
schreiben.
So, Jetzt ist mein EEPROM ja 512 Byte groß -> 512 Adressen. Wenn ich als 
Adresse aber einen INT-Wert eingebe oder das als INT caste nörgelt der 
Compiler immer. Das tut er bei chars nicht. Aber ich krieg ja keine 512 
Werte in ein char -_O ...

Das sieht bei mir so aus:
1
eeprom_write_byte((unsigned char*) address, 0xFF);
läuft (glaub ich)
1
eeprom_write_byte((unsigned int*) address, 0xFF);
läuft nicht(Compiler nörgelt)

Hab ich was übersehen?

Danke schonmal,
Joachim

von Plan (Gast)


Lesenswert?

Such mal die Deklaratin von "eeprom_write_byte()" Dann weiß Du welchen 
Datentyp der als Adresse verlangt.
Wenn Du möchtest dass wir helfen, dann kannst Du das auch posten.

Du kannst natürlich auch das versuchen:
1
eeprom_write_byte((void*) address, 0xFF);

von Joachim B. (jojo84)


Lesenswert?

Danke erstmal für die Antwort!

Also ich hab grad etwas rumgeguckt. Da hab ich folgendes gefunden:
1
void eeprom_write_byte (uint8_t *__p, uint8_t __value);
 (in der Datei "eeprom.h"). Das versteh ich jetzt so, als ob die 
Funktion einen 8bit Datentyp als Adressparameter erwartet.
Wenn das stimmt: ist das nicht iwie bräsig? Ich meine... klar, wenn ich 
16 Bit in einen 8bit-adressierten Raum schreiben will brauch ich 
natürlich zwei Adressen. Aber so, wie es scheinbar vorgesehen ist finde 
ich es nicht so gut. Denn so scheint es ja nicht möglich zu sein ein 
Byte an eine höhere Adresse als an 0xFF zu schreiben...

von Hc Z. (mizch)


Lesenswert?

Nein.  Sie erwartet keinen uint8_t, sondern einen Pointer auf uint8_t 
als Adresse.  Pointer sind 16 Bits lang.

von Karl H. (kbuchegg)


Lesenswert?

Joachim A. schrieb:
> Danke erstmal für die Antwort!
>
> Also ich hab grad etwas rumgeguckt. Da hab ich folgendes gefunden:
>
1
void eeprom_write_byte (uint8_t *__p, uint8_t __value);
 (in der
> Datei "eeprom.h"). Das versteh ich jetzt so, als ob die Funktion einen
> 8bit Datentyp als Adressparameter erwartet.

Nein.
Siehst du den *?
Sie will einen Pointer auf einen 8-Bit Datentyp.

von Karl H. (kbuchegg)


Lesenswert?

Joachim A. schrieb:

>
1
eeprom_write_byte((unsigned int*) address, 0xFF);
> läuft nicht(Compiler nörgelt)

'Compiler nörgelt' ist nie eine besonders gute Beschreibung.
Der Compiler nörglet nicht weil ihm fad ist, sondern weil etwas nicht 
stimmt. Was nicht stimmt, steht in dem Text den du Nörgelei nennst.

Also: Fehlermeldungen lesen!
Meistens (nicht immer) ist im Text der Hinweis enthalten was nicht 
stimmt und was daher geändert werden muss bzw. was man sich ansehen 
muss.

von Joachim B. (jojo84)


Lesenswert?

@Karl Heinz:

ha ha, wer hätts gedacht zwinker ... Aber ok, hast recht. Wollte nur 
nicht schon wieder wilde Warnmeldungen posten, nach denen ich ja auch 
googeln könnte =)

Danke, die Bescheibung mit den Pointern hab ich "verstanden".

Weitermachen ;)

von Karl H. (kbuchegg)


Lesenswert?

Joachim A. schrieb:
> @Karl Heinz:
>
> ha ha, wer hätts gedacht zwinker ... Aber ok, hast recht. Wollte nur
> nicht schon wieder wilde Warnmeldungen posten, nach denen ich ja auch
> googeln könnte =)

Du misverstehst das.
Die Warnmeldung hilft auch den Helfenden hier.
Ohne müssen wir alles absuchen um ein Problem zu finden.
Mit Warnmeldung sehen wir uns die Meldung an und es macht klick - ja 
klar, da liegt das Problem.

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.