Pages: [1]   Go Down
Author Topic: Strano problema con uno sketch  (Read 425 times)
0 Members and 1 Guest are viewing this topic.
Catania
Offline Offline
Jr. Member
**
Karma: 0
Posts: 54
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Salve ragazzi non riesco a capire perché ho un comportamento ciclico all'interno della funzione Setup() nelle reference Arduino leggo che viene eseguita solo una volta all'avvio o al reset di una piattaforma arduino.


Code:
#include "SPI.h"
#include "Ethernet.h"
#include "SD.h"
#include "WebServer.h"

#define TRUE 1
#define FALSE 0
#define MAX_POST_PARAM_SIZE 16
#define MAX_TAG_SIZE 16
#define MAX_LINE_HTML_FILE 200

char name[MAX_POST_PARAM_SIZE], value[MAX_POST_PARAM_SIZE];

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192, 168, 0, 101);


WebServer webserver("",80);
File webPage;

void loadPageStructure(File webPage,char **Tag){
  
  /*char c;
  int i=0,j=0;
  
  while((c=webPage.read())!=-1){
    
   if(c=='<'){
     Tag[i][j++]=c;
    }else if(c!='>'&&j>0){
     Tag[i][j++]=c;
    }else if(c=='>'){
     Tag[i][j]='>';
     i++;
     j=0;
    }
  }*/

}

/*void updateState(boolean s){
 
 if(s==TRUE){
  
 }else if(s==FALSE){
 
 }
}*/

void Start(WebServer &server, WebServer::ConnectionType type, char *, bool){

  server.httpSuccess();

  if (type != WebServer::HEAD) {
    webPage=SD.open("INDEX~1.HTM");
    char msg[1000];
    
    char c;
    while((c=webPage.read())!=-1){
     server.print(c);
    }
    
    server.readPOSTparam(name,MAX_POST_PARAM_SIZE,value,MAX_POST_PARAM_SIZE);
    webPage.close();
    
    /*if(strcmp(value,"18051991"))
     updateState(TRUE);
    else
     updateState(FALSE);*/
  }
}

void setup(){
 pinMode(10, OUTPUT);
 Serial.begin(9600);
 
 if(!SD.begin(4)){
  Serial.print("SD inizialization failed!");
  return;
 }
 Serial.print("SD inizialization done!");
 
 if (!SD.exists("INDEX~1.HTM")){
   Serial.print("The file not exist");
   return;
 }
 
 char **Tag;
 Tag=(char**)malloc(MAX_LINE_HTML_FILE*sizeof(char*));
 for(int i=0;i<MAX_LINE_HTML_FILE;i++){
  Tag[i]=(char*)malloc(MAX_TAG_SIZE*sizeof(char));
 }
 
 webPage=SD.open("INDEX~1.HTM");
 loadPageStructure(webPage,Tag);
 webPage.close();
 
 Serial.print("fine e chiusa");
 
 /*Assegno ip all'interfaccia e configuro webduino*/
 Ethernet.begin(mac,ip);
 webserver.setDefaultCommand(&Start);
 webserver.addCommand("index.html", &Start);
 webserver.begin();
 
 
}
  

void loop(){
   webserver.processConnection();
}




L'output nel monitor seriale è il seguente:




* Schermata 2013-03-03 alle 16.51.27.png (36.62 KB, 561x321 - viewed 10 times.)
Logged

Selvazzano Dentro - Padova
Offline Offline
God Member
*****
Karma: 28
Posts: 932
"Chi sa fa, chi non sa insegna"
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

La routine di setup viene eseguita più volte perché Arduino si resetta!

Metti altri Serial.print dopo "fine e chiusa" per vedere dove c'è il crash
Logged

Catania
Offline Offline
Jr. Member
**
Karma: 0
Posts: 54
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ah ecco perché!

Mi bastava sapere questo! Grazie mille!
Ad es. se c'è un "segmentation fault" arduino va in crash si resetta e riesegue setup!
Logged

Catania
Offline Offline
Jr. Member
**
Karma: 0
Posts: 54
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

è quando uso i metodi:

Code:
webPage.read();

o anche

Code:
webPage.available();

cosa può essere?
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 313
Posts: 21624
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Potrebbe essere l'esaurimento della memoria RAM. Carichi diverse librerie alquanto pesotte in termini di occupazione di risorse.
Logged


BZ (I)
Offline Offline
Brattain Member
*****
Karma: 234
Posts: 20214
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quale Arduino stai usando?
Prova con un Arduino MEGA che ha piú RAm.
Ciao Uwe
Logged

Catania
Offline Offline
Jr. Member
**
Karma: 0
Posts: 54
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Uso Arduino uno! Purtroppo non ho un mega smiley-sad
Arduino uno a 2 kb di static ram e basta?

ho usato questo metodo:

Code:
int freeRam () {
  extern int __heap_start, *__brkval;
  int v;
  return (int) &v - (__brkval == 0 ? (int) &__heap_start : (int) __brkval);
 }

mi torna 48 byte quando non chiamo la funzione... quindi credo sia proprio la RAM insufficiente!
« Last Edit: March 04, 2013, 03:38:06 am by nunziox » Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 313
Posts: 21624
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Uso Arduino uno! Purtroppo non ho un mega smiley-sad
Arduino uno a 2 kb di static ram è basta?
Esattamente.

Quote
mi torna 48 byte quando non chiamo la funzione... quindi credo sia proprio la RAM insufficiente!
Mi sa di sì...  smiley-sweat
Logged


Pages: [1]   Go Up
Jump to: