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.
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.
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
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); |
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...
Nein. Sie erwartet keinen uint8_t, sondern einen Pointer auf uint8_t als Adresse. Pointer sind 16 Bits lang.
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.
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.
@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 ;)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.