www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Test: EEPROM vollschreiben


Autor: Johannes H. (menschenskind)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Joachim B. (jojo84)
Datum:

Bewertung
0 lesenswert
nicht 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:
eeprom_write_byte((unsigned char*) address, 0xFF);
läuft (glaub ich)
eeprom_write_byte((unsigned int*) address, 0xFF);
läuft nicht(Compiler nörgelt)

Hab ich was übersehen?

Danke schonmal,
Joachim

Autor: Plan (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:
eeprom_write_byte((void*) address, 0xFF);

Autor: Joachim B. (jojo84)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke erstmal für die Antwort!

Also ich hab grad etwas rumgeguckt. Da hab ich folgendes gefunden:
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...

Autor: Hc Zimmerer (mizch)
Datum:

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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Joachim A. schrieb:
> Danke erstmal für die Antwort!
>
> Also ich hab grad etwas rumgeguckt. Da hab ich folgendes gefunden:
>
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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Joachim A. schrieb:

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

Autor: Joachim B. (jojo84)
Datum:

Bewertung
0 lesenswert
nicht 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 ;)

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

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.