Как такое может быть со скетчем

Три абсолютно одинаковых скетча но с разным количеством плат

Вопросы от новичков
Ответить
Аватара пользователя
Hijin
Лейтенант
Сообщения: 325
Зарегистрирован: 22.08.2017{, 11:08}
Репутация: 13
Откуда: Винница
Имя: Юрий

Как такое может быть со скетчем

#1

Сообщение Hijin » 01.04.2019{, 17:38}

Делал прект меню капельного полива участка. Первоначально он состоял из
13 плат 84 переменные
Скетч использует 17454 байт (56%) памяти устройства. Всего доступно 30720 байт.
Глобальные переменные используют 890 байт (43%) динамической памяти, оставляя 1158 байт для локальных переменных. Максимум: 2048 байт.
Потом бил скетч в
2 платы 23 переменные
Скетч использует 16170 байт (52%) памяти устройства. Всего доступно 30720 байт.
Глобальные переменные используют 791 байт (38%) динамической памяти, оставляя 1257 байт для локальных переменных. Максимум: 2048 байт.
Вроде бы отыграл 1284 байт 4%памяти
Решил сбить вообще все в кучу и тут на тебе
1 плата 4 переменные
Скетч использует 17648 байт (57%) памяти устройства. Всего доступно 30720 байт.
Глобальные переменные используют 775 байт (37%) динамической памяти, оставляя 1273 байт для локальных переменных. Максимум: 2048 байт.
И как это называеться

Отправлено спустя 54 секунды:
Пример

Отправлено спустя 1 час 16 минут 58 секунд:
видео с работой скетчей (все три скетча работают одинаково)
Вложения
Архив 3 айла.rar
(398.7 КБ) 48 скачиваний

Ingwar
Полковник
Сообщения: 1929
Зарегистрирован: 28.10.2015{, 22:47}
Репутация: 223
Откуда: Ленобласть
Имя: Игорь

Как такое может быть со скетчем

#2

Сообщение Ingwar » 01.04.2019{, 22:22}

Ну сами посудите - у Вас в блоке меню несколько пунктов, которые содержат еще пункты с разными строками. Посчитайте все эти строки (не важно если название одинаковые) и поймете сколько у Вас на самом деле переменных, да еще и string...

Отправлено спустя 45 минут 51 секунду:
Обманул, не string - char. Вообщем запустите IDE и посмотрите сколько определяется переменных и массивов...
Люди в своем большинстве живо интересуются всем на свете, за исключением того, что действительно стоит знать.

Аватара пользователя
Hijin
Лейтенант
Сообщения: 325
Зарегистрирован: 22.08.2017{, 11:08}
Репутация: 13
Откуда: Винница
Имя: Юрий

Как такое может быть со скетчем

#3

Сообщение Hijin » 02.04.2019{, 17:41}

Дальнейшие єксперименты
В фале с 2 платами поменял переменные в меню с интеджер на байт опять получилась экономия 3% памяти
Используем библиотеку Wire версии 1.0 из папки: d:\Program Files\FLProg\ideV2\portable\packages\arduino\hardware\avr\1.6.23\libraries\Wire
Используем библиотеку LiquidCrystal_I2C в папке: d:\Program Files\FLProg\ideV2\libraries\LiquidCrystal_I2C (legacy)
Используем библиотеку EEPROM версии 2.0 из папки: d:\Program Files\FLProg\ideV2\portable\packages\arduino\hardware\avr\1.6.23\libraries\EEPROM
Скетч использует 15342 байт (49%) памяти устройства. Всего доступно 30720 байт.
Глобальные переменные используют 735 байт (35%) динамической памяти, оставляя 1313 байт для локальных переменных. Максимум: 2048 байт.
А вот поменял переменные в меню с интеджер на байт в файле с одной платой и опять скетч не уменшился а вырос на 3%
ХаХаХа
Используем библиотеку Wire версии 1.0 из папки: d:\Program Files\FLProg\ideV2\portable\packages\arduino\hardware\avr\1.6.23\libraries\Wire
Используем библиотеку LiquidCrystal_I2C в папке: d:\Program Files\FLProg\ideV2\libraries\LiquidCrystal_I2C (legacy)
Используем библиотеку EEPROM версии 2.0 из папки: d:\Program Files\FLProg\ideV2\portable\packages\arduino\hardware\avr\1.6.23\libraries\EEPROM
Скетч использует 18632 байт (60%) памяти устройства. Всего доступно 30720 байт.
Глобальные переменные используют 854 байт (41%) динамической памяти, оставляя 1194 байт для локальных переменных. Максимум: 2048 байт.
Новая папка (2).rar
(238.83 КБ) 46 скачиваний

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Как такое может быть со скетчем

#4

Сообщение Dryundel » 02.04.2019{, 18:39}

