Имеется следующая задача: Есть шилд MEGA2560. Необходимо записать в память EEPROM несколько динамических массивов символов, затем их считать из EEPROM в массивы. Длина массивов первоначально неизвестна, поэтому они динамические с максимальным количеством элементов (в моём случае 20). Делается это для экономии оперативной памяти, т.к. работа идёт с большим количеством массивов. Запись и чтение происходит следующим образом: Код (C++): #include <EEPROM.h> char* str = "text"; char* str1; char* str2; ... // Выделяем память для str1 str1 = new char[20]; // Вставляем какие-то данные str1[0] = 'a'; str1[1] = 'b'; str1[2] = 'c'; // Запись в EEPROM str1 EEPROM.put(address1, str1); // Освобождаем память от str1 delete [] str1; // Запись в EEPROM str = "text" - статический массив символов EEPROM.put(address, str); ***************************************** Перезагружаем контроллер ***************************************** // Читаем из EEPROM в str1 EEPROM.get(address1, str1); // Читает ерунду // Читаем из EEPROM в str2 EEPROM.get(address, str2); // Читает нормально - str = "text"!..
А где инициализация address и address1 EEPROM адресный массив. Если вы хотите работать с динамическими массивами то нужно позаботиться о хранении информации о начале нового массива (его начальном адресе) и длинной массива. Варианты есть разные. Ну и плюс у вас str указывает на строку в памяти c нулем в конце. A str1 - это указатель и нет там строки.