Страница 3 из 3
Проблема работы блока Меню при большом обьеме скетча
Добавлено: 03 ноя 2016, 21:51
support
Почему? Эти строки как раз в глобальных переменных сейчас и лежат. В массивах.
Проблема работы блока Меню при большом обьеме скетча
Добавлено: 03 ноя 2016, 21:59
nalnik
А ключевое слово - в глобальных переменных сейчас и лежат.
Проблема работы блока Меню при большом обьеме скетча
Добавлено: 03 ноя 2016, 22:24
Dev1
nalnik писал(а):Dev1На глобальные переменные это не влияет.
Предложи еще иероглифы
Выложи что сам написал - обсудим.
Файл для проверки
https://yadi.sk/d/lDWvG_GDxuEFE
Исходный вариант без изменений:
Скетч использует 12 978 байт (40 памяти устройства. Всего доступно 32 256 байт.
Глобальные переменные используют 1 881 байт (91 динамической памяти, оставляя 167 байт для локальных переменных. Максимум: 2 048 байт.
Недостаточно памяти, программа может работать нестабильно.
Мой вариант для проверки глобальной памяти где все надписи приведены к названиям меню по дефолту М-1, М-1.1, М-1.1.1 и т.д, удалены все лишние записи дополнительных строк и строка на выходе "val":
Скетч использует 11 968 байт (37 памяти устройства. Всего доступно 32 256 байт.
Глобальные переменные используют 1 411 байт (68 динамической памяти, оставляя 637 байт для локальных переменных. Максимум: 2 048 байт.
Памяти хватает.
Проблема работы блока Меню при большом обьеме скетча
Добавлено: 03 ноя 2016, 22:46
nalnik
Dev1
Что то Вы поздно проснулись.
Так и на фиг мне такое меню,
м-1-2
м-2-3
и что там сэкономил один и четыре килобайта
на одно подменю не хватит - а и где сама программа ?
И ваще - молчим и ждем ответа от support
Проблема работы блока Меню при большом обьеме скетча
Добавлено: 03 ноя 2016, 23:15
Lazary
Dev1, Спасибо за предложения, но уменьшая размер текста и даже удаления всех дополнительных строк проблему не решит, я сократил по мин текст и удалил все дополнительные строки, скетч загрузился но меню не работает, так как размер глобальных
переменных все равно слишком велик.
Добавлено (03.11.2016, 23:15)
---------------------------------------------
И все же я немного недопонимаю, почему оно не работает если еще остается память для глобальных переменных, достигая 60% памяти глобальных переменных все не работает а остальные 40% для чего ?
Проблема работы блока Меню при большом обьеме скетча
Добавлено: 03 ноя 2016, 23:21
nalnik
Lazary
В текстах удали - не определенные стоки
строк не должно быть больше двух - у тебя есть заполненная строка и две не определенных - крайнею удали
проверь
Проблема работы блока Меню при большом обьеме скетча
Добавлено: 03 ноя 2016, 23:47
Lazary
nalnik, Я вообще удалил все строки которые боли, все доп стрелочки и пробелы, обьем уменьшился да, но все же это не совсем решение так как все равно остается ограничение на обьем памяти переменных, много пунктов меню с под меню не сделать
Проблема работы блока Меню при большом обьеме скетча
Добавлено: 04 ноя 2016, 10:31
Слимпер
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"};
Заменил на
[spoiler=Спойлер]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]; // массив был достаточно велик, чтобы вместить даже самую большую строку[/spoiler]
ниже нашел строку
_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);
Проблема работы блока Меню при большом обьеме скетча
Добавлено: 04 ноя 2016, 15:20
support
Ну примерно это я и делаю. Первые успехи уже есть. Но ещё работаю.

Проблема работы блока Меню при большом обьеме скетча
Добавлено: 04 ноя 2016, 16:18
Lazary
support, Вы мне потом объясните как все сделать чтобы заработало как нужно, прошу объяснить подробно как для человека который в коде не чего не понимает, мои познания программирования для ардуино только в FLProg. Спасибо!
Проблема работы блока Меню при большом обьеме скетча
Добавлено: 06 ноя 2016, 11:39
support
Подождите немного. Я как раз сейчас работаю. Ничего делать не надо, я переделываю компилятор в FLProg. Вроде получается. На текущий момент при стандартной компиляции проекта на вашем проекте ситуация такая.
И это при 40!!! пунктах меню. Честно говоря очень много.
Проблема работы блока Меню при большом обьеме скетча
Добавлено: 17 ноя 2016, 17:22
Lazary
support, Спасибо большое за помощь, результаты просто замечательные, ждем конечного результата, держите по возможности нас в курсе как все продвигается.
Добавлено (17.11.2016, 17:22)
---------------------------------------------
support, Здравствуйте, можно поинтересоваться как проходят успехи с решением данной проблемы ? На когда примерно ожидать конечные результаты, чтобы хоть примерно ориентироваться по срокам сколько ожидать. Спасибо!
Проблема работы блока Меню при большом обьеме скетча
Добавлено: 17 ноя 2016, 17:57
Слимпер
Lazary писал(а):Здравствуйте, можно поинтересоваться как проходят успехи с решением данной проблемы ? На когда примерно ожидать конечные результаты, чтобы хоть примерно ориентироваться по срокам сколько ожидать. Спасибо!
Так уже вышла версия
2.1.1 в которой это уже решено.
Проблема работы блока Меню при большом обьеме скетча
Добавлено: 12 дек 2016, 19:14
Lazary
Слимпер, Спасибо за подсказку, не заметил вовремя что уже вышла новая версия