Почему EEPROM.get() не работает?

Я пытаюсь сохранить строку / символ в EEPROM с помощью EEPROM.put(), а затем получить значение, но это не работает, и я получаю пустое значение, когда я выполняю EEPROM.get(). Я помню, что именно так это работало на arduino nano, но теперь я пытаюсь использовать плату ESP32, они работают по-другому?

#include <EEPROM.h>

char my_string[8];

void setup() {

  Serial.begin(115200);

// Я пишу по этому коду, затем комментирую его, чтобы попытаться прочитать из EEPROM
/*
    my_string[0] = 'S';
    my_string[1] = 'N';
    my_string[2] = '-';
    my_string[3] = 'A';
    my_string[4] = 'B';
    my_string[5] = 'C';
    my_string[6] = 'D';
    
  EEPROM.put(0, my_string);
*/

  EEPROM.get(0, my_string);

  Serial.println("data is: ");
  Serial.println((char*)my_string);
}


void loop() { }

, 👍1


1 ответ


Лучший ответ:

4

EEPROM не может хранить строку. Он хранит числа. put() принимает тип и сохраняет этот тип в виде чисел.

Символ[] - это не строка, а число. Более конкретно, это адрес памяти, в которой хранятся строковые данные.

Все, что вы делаете, это сохраняете этот адрес памяти, а не сами данные.

Вместо этого вам нужно выполнить итерацию по вашей строке. Вы также должны сохранить длину строки, если она будет переменной.

Например:


void storeString(const char *str) {
    EEPROM.write(0, strlen(str)); // Сохранить длину строки
    for (int i = 0; i < strlen(str); i++) {
        EEPROM.write(i + 1, str[i]);
    }
}

void getString(char *str) {
    int len = EEPROM.read(0);
    for (int i = 0; i < len; i++) {
        str[i] = EEPROM.read(i + 1);
    }
}
,