• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Нужна помощь Считывание данных из EEPROM

SamHurwitz

New member
Здравствуйте.
Пытаюсь реализовать систему хранения строки, а именно айдишника устройства. Длина строки всегда одинаковая.
Как я понимаю это должно работать: при запуске программы я считываю некоторое количество байт, записываю их в строку, проверяю, если строка пустая - нет записи, поэтому генерирую случайную и записываю ее, если же есть использую ее.
Но вот когда я пытаюсь прочитать что-то из EEPROM, там уже есть какая-то белиберда, хотя я вообще никогда туда ничего не записывал.
Функция чтения:
Код:
String id = "";
  EEPROM.begin(23);
  delay(10);
 
  for(int i = 0; i < 23; i++)
  {
      id += char(EEPROM.read(i));
  }
  EEPROM.end();
 
  Serial.print("Id: ");
  Serial.println(id);
Пожалуйста, подскажите, что не так. Может быть где-то ошибка в коде, а может так и должно быть, тогда как же мне все-таки реализовать эту систему?
Премного благодарен.
 

Сергей_Ф

Moderator
Команда форума
@SamHurwitz а почему вы решили, что там должна быть нулевая строка?
Я делал так: вначале читал заголовок-подпись из 4 байт, если он совпадает с тем что я ожидаю значит моя программа уже работала и дальше есть осмысленное значение. В вашем случае массив из 23 символов. И это не строка с точки зрения С++.
А если не совпал, то генерим массив сиволов и пишем сначала заголовок, а потом массив.
 

SamHurwitz

New member
@SamHurwitz а почему вы решили, что там должна быть нулевая строка?
Я делал так: вначале читал заголовок-подпись из 4 байт, если он совпадает с тем что я ожидаю значит моя программа уже работала и дальше есть осмысленное значение. В вашем случае массив из 23 символов. И это не строка с точки зрения С++.
А если не совпал, то генерим массив сиволов и пишем сначала заголовок, а потом массив.
Спасибо, так и сделаю. А что же это все таки там хранится, просто мне кажется это странным
 

Сергей_Ф

Moderator
Команда форума
@SamHurwitz у вас флеш-память с завода? В модуле раньше не было никаких прошивок? Тогда, действительно, странно ;)
 

enjoynering

Well-known member
И это не строка с точки зрения С++.
угу. у вас массив char. его кстати предпочтительнее использовать, а не String. Иначе может так случиться, что весь heap будет фрагментирован (весь в дырках как швейцарский сыр). Вот тут описано почему - The Evils of Arduino Strings.
 

Вложения

Сверху Снизу