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 видимо, можно стереть тему