Hijin писал(а):
02.04.2019{, 17:41}
Дальнейшие єксперименты...................
Да не мучайтесь Вы. Приобретите Wemos D1 mini. По цене практически те же деньги что и Nano. 16MB памяти. Вам и на соседские грядки места под переменные хватит. Плюс еще Wi-Fi в нагрузку сделаете доп. управление со смартфона с красивенннннным меню. Да и процессор там пошустрей будет раз этак в 10 почти.

Аватара пользователя
Hijin
Лейтенант
Сообщения: 325
Зарегистрирован: 22.08.2017{, 11:08}
Репутация: 13
Откуда: Винница
Имя: Юрий

Как такое может быть со скетчем

#5

Сообщение Hijin » 02.04.2019{, 18:48}

Так есть у меня ноде мцу Но ведь и там могут быть такие лажи но не так заметные из за большего количества памяти
здесь когда стараешся выжать по максимуму они сразу всплывают
Хотелось бы выслушать версию хоть одного из ГУРУ а самое лутшее от СЕНСЕЯ

Аватара пользователя
Goosr
Сержант
Сообщения: 184
Зарегистрирован: 07.06.2016{, 08:25}
Репутация: 16
Откуда: Тольятти
Имя: Дмитрий

Как такое может быть со скетчем

#6

Сообщение Goosr » 03.04.2019{, 13:23}

Hijin, Вопросик. А в чем это вы проверяете работу скетча?

Разглядел :smile171:
FLProg 6.3.1 - 7.3.4 - Linux

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Как такое может быть со скетчем

#7

Сообщение Dryundel » 04.04.2019{, 08:35}

Goosr писал(а):
03.04.2019{, 13:23}
Hijin, Вопросик. А в чем это вы проверяете работу скетча?

Разглядел :smile171:
А в чем проблема то? К чему такой сарказм? Почему бы не протестировать логику в Протеусе? Я бы еще понял, если бы речь шла про аналоговые величины, а в данном случае не вижу проблем.

aidar_i
Полковник
Сообщения: 3126
Зарегистрирован: 24.12.2016{, 16:55}
Репутация: 676
Откуда: Уфа
Имя: Айдар
Контактная информация:

Как такое может быть со скетчем

#8

Сообщение aidar_i » 04.04.2019{, 09:43}

В проекте Вашем не разбирался, но сразу нашел ляп.
Не допускайте ошибки , когда создаете проект, тогда не будет
Hijin писал(а):
02.04.2019{, 17:41}
Дальнейшие єксперименты.......
Открыл Ваш проект с одной платой, где Вы пишете , что поменяли интежер на байты. Вижу здесь не поменяли,
СпойлерПоказать
Снимок_2019_04_04_11_38_49_941.png
Снимок_2019_04_04_11_38_49_941.png (5.8 КБ) 523 просмотра
поменял, ничего не изменилось, вытянул блок, а там под ним еще блок такой же.
СпойлерПоказать
Снимок_2019_04_04_11_39_01_572.png
Снимок_2019_04_04_11_39_01_572.png (6.11 КБ) 523 просмотра

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Как такое может быть со скетчем

#9

Сообщение Dryundel » 04.04.2019{, 09:55}

Hijin писал(а):
02.04.2019{, 18:48}
Хотелось бы выслушать версию хоть одного из ГУРУ а самое лутшее от СЕНСЕЯ
Вам СЕНСЕЙ нужен для того, что бы указзать на то, что в файле с одной платой вы забыли удалить вторую плату? :)
Ладно, будем считать это оплошностью.
Hijin писал(а):
01.04.2019{, 18:56}
Вроде бы отыграл 1284 байт 4%памяти
Решил сбить вообще все в кучу и тут на тебе
1 плата 4 переменные
Скетч использует 17648 байт (57%) памяти устройства. Всего доступно 30720 байт.
Глобальные переменные используют 775 байт (37%) динамической памяти, оставляя 1273 байт для локальных переменных. Максимум: 2048 байт.
И как это называеться
Есть одно предположение. :)
Дело в том, что не всегда стремление избавиться от "лишних" переменных приводит к желаемому результату (уменьшению скетча).
Предположим есть некая сумма переменных
a+b+c+d+e
Мы отправляем ее в несколько точек AA, BB, CC, DD
тогда скетч условно будет выглядеть так:
AA=a+b+c+d+e
BB=a+b+c+d+e
CC=a+b+c+d+e
DD=a+b+c+d+e
А если ввести доп переменную X и приравнять ее к сумме исходных переменных, то получим следующее
X=a+b+c+d+e
AA=X
BB=X
CC=X
DD=X
Количество операций сокращается. Отсюда и сокращение скетча.
Попробуйте в вашей схеме заменить всего одну логическую связь на переменную (добавить переменную) вот здесь:
СпойлерПоказать
2019-04-04_092415.jpg
и получите "экономию" в 2%

Аватара пользователя
Goosr
Сержант
Сообщения: 184
Зарегистрирован: 07.06.2016{, 08:25}
Репутация: 16
Откуда: Тольятти
Имя: Дмитрий

