attiny85 EEPROM schreiben/lesen

OP #6573905
Lesenswert?

Hallo Leute, bin neu hier und habe, trotz umfangreicher Suche, ein 
Problem mit dem Lesen bzw. Schreiben des EEProm eines attiny85. Habe 
beiliegendes Programm auf einem Arduino UNO ausgeführt und es läuft 
einwandfrei. Am attiny85 läuft es aber nur wenn mein String (nummer 
"+436642") den ich schreiben will bzw. dann zurücklese max. 7-stellig 
ist. Bei größerem String (ganze Telefonnummer) funktioniert es leider 
nicht mehr. Die LED´s sind nur zum "debuggen". LG Schmali
Angehängte Dateien:
Gast #6573969
Lesenswert?

... besser so!

void write_string(int eeAddr , String data) {
  for (uint8_t i=0; i!=data.length()+1; i++) {
    EEPROM.write(eeAddr+i, data[i]);
  }
}

String read_string(uint16_t eeAddr) {
  char getByte, eeData[250+1];
  uint8_t i=0;
  while (getByte = EEPROM.read(eeAddr+i) && i!=sizeof(eeData)) {
    eeData[i++] = getByte;
  }
  data[i] = getByte;
  return String(eeData);
}
Gast #6573985
Lesenswert?

... nochmal, besser so!

void write_string(uint16_t eeAddr , String data) {
  for (uint8_t i=0; i!=data.length()+1; i++) {
    EEPROM.write(eeAddr+i, data[i]);
  }
}

String read_string(uint16_t eeAddr) {
  char getByte, eeData[250+1];
  uint8_t i=0;
  while (getByte = EEPROM.read(eeAddr+i) && i!=sizeof(eeData)) {
    eeData[i++] = getByte;
  }
  eeData[i] = getByte;
  return String(eeData);
}
Beitrag #6574055 wurde von einem Moderator gelöscht.
Beitrag #6574069 wurde von einem Moderator gelöscht.
Gast #6574106
Lesenswert?

Du musst doch wissen, wie lang der String ist - falls Du nicht immer mit 
derselben Länge arbeiten willst. Also entweder die Länge am Anfang mit 
abspeichern (Pascal Strings) oder ein Terminator Zeichen an das Ende (C 
Strings).
(Firma: @home) #6574145
Lesenswert?

kannAllesBesser! schrieb:
> String read_string(uint16_t eeAddr) {
>   char getByte, eeData[250+1];
>   uint8_t i=0;
>   while (getByte = EEPROM.read(eeAddr+i) && i!=sizeof(eeData)) {
>     eeData[i++] = getByte;
>   }
>   eeData[i] = getByte;
>   return String(eeData);
> }

.. "vermutlich" ist return BIG string das Problem, daher besser
mit global Buffer:

char eeData[250+1];
void read_string(uint16_t eeAddr, char *string) {
   char getByte;
   uint8_t i=0;
   while (getByte = EEPROM.read(eeAddr+i) && i!=sizeof(eeData)) {
     string[i++] = getByte;
   }
   string[i] = getByte;
   String(string);
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren