Arduino уходит в reboot посреди loop

Borland
Offline
Зарегистрирован: 17.05.2012

 Не понимаю причины

Такое ощущение что сбивается стек программы в loop, но вроде все стековые переменные избыточны

int smsposition;
void loop () {
 char MessageToSend[140];
 char Balance[60];
 char TestPhone[20];  // Array for the Phone string
 int i;
 
  
 char sms_text[100]; // array for the SMS text string
 Slot MemSlot;
  
  char key=0;
  MemSlot.length=12;
  MemSlot.style=0x03;
  strcpy(MemSlot.Title,"Free Memory");

  itoa(freeMemory(),MemSlot.Text,10);
  if(NeedToWork) {
      CheckSMSAtPosition(smsposition);NeedToWork=0;
   }

   if (Serial.available()) { // check if keyboard is pressed 
     key=Serial.read();
     switch(key) {
       case 's': InitialSetup();
            break;
       case 'r' : 
                CheckSMS();
                break;
       case 'd':
                DeleteAllSMS();         
            break;
     } //  Endof Switch
     
  Serial.write(key);
  Serial1.write(key);
  } // endof if available()     


  if(Serial1.available())  {   // Check if something is coming from GSM
    key=Serial1.read();
    if(!NeedToWork) 
     if(key!='\r') {   // Got Last key of the first line of the message
         *PUrgent++=key;
         *PUrgent='\0';
         if(strstr(UrgentMessage,"+CMTI: \"SM\",")){ // SMS Urgent Message is coming;
           NeedToWork=1;
           Serial.print("*");
           Serial1.readBytes(UrgentMessage,10);  // Flush input buffer in order to save SMS in GSM Sim card.
           smsposition=UrgentMessage[0]-48; //
           Serial.print("SMSPosition:");
           Serial.println(smsposition,DEC);
           Serial.println("Need    To Work");
           PUrgent=UrgentMessage;
         }
         else {
         if(strstr(UrgentMessage,"+CUSD: 0,")){  // Balance is comming
           SCRN.eraseScreen();
           Serial.print("*");
           Serial1.readBytes(UrgentMessage,20);
           strccpy(Balance,UrgentMessage,'\n');
           Serial.print("Balance");
           Serial.println(Balance);
           Serial.print(freeMemory(),DEC);
           AnyKey();
           Serial.println("Ned---------------------------------- To Work");
           PUrgent=UrgentMessage;
         }
       }//  end of else
     } else{
         PUrgent=UrgentMessage; while((key=Serial1.read())!=-1) // if key="\r"
            Serial.write(key);   
     }
   Serial.write(key);
 }
//SwitchRele();  
delay (2);  
}

 

Borland
Offline
Зарегистрирован: 17.05.2012

 ровно на фразе Serial.println("Ned---------------------------------- To Work");

*dest:<<<<Balance:74,92r ",64
source:>>>>"Balance:74,92r ",64
BalanceBalance:74,92r ",64
4720Ned-system startup

печатает слово Ned и дальше идет ребут.4720  свободная память "system startup" , уже подпрограмма setup Ардуины

Увеличение стековых переменных дает сдвиг в точке ребута, функция strccpy- самоделка, копирует строку в строку до символа.

ардуина прикреплена по Serial1 к GSM модулю и пытается обрабатывать входящие по Serial1 сообщения от модема , как то приход смс (первый ststr(UrgentMessage...) или ответа на USSD запрос баланса (второй ststr(UrgentMessage...)

 

 

Borland
Offline
Зарегистрирован: 17.05.2012

 Виноват, сам дурак strccpy имеет ошибку, и бьет по общей памяти loop видимо, можно стереть тему