support писал(а):Основное место в переменных занимают строки текста. Остальное мелочи(в большинстве своём булеановские или байты). Естественно избавится полностью от строк не получится( что то выводиться же должно) но я по стараюсь перенести их в память программы (PROGMEM) которой заметно больше. Пока разбираюсь с этим. Это не так просто.
Приветствую Сергей.
Может и так знаете, но есть такая форма записи
Serial.println(F("This string will be stored in flash memory")); вот тут
подробнее
Но это косается только передачи в Com-порт
Ну и как я понял, про
Ключевое слово PROGMEM вы тоже уже знаете.
Добавлено (04.11.2016, 10:31)
---------------------------------------------
Попробовал перенести в массивы строк в память на основе приведенной выше статьи, получается.
сгенерирвал меню из трех пунктов затем заменил часть кода в IDE
String _menuItemsNameArray[3] = {"Menu1", "QQQQQQ", "NEEE"};
Заменил на
const char string_0[] PROGMEM = "Menu1"; // "String 0" и т.д. - это содержимое строк; если необходимо меняйте его
const char string_1[] PROGMEM = "QQQQQQ";
const char string_2[] PROGMEM = "NEEE";
// Теперь создаем таблицу с отсылками к этим строкам:
const char* const string_table[] PROGMEM = {string_0, string_1, string_2};
char buffer[20]; // массив был достаточно велик, чтобы вместить даже самую большую строку
ниже нашел строку
_MenuBlock_396801281_MNO = _menuItemsNameArray[((_MainMenus[0].currentItem ).menuNameIndex - 1)];
заменил таким кодом:
strcpy_P(buffer, (char*)pgm_read_word(&(string_table[((_MainMenus[0].currentItem ).menuNameIndex - 1)])));
_MenuBlock_396801281_MNO= String (buffer);