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

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

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

Сообщение Hijin »

Делал прект меню капельного полива участка. Первоначально он состоял из
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 секунд:
видео с работой скетчей (все три скетча работают одинаково)
https://drive.google.com/open?id=1ZXIhf ... 6nZQWK6uP_
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Ingwar
Полковник
Сообщения: 1928
Зарегистрирован: 28 окт 2015, 22:47
Откуда: Ленобласть
Имя: Игорь
Поблагодарили: 2 раза

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

Сообщение Ingwar »

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

Отправлено спустя 45 минут 51 секунду:
Обманул, не string - char. Вообщем запустите IDE и посмотрите сколько определяется переменных и массивов...
Люди в своем большинстве живо интересуются всем на свете, за исключением того, что действительно стоит знать.
Аватара пользователя
Hijin
Лейтенант
Сообщения: 325
Зарегистрирован: 22 авг 2017, 11:08
Откуда: Винница
Имя: Юрий

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

Сообщение Hijin »

Дальнейшие єксперименты
В фале с 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
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
Dryundel
Полковник
Сообщения: 2473
Зарегистрирован: 22 май 2017, 23:15
Откуда: Ярославль
Имя: Андрей
Благодарил (а): 10 раз
Поблагодарили: 40 раз

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

Сообщение Dryundel »

Hijin писал(а): 02 апр 2019, 17:41 Дальнейшие єксперименты...................
Да не мучайтесь Вы. Приобретите Wemos D1 mini. По цене практически те же деньги что и Nano. 16MB памяти. Вам и на соседские грядки места под переменные хватит. Плюс еще Wi-Fi в нагрузку сделаете доп. управление со смартфона с красивенннннным меню. Да и процессор там пошустрей будет раз этак в 10 почти.
Аватара пользователя
Hijin
Лейтенант
Сообщения: 325
Зарегистрирован: 22 авг 2017, 11:08
Откуда: Винница
Имя: Юрий

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

Сообщение Hijin »

Так есть у меня ноде мцу Но ведь и там могут быть такие лажи но не так заметные из за большего количества памяти
здесь когда стараешся выжать по максимуму они сразу всплывают
Хотелось бы выслушать версию хоть одного из ГУРУ а самое лутшее от СЕНСЕЯ
Аватара пользователя
Goosr
Сержант
Сообщения: 184
Зарегистрирован: 07 июн 2016, 08:25
Откуда: Тольятти
Имя: Дмитрий

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

Сообщение Goosr »

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

Разглядел :smile171:
FLProg 6.3.1 - 7.3.4 - Linux
Аватара пользователя
Dryundel
Полковник
Сообщения: 2473
Зарегистрирован: 22 май 2017, 23:15
Откуда: Ярославль
Имя: Андрей
Благодарил (а): 10 раз
Поблагодарили: 40 раз

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

Сообщение Dryundel »

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

Разглядел :smile171:
А в чем проблема то? К чему такой сарказм? Почему бы не протестировать логику в Протеусе? Я бы еще понял, если бы речь шла про аналоговые величины, а в данном случае не вижу проблем.
aidar_i
Полковник
Сообщения: 3360
Зарегистрирован: 24 дек 2016, 16:55
Откуда: Уфа
Имя: Айдар
Благодарил (а): 14 раз
Поблагодарили: 100 раз
Контактная информация:

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

Сообщение aidar_i »

В проекте Вашем не разбирался, но сразу нашел ляп.
Не допускайте ошибки , когда создаете проект, тогда не будет
Hijin писал(а): 02 апр 2019, 17:41 Дальнейшие єксперименты.......
Открыл Ваш проект с одной платой, где Вы пишете , что поменяли интежер на байты. Вижу здесь не поменяли,[spoiler]
Снимок_2019_04_04_11_38_49_941.png
[/spoiler] поменял, ничего не изменилось, вытянул блок, а там под ним еще блок такой же.[spoiler]
Снимок_2019_04_04_11_39_01_572.png
[/spoiler]
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
Dryundel
Полковник
Сообщения: 2473
Зарегистрирован: 22 май 2017, 23:15
Откуда: Ярославль
Имя: Андрей
Благодарил (а): 10 раз
Поблагодарили: 40 раз

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

Сообщение Dryundel »

Hijin писал(а): 02 апр 2019, 18:48 Хотелось бы выслушать версию хоть одного из ГУРУ а самое лутшее от СЕНСЕЯ
Вам СЕНСЕЙ нужен для того, что бы указзать на то, что в файле с одной платой вы забыли удалить вторую плату? :)
Ладно, будем считать это оплошностью.
Hijin писал(а): 01 апр 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
Количество операций сокращается. Отсюда и сокращение скетча.
Попробуйте в вашей схеме заменить всего одну логическую связь на переменную (добавить переменную) вот здесь:
[spoiler]
2019-04-04_092415.jpg
[/spoiler]
и получите "экономию" в 2%
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
Goosr
Сержант
Сообщения: 184
Зарегистрирован: 07 июн 2016, 08:25
Откуда: Тольятти
Имя: Дмитрий

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

Сообщение Goosr »

Dryundel писал(а): 04 апр 2019, 08:35 А в чем проблема то? К чему такой сарказм? Почему бы не протестировать логику в Протеусе? Я бы еще понял, если бы речь шла про аналоговые величины, а в данном случае не вижу проблем.
Я над собой смеюсь. :smile44:
FLProg 6.3.1 - 7.3.4 - Linux
Аватара пользователя
Hijin
Лейтенант
Сообщения: 325
Зарегистрирован: 22 авг 2017, 11:08
Откуда: Винница
Имя: Юрий

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

Сообщение Hijin »

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

Отправлено спустя 10 минут 29 секунд:
Dryundel писал(а): 04 апр 2019, 09:55 Дело в том, что не всегда стремление избавиться от "лишних" переменных приводит к желаемому результату (уменьшению скетча).
Если бы это касалось не таких функций как и или то я возожно задумался но эти функции занимают биты а не байты
Аватара пользователя
Dryundel
Полковник
Сообщения: 2473
Зарегистрирован: 22 май 2017, 23:15
Откуда: Ярославль
Имя: Андрей
Благодарил (а): 10 раз
Поблагодарили: 40 раз

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

Сообщение Dryundel »

Hijin писал(а): 06 апр 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байт. Казус в том, что указатель на переменную занимает в памяти минимум столько же места сколько и сама булевая переменная. Вот и посчитай.

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

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

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя