Вообщем потребовалось названия меню перенести в EEPROM(пользователь может менять названия), перепробовал куча способов и остановился на этом: Код (C++): void setup() { Serial.begin(9600); Serial.println("Test"); String nameList[16]; for (byte index = 0; index < 16; index++) { nameList[index] = getFormatString("Rele " + String(index + 1), 64); Serial.println(nameList[index]); } eeprom_write_block((void*)&nameList, 384, 96); String name; for (byte index = 0; index < 16; index++) { eeprom_read_block((void*)&name, (384 + (index * 6)), 6); Serial.println(name); } } String getFormatString(String text, byte newLengthText) { for (byte index = text.length(); index < newLengthText; index++) { text += " "; } return text; } Но и здесь не все чисто... EEPROM кушает string любой длины, при этом всегда выделяя 6 байт места. Возможно EEPROM записывает ссылки, а не значение, тогда как его заставить записывать string? Или такой алгоритм не прокатит и придется побайтово передавать string?
Код (C++): void setup() { Serial.begin(9600); Serial.println("Test"); for (byte index = 0; index < 16; index++) { String name = getFormatString(("Rele " + String(index + 1)), 12); for (byte indexChar = 0; indexChar < 12; indexChar++) { eeprom_write_byte((384 + indexChar + (12 * index)), (byte)name[indexChar]); } } for (byte index = 0; index < 16; index++) { String name = ""; for (byte indexChar = 0; indexChar < 12; indexChar++) { name += (char)eeprom_read_byte((384 + indexChar + (12 * index))); } Serial.println(name); } } String getFormatString(String text, byte newLengthText) { for (byte index = text.length(); index < newLengthText; index++) { text += " "; } return text; } Этот работает 100%, но хотелось бы кидать блоками не тратя время на перезаписи...
Размер переменной типа String всегда 6 байт. сама строка хранится отдельно. Стандартными функциями записать String в ЕЕПРОМ не получится. Я бы посоветовал вообще не использовать String. используйте просто текстовые строчки (массив символов chat*)