Оптимизация кода
- Войдите на сайт для отправки комментариев
Пнд, 25/01/2016 - 21:36
Написал программу и выяснилось что места катастрафически не хватает.
Переход на мегу уже не получится, если только есть меги в формфакоре уно. иначе все перепаивать придется.
Так что придется оптимизировать. Почитал про оптимизацию, пока для меня сложновато. Почти все int заменил на byte - освободил довольно много места, но всеравно на полную программу не хватает.
Вопрос, в общим, пока вот в чем: в программе очень много кода такого типа:
if (time_h == 16 && time_min == 0 && time_sec < 10 && CXEMA_poliva == 1) { polit_07(); chas_poliva=16; minuta_poliva=00; } if (time_h == 16 && time_min == 15 && time_sec < 10 && CXEMA_poliva == 1) { polit_07(); chas_poliva=16; minuta_poliva=15; } if (time_h == 16 && time_min == 30 && time_sec < 10 && CXEMA_poliva == 1) { polit_07(); chas_poliva=16; minuta_poliva=30; } if (time_h == 16 && time_min == 45 && time_sec < 10 && CXEMA_poliva == 1) { polit_07(); chas_poliva=16; minuta_poliva=45; }
Можно ли его как то оптимизировать? (все эти переменные задаются byte в начале)
Написал программу и выяснилось что места катастрафически не хватает.
Переход на мегу уже не получится, если только есть меги в формфакоре уно. иначе все перепаивать придется.
Так что придется оптимизировать. Почитал про оптимизацию, пока для меня сложновато. Почти все int заменил на byte - освободил довольно много места, но всеравно на полную программу не хватает.
Вопрос, в общим, пока вот в чем: в программе очень много кода такого типа:
Можно ли его как то оптимизировать? (все эти переменные задаются byte в начале)
если это полив то
1) нужны ли тут секунды
2) если секунды не нужны то можно перевести все к минутам и уменьшить кол-во сравненийм
да полив, вродибы и не нужны, добавил чтобы случайно не проскочило из за сбоя какогонибудь
впринципе попробую но всеравно не влезет
секунды ваще из кода исключи и время в минуты и сравнивай все в минутах ......все равно не влезет?
попробовал - получается секунды только 3% занимают
в общим не влезет
пришли код ......мож помогу чем
давай на мыло отправлю
срисовал?
отправил
Вот пишу, пишу что памяти маловато и для ряда процов её нарастить можно, ну просто легко .. а мне в ответ "нафиг не надо" .. :) (эт я так, побрюзжать слегка)
Так а КАКОЙ памяти в вашем коде "не хватает", уточнить - можете?
Той что жирным:
Sketch uses 28 854 bytes (89%) of program storage space. Maximum is 32 256 bytes.
Global variables use 1 357 bytes (66%) of dynamic memory, leaving 691 bytes for local variables. Maximum is 2 048 bytes.
ахренеть код
мужик переходи на мегу ...не засунешь ты его в уну не оптимизируешь ты его на столько
пичалька =(
Написал программу и выяснилось что места катастрафически не хватает.
Переход на мегу уже не получится, если только есть меги в формфакоре уно. иначе все перепаивать придется.
Так что придется оптимизировать. Почитал про оптимизацию, пока для меня сложновато. Почти все int заменил на byte - освободил довольно много места, но всеравно на полную программу не хватает.
Вопрос, в общим, пока вот в чем: в программе очень много кода такого типа:
Можно ли его как то оптимизировать? (все эти переменные задаются byte в начале)
А вообще, следовало бы сначала ответить на вопрос из поста 11.
а gsm зачем там?
Это контроллер туманообразующей установки.
а жсм нужен для:
1. узнать что электричества нет и туман не работает
2. включать выключать, менять алгоритм полива
3. узнавать состояние системы
сильный код
я еще вот это писал
Serial1.println("AT+CSCS=\"GSM\""); // выбираем алфавит "GSM"
....чет не работало не помню точьно .....мож пригодится ......сам допер
Скетч у меня не влезает а оперативы вроде тютя в тютю)
че то на первый взгляд вроде по размеру не меньше.
а про такой вариант я чето даже не подумал, так проще получатеся, спасибо
Serial1.println("AT+CSCS=\"GSM\""); // выбираем алфавит "GSM"
почитал немного, полезная штука конечно, как раз у меня проблемы с запросом баланса на теле2 - на латинице не хотят присылать, но пока для меня сложновато))
ща про баланс напишу ...тоже теле...седня замутил....вроде работает...тока я баланс на андроид вывожу....но думаю пригодиться ...щас покурю....
а ты откенда? вдруг сосед)))))))))))))))))
Спасибо, с размером разберусь, дальше буду с балансом резбераться!
из Владимира
тут Serial1 - gsm а Serial2 - блютуф
удачи
Спасибо)
}
вот тебе еще в помощь...не зря ведь я трахался этой хренью
Спасибо!
можно так писать
Serial.println("AT+GMM")
вместо
Serial.print("AT+GMM\r")
вот те код для баланса и общий подход не примере комады1 #st? - это отправляем как запрос смс- кой
# - обязательна остальные 3 - произаольно
ништяк)
вот это вот интересно:
где можно почитать как это используют?
что именно?
символьный массив всегда +1
особенность массива char
в отличии к примеру от int или byte там не надо
просто вставляй код и радуйся ...там весь расклад
ну может я не правильно понял.
я для переменных использую byte в осносном, переменные обычно с двумя цифрами, поэтому большая часть не используется
а как я понял
char
incmd[2];
объявляет переменную с 2мя цифрами, что может помочь с уменьшением размера скетча.
2 не хватит минимум 3
# -обязательна рапознает команду по нему .....код коментарии читай
1 (к примеру) - символ команды
/0 - спец символ конца строки ставится автоматически в массив типа CHAR
команда с смс будет выглядить как #1
Скетч у меня не влезает а оперативы вроде тютя в тютю)
че то на первый взгляд вроде по размеру не меньше.
Смысл в том, что не каждая строка меняется на такую конструкцию, а ВСЕ СТРОКИ заменяются едниой конструкцией из 6 строк.
Отказ от DallasTemperature подарит 1-1,5К.
Отказ от Serial, и wiring в целом подарит под 30- 50% .. :)
Отказ от Serial, и wiring в целом подарит под 30- 50% .. :)
Это из разряда мечт.))) А библиотека только для блезиру нужна.
А как кстати безбольно похоронить сериал, в варианте ТС?
В общем непостижимым для меня образом уместил таки программу!
Но прям в притык:
В связи с чем у меня другой вопрос:
Не начнут ли поялвяться глюки из за того что память заполненна под завязку?
Не начнут ли поялвяться глюки из за того что память заполненна под завязку?
Сам себе отвечу - начнут)))
Перестали выполнятся все смс команды.
Так что первоначальный вопрос еще в силе.
Отказ от DallasTemperature подарит 1-1,5К.
Это библиотека?
для влажности и температуры я использую stDHT.h
А как кстати безбольно похоронить сериал, в варианте ТС?
Тоже интересно)
Отказ от DallasTemperature подарит 1-1,5К.
Это библиотека?
для влажности и температуры я использую stDHT.h
Показалось, что там запрос для DallasTemperature.
По уму, заполненный флэш никак влиять не должен на программу. Скорее ищите в ОЗУ.
И пытаться ваши сериалы группировать и выводить в общую функцию.
#include <Time.h> //время
А это за шо отвечает?
с смс получилось?
Сейчас вот такая ситуация:
смс команды не рабоатают
если закоменчиваю часть такого кода:
до уровня заполненности памяти ге то 80%, то все работает хорошо
#include <Time.h> //время
А это за шо отвечает?
с смс получилось?
это библиотека времени, я чет хз за что она точно отвечает но без нее время у меня не аботает, модуль 1307 вроде. или 2307 или че то типа того
С смс пока не пробовал, руки не дошли
вот тут еще покумекал
а вместо
а вот так полный аналог твоего
if(CXEMA_poliva) { lcd.setCursor(9,0); lcd.print("CXEMA." + String(CXEMA_poliva)); } else { lcd.setCursor(9,0); lcd.print("-------"); }