Forum: Compiler & IDEs EEPROM read_block


von gast (Gast)


Angehängte Dateien:

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

von Dirk B. (sharandac)


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

von gast (Gast)


Lesenswert?

ja möchte ich den String im eeprom schreiben und auch lesen

von Dirk B. (sharandac)


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.
1
char EEpromString[30] EEMEM;      /* String in EEprom*/
2
char StringOrginal[30]="Teststring";   /* String im Ram*/
3
char StringKopie[30];        /* String Kopie im Ram */
4
5
void main(void)
6
{
7
      UART0_Init();
8
      char tempstr[60];
9
10
      /* String aus dem Ram ins EEprom kopieren*/
11
      eeprom_write_block( &StringOrginal, &EEpromString, strlen( StringOrginal) );
12
      sprintf(tempstr,"eeprom Schreiben: %s\n", &StringOrginal );
13
      Meldung(tempstr);
14
15
      /* String aus dem EEprom ins Ram kopieren*/
16
      eeprom_read_block( &StringKopie, &EEpromString, strlen( StringOrginal) );
17
      sprintf(tempstr,"eeprom lesen: %s\n", &StringKopie );
18
      Meldung(tempstr);  
19
}

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.

von gast (Gast)


Lesenswert?

Hallo Dirk,
habe ich gerade getestet, es funktionniert ich danke Dir

von gast (Gast)


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

von Dirk B. (sharandac)


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

von Matthias L. (Gast)


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

von Dirk B. (sharandac)


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

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.