• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе 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.
 

Вложения

Сверху Снизу