IDE 1.6.0 problemi con sscanf...

Ciao, sono passato al nuovo ide 1.6 importando un progetto fatto con ide 1.0.5 e che funzionava perfettamente.

Se carico questo sketc con il vecchio ide funziona, mentre con il nuovo mi da errore e non trovo una soluzione.

In pratica nel codice che vi ho postato lo ho snellito parecchio, il progetto prende un file da SD, lo apre e legge i parametri da passare alla scheda ethernet, come ip, subnet, gw ecc…
Ogni riga ha un parametro.

Codice:

#include <Time.h>
#include <SPI.h>
#include <Ethernet.h>
#include <EthernetUdp.h>
#include <SD.h>
#include <ctype.h>
#define REQ_BUF_SZ   60
byte myMac[6] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte myIP[4] = { 192, 168, 2, 12 };
byte myNM[4] = { 255, 255, 255, 0 };
byte myGW[4] = { 192, 168, 2, 2 };
byte myDNS[4] = { 192, 168, 2, 2 };
byte myNTP[4] = { 192, 168, 2, 10 };
byte mySMTP[4] = { 192, 168, 2, 151 };

char netBuffer[200];



void setup() {

 File fh = SD.open("network.cfg",FILE_READ);
  //char netBuffer[32];
  
  if(!fh)
  {
    Serial.println("network.cfg open fail");
    return;    
  }

  int chPos = 0;
  int lineNo = 0;
  
  while(fh.available())
  {
    char ch = fh.read();
    if(ch == '\r') {
      chPos = 0;

      switch(lineNo) {
        case 0:sscanf(netBuffer,"%2x:%2x:%2x:%2x:%2x:%2x",&myMac[0],&myMac[1],&myMac[2],&myMac[3],&myMac[4],&myMac[5]); break;
        case 1:sscanf(netBuffer,"%u.%u.%u.%u",&myIP[0],&myIP[1],&myIP[2],&myIP[3]); break;
        case 2:sscanf(netBuffer,"%u.%u.%u.%u",&myNM[0],&myNM[1],&myNM[2],&myNM[3]); break;
        case 3:sscanf(netBuffer,"%u.%u.%u.%u",&myGW[0],&myGW[1],&myGW[2],&myGW[3]); break;
        case 4:sscanf(netBuffer,"%u.%u.%u.%u",&myDNS[0],&myDNS[1],&myDNS[2],&myDNS[3]); break;
        case 5:sscanf(netBuffer,"%u.%u.%u.%u",&myNTP[0],&myNTP[1],&myNTP[2],&myNTP[3]); break;
        case 6:sscanf(netBuffer,"%u.%u.%u.%u",&mySMTP[0],&mySMTP[1],&mySMTP[2],&mySMTP[3]); break;
      }

//      Serial.println(netBuffer);
      lineNo++;
    }
    else if(ch == '\n') {
      // do nothing
    }
    else if(chPos < 31) {
      netBuffer[chPos] = ch;
       chPos++;
      netBuffer[chPos] = 0;
    }
  }
  
  fh.close();

  int x;
  
  Serial.print("\r\nmac ");
  for(x=0;x<6;x++) {
    Serial.print(myMac[x],HEX);
    if(x<5) Serial.print(":");
  }

  Serial.print("\r\nip ");
  for(x=0;x<4;x++) {
    Serial.print(myIP[x],DEC);
    if(x<3) Serial.print(".");
  }

  Serial.print("\r\nnetmask ");
  for(x=0;x<4;x++) {
    Serial.print(myNM[x],DEC);
    if(x<3) Serial.print(".");
  }

  Serial.print("\r\ngateway ");
  for(x=0;x<4;x++) {
    Serial.print(myGW[x],DEC);
    if(x<3) Serial.print(".");
  }

  Serial.print("\r\ndns ");
  for(x=0;x<4;x++) {
    Serial.print(myDNS[x],DEC);
    if(x<3) Serial.print(".");
  }

  Serial.print("\r\nntp ");
  for(x=0;x<4;x++) {
    Serial.print(myNTP[x],DEC);
    if(x<3) Serial.print(".");
  }
  
  Serial.print("\r\nsmtp ");
  for(x=0;x<4;x++) {
    Serial.print(mySMTP[x],DEC);
    if(x<3) Serial.print(".");
  }

  
  

}

void loop() {
  // put your main code here, to run repeatedly:

}

Errore dato da IDE 1.6.0:

sketch_feb19a.ino: In function ‘void setup()’:
sketch_feb19a.ino:112:1: error: unable to find a register to spill in class ‘NO_REGS’
sketch_feb19a.ino:112:1: error: this is the insn:
(insn 259 256 262 12 (set (mem:QI (post_dec:HI (reg/f:HI 32 SP_L)) [0 S1 A8])
(subreg:QI (reg/f:HI 298) 1)) sketch_feb19a.ino:45 1 {pushqi1}
(expr_list:REG_ARGS_SIZE (const_int 1 [0x1])
(nil)))
sketch_feb19a.ino:112: confused by earlier errors, bailing out
Errore durante la compilazione

se commento e lascio solo un CASE funziona e compila, come scommento il secondo case con SSCANF allora da errore, e il problema non è il CASE ma il comando SSCANF…

Se riuscite a dirmi come fare ve ne sono grato.

Secondo me il compilatore vecchio non si accorgeva del tuo errore:

sscanf(netBuffer,"%u.%u.%u.%u",&myIP[0],&myIP[1],&myIP[2],&myIP[3]);

Per me non ha senso l'uso di quella & Deve essere semplicemente:

sscanf(netBuffer,"%u.%u.%u.%u",myIP[0],myIP[1],myIP[2],myIP[3]);

Grazzzzie

Stavo diventando scemo. Funziona.

Infatti, perché i vari elementi del vettore myIP che gli passi sono argomenti aggiuntivi che sscanf usa per elaborare le stringhe. Non ha senso passarglieli come indirizzi dato che il prototipo della funzione vuole un dato.