Оптимизировать кусочек кода

rapidshe
Offline
Зарегистрирован: 31.12.2015

подскажите пожалуйста, как можно оптимизировать кусочек кода. 

когда вызывается его сработка, формируется только часть строки...

void sendOtvet(){
if (needSendOtvet && CanSend){
   needSendOtvet = false;
   CanSend = false;
   sms = F("Ararm "); 
   if (AlarmOnOff==true)  sms += F("+"); 
   if (AlarmOnOff==false)  sms += F("-"); 
   sms += '\n';   
   for(byte i = 0; i <= numPins -1; i++) { //состояние реле
      sms += (i+1);
      if (PinStatus[i]==ON) sms += F("+"); 
      else sms += F("-");
      }
   sms += '\n';   
   if (TkritFlag) sms+=F("TKrit+"); 
   if (TkritFlag==false) sms+=F("TKrit-"); 
   sms += F("("); 
   sms += TkritMin; 
   sms += F(";"); 
   sms += TkritMax; 
   sms += F(")"); 
   sms += '\n';
   sms += F("T ");
   sms += Temp[0];
   sms += (char)176;
   sms += F("C");
   sms += '\n';
   sms += F("Bal "); sms += balance; sms += F("RUB"); 
   
   monport.println(sms);
   smssend();
   }
}

в монитор прилетает (да и в ГСМ модуль только часть)

Ararm -
1+2-3-
TKrit-

скетч вроде бы не большой.... 

Скетч использует 17 286 байт (53%) памяти устройства. Всего доступно 32 256 байт.
Глобальные переменные используют 994 байт (48%) динамической памяти, оставляя 1 054 байт для локальных переменных. Максимум: 2 048 байт.
andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Для начала следует озвучить критерий оптимизации.

И еще (для справки): оптимизировать имеет смысл только работающий код. Не работающий (неправильно работающий) код оптимизировать совершенно бесполезно.

Так что уж определитесь, Вы нуждаетесь в оптимизации кода или в его исправлении?

PS. И еще: для того, чтобы исправлять код, необходимо во-первых, иметь его полностью, в а во-вторых, знать, что он должен делать.

rapidshe
Offline
Зарегистрирован: 31.12.2015

у меня одна из версий что такой глюк может происходить от того, что во время работы скетча сильно забивается глобальная память...

но из других функций более объемные тексты выводятся.

все циклы проверил на предмет ссылания на несуществующие переменные. (заметил что именно в циклах при невнимательности рождается неадекватная работа скетча. например когда сошлешься на val[3], а объявлены только val[0],val[1] и val[2])

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Вот как раз объявления переменных то Вы привести и забыли.

Опять же, если "сильно забивается память", то это в принципе не отслеживается по небольшому фрагменту.