Как такое может быть со скетчем

#10

Сообщение Goosr » 06.04.2019{, 11:24}

Dryundel писал(а):
04.04.2019{, 08:35}
А в чем проблема то? К чему такой сарказм? Почему бы не протестировать логику в Протеусе? Я бы еще понял, если бы речь шла про аналоговые величины, а в данном случае не вижу проблем.
Я над собой смеюсь. :smile44:
FLProg 6.3.1 - 7.3.4 - Linux

Аватара пользователя
Hijin
Лейтенант
Сообщения: 325
Зарегистрирован: 22.08.2017{, 11:08}
Репутация: 13
Откуда: Винница
Имя: Юрий

Как такое может быть со скетчем

#11

Сообщение Hijin » 06.04.2019{, 17:26}

Goosr писал(а):
06.04.2019{, 11:24}
Я над собой смеюсь.
Я тоже над собою смеюсь так как в ступоре
Dryundel писал(а):
04.04.2019{, 09:55}
Ладно, будем считать это оплошностью.
Да это оплошность файл с одной платой не сохранил

Отправлено спустя 10 минут 29 секунд:
Dryundel писал(а):
04.04.2019{, 09:55}
Дело в том, что не всегда стремление избавиться от "лишних" переменных приводит к желаемому результату (уменьшению скетча).
Если бы это касалось не таких функций как и или то я возожно задумался но эти функции занимают биты а не байты

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Как такое может быть со скетчем

#12

Сообщение Dryundel » 06.04.2019{, 21:42}

Hijin писал(а):
06.04.2019{, 17:36}
Если бы это касалось не таких функций как и или то я возожно задумался но эти функции занимают биты а не байты
"ИЛИ" - это только предыдущий шаг в цепочке. Вы не думаете что надо всю цепочку прослеживать, которая у Вас ..."ИЛИ ИЛИ ИЛИ ..." . И вот вся эта гирлянда хвостом прицеляется к каждой из следующей операции которых несколько в параллели после этого последнего "ИЛИ".
Вот для наглядности всего одна строчка из вашего скетча. Знак || - это и есть Ваши "ИЛИ".

Код: Выделить всё

if (( (_gtv9) && (!(( (( (_MenuBlock_210459645_AMO_157376931) || (_MenuBlock_210459645_AMO_300698958) || (_MenuBlock_210459645_AMO_92522724) || (_MenuBlock_210459645_AMO_338840744) || (_MenuBlock_210459645_AMO_372251642) || (_MenuBlock_210459645_AMO_217018863) || (_MenuBlock_210459645_AMO_417780675) || (_MenuBlock_210459645_AMO_277138577) )) || (( (_MenuBlock_210459645_AMO_231783657) || (_MenuBlock_210459645_AMO_189032908) || (_MenuBlock_210459645_AMO_147578181) )) || (( (( (_MenuBlock_210459645_AMO_368959305) || (_MenuBlock_210459645_AMO_41584824) || (_MenuBlock_210459645_AMO_299965654) || (_MenuBlock_210459645_AMO_364690575) )) || (( (_MenuBlock_210459645_AMO_144902184) || (_MenuBlock_210459645_AMO_339535870) || (_MenuBlock_210459645_AMO_410858300) || (_MenuBlock_210459645_AMO_311545727) )) || (( (_MenuBlock_210459645_AMO_102395166) || (_MenuBlock_210459645_AMO_393907185) || (_MenuBlock_210459645_AMO_519699420) || (_MenuBlock_210459645_AMO_419861444) )) || (( (_MenuBlock_210459645_AMO_130744311) || (_MenuBlock_210459645_AMO_14186996) || (_MenuBlock_210459645_AMO_146234980) || (_MenuBlock_210459645_AMO_383126000) )) || (( (_MenuBlock_210459645_AMO_247453600) || (_MenuBlock_210459645_AMO_349539129) || (_MenuBlock_210459645_AMO_119104706) || (_MenuBlock_210459645_AMO_534549648) )) || (( (_MenuBlock_210459645_AMO_112101574) || (_MenuBlock_210459645_AMO_5824711) || (_MenuBlock_210459645_AMO_340366047) || (_MenuBlock_210459645_AMO_294491128) )) )) ))) )) {
_dispTempLength1 = ((_swi7)).length();
Вот так биты и складываются в байты.
Я же вам показал точку которая хоть немного может сократить размер скетча. Над ней еще один блок ИЛИ прицепив переменную к которому, можно еще слегка "сэкономить".
А вот булевая переменная, от которых Вы так тщательно избавились, это реально биты, ну точней 1байт. Казус в том, что указатель на переменную занимает в памяти минимум столько же места сколько и сама булевая переменная. Вот и посчитай.

Ладно, чего то я увлекся. Возможно зря.
Ведь без СЕНСЕЯ, все это пусой трёп. Правильно я понимаю? :)

Ответить

Вернуться в «Начинающим»