Arduino уходит в reboot посреди loop
- Войдите на сайт для отправки комментариев
Пт, 28/09/2012 - 14:24
Не понимаю причины
Такое ощущение что сбивается стек программы в 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);
}
ровно на фразе 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...)
Виноват, сам дурак strccpy имеет ошибку, и бьет по общей памяти loop видимо, можно стереть тему