Chat freely about anything...

User avatar
By BruceFerjulian
#46362 Trying to get my head around writing to EEPROM.

I have defined a struct for my data but the first element in the struct is getting duplicated.

struct Test_Writing_EEPROM
{
char ItemNum01[32];
char ItemNum02[32];
char ItemNum03[32];
} StoredValues;

The first time I run the output of the first element is three (3) times longer than the last element.

What did we find currently stored in eeprom.

ItemNum01: 1XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX23XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX45XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX6
SizeOF : 32
ItemNum02: 3XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX45XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX6
SizeOF : 32
ItemNum03: 5XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX6
SizeOF : 32

BAD : We did not match ItemNum01.

What did we define to send to eeprom.

ItemNum01: 1XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX23XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX45XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX6
SizeOF : 32
ItemNum02: 3XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX45XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX6
SizeOF : 32
ItemNum03: 5XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX6
SizeOF : 32

The second time I restart and re-read the data, it looks the same.

Code: Select all#include <EEPROM.h>

int eepromAddress = 0;

struct Test_Writing_EEPROM
{

  char ItemNum01[32];
  char ItemNum02[32];
  char ItemNum03[32];

} StoredValues;


void setup() {

  Serial.begin(115200);

  EEPROM.begin(512);
  EEPROM.get(eepromAddress, StoredValues);
  EEPROM.end();

  Serial.println("");
  Serial.println("What did we find currently stored in eeprom.");

  Serial.println("");
  Serial.print("ItemNum01: ");
  Serial.print(StoredValues.ItemNum01);
  Serial.println("");
  Serial.print("SizeOF   : ");
  Serial.print(sizeof(StoredValues.ItemNum01));

  Serial.println("");
  Serial.print("ItemNum02: ");
  Serial.print(StoredValues.ItemNum02);
  Serial.println("");
  Serial.print("SizeOF   : ");
  Serial.print(sizeof(StoredValues.ItemNum02));

  Serial.println("");
  Serial.print("ItemNum03: ");
  Serial.print(StoredValues.ItemNum03);
  Serial.println("");
  Serial.print("SizeOF   : ");
  Serial.print(sizeof(StoredValues.ItemNum03));


  if (StoredValues.ItemNum01 == "1XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX2" )
  {

    Serial.println("");
    Serial.println("");
    Serial.println("GOOD: We matched ItemNum01");

  } else {

    Serial.println("");
    Serial.println("");
    Serial.println("BAD : We did not match ItemNum01.");

    EEPROM.begin(512);

    strncpy(StoredValues.ItemNum01, "1XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX2", 32);
    strncpy(StoredValues.ItemNum02, "3XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX4", 32);
    strncpy(StoredValues.ItemNum03, "5XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX6", 32);

    Serial.println();
    Serial.println("What did we define to send to eeprom.");

    Serial.println();
    Serial.print("ItemNum01: ");
    Serial.print(StoredValues.ItemNum01);
    Serial.println();
    Serial.print("SizeOF   : ");
    Serial.print(sizeof(StoredValues.ItemNum01));

    Serial.println();
    Serial.print("ItemNum02: ");
    Serial.print(StoredValues.ItemNum02);
    Serial.println();
    Serial.print("SizeOF   : ");
    Serial.print(sizeof(StoredValues.ItemNum02));

    Serial.println();
    Serial.print("ItemNum03: ");
    Serial.print(StoredValues.ItemNum03);
    Serial.println();
    Serial.print("SizeOF   : ");
    Serial.print(sizeof(StoredValues.ItemNum03));

    EEPROM.put(eepromAddress, StoredValues);
    EEPROM.end();
  }

}

void loop() {

  delay(5000);
}
User avatar
By RichardS
#46363 How goes the .get() know your getting 96 bytes? Am I missing something?

RichardS
User avatar
By RichardS
#46364 Also you did not leave any room for the 0 at the end of the string :-) If you want to put 32 things into a string, it needs to be char[33];

Or delete one X from each of the strings and all should be OK

RichardS