www.mikrocontroller.net

Forum: Compiler & IDEs EEPROM read_block


Autor: gast (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
hallo,
ich möchte mich mit dem Kapitel eeprom beschäftigen.
Nachdem ich das Tutorial gelesen habe, versuche ich einige Variable in 
Eeprom zu schreiben/lesen.Ich habe einige Beispiele gewählt.
Das Lesen/Schreiben ein Byte und read_block(für int)funktioniert.Für die 
andere Fälle bekomme ich komische Werte. Weiß jemanden,wo ich Fehler 
mache.
Anbei meine Code.
hier sind die Werte, die ich mit der Funktion sprintf bekomme.
:eeeeprom lesen: 123

:eeprom schreiben: 99

:eeprom scheiben: 0

:eeprom lesen: 30

:eeprom schreiben: Ú

:eeprom lesen:

Auf alle Hilfe bin ich sehr dankbar

Autor: Dirk Broßwick (sharandac)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

 hm ... ich empfehle dir nochmal ein C-Buch in die Hand zu nehmen. Der 
Code ist leider sehr unübersichtlich und ich glaube du solltest dir 
nochmal genau Stringverarbeitung und Behandlung ansehen und außerdem die 
unterschiedlichen Typen an Variablen (int, char, ...).
 Aus dem angefügten Code entnehme ich das du eigentlich im letzten Teil 
den String ins EEProm kopieren willst und wieder einlesen willst, oder 
liege ich da falsch ?

CA Dirk

Autor: gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja möchte ich den String im eeprom schreiben und auch lesen

Autor: Dirk Broßwick (sharandac)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hier mal ein Beispiel, habe jetzt gerade keine möglichkeit zu testen. 
Aber vom Prinzip sollte es richtig sein. Werde ich aber testen wenn ich 
wieder zu hause bin. Hab auch der Einfachhalber mal die Headerdateien 
weglassen.
char EEpromString[30] EEMEM;      /* String in EEprom*/
char StringOrginal[30]="Teststring";   /* String im Ram*/
char StringKopie[30];        /* String Kopie im Ram */

void main(void)
{
      UART0_Init();
      char tempstr[60];

      /* String aus dem Ram ins EEprom kopieren*/
      eeprom_write_block( &StringOrginal, &EEpromString, strlen( StringOrginal) );
      sprintf(tempstr,"eeprom Schreiben: %s\n", &StringOrginal );
      Meldung(tempstr);

      /* String aus dem EEprom ins Ram kopieren*/
      eeprom_read_block( &StringKopie, &EEpromString, strlen( StringOrginal) );
      sprintf(tempstr,"eeprom lesen: %s\n", &StringKopie );
      Meldung(tempstr);  
}

Als erstes wird der String (StringOrginal) ins EEprom (EEpromString) 
geschrieben mit anschliessender Ausgabe des Strings. Danach wird der 
String aus dem EEprom (EEpromString) wieder ins RAM (StringKopie) 
kopiert und wieder ausgegeben.
Beide Ausgaben sollten identisch sein wenn alles geklappt hat.

Autor: gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Dirk,
habe ich gerade getestet, es funktionniert ich danke Dir

Autor: gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Dirk,
eine kleine Frage warum nicht nimmst Du die strlen(StringOrginal) in der 
Funktion:eeprom_read_block( &StringKopie, &EEpromString, strlen( 
StringOrginal).  ich denke man muss  strlen( StringKopie).
Danke

Autor: Dirk Broßwick (sharandac)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, das Problem ist das die Kopie des Strings den man einlesen will noch 
gar nicht existiert, und somit auch deren länge nicht ermittelt werden 
kann. Aber da ich weiss das der String die länge des orginals haben 
sollte, kann ich ja auch deren länge nehmen :-).

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Ja, das Problem ist das die Kopie des Strings den man einlesen will noch
>gar nicht existiert,

Aber die Länge der Variablen ist mit sizeof bestimmbar.

Und ich denke, das sollte dahin, weil dann das eeprom-read-block weiß, 
wie groß der puffer maximal ist. sonst könnten nachfolgende variablen 
überschrieben werden..

Autor: Dirk Broßwick (sharandac)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Matthias Lipinsky wrote:
>>Ja, das Problem ist das die Kopie des Strings den man einlesen will noch
>>gar nicht existiert,

> Aber die Länge der Variablen ist mit sizeof bestimmbar.
>
> Und ich denke, das sollte dahin, weil dann das eeprom-read-block weiß,
> wie groß der puffer maximal ist. sonst könnten nachfolgende variablen
> überschrieben werden..
>
Stimmt. Aber da muss der Programmierer sich schon darum kümmern wenn er 
den kompletten String wieder haben will. Deshalb meine Anmerkung zu 
Stringverarbeitung. Aber das ist eine eigenes Thema für sich :-)

CA Dirk

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.