Warning durante la verifica sketch

Buongiorno a tutti, durante la verifica dello sketch l'IDE mi da un warning che però non pregiudica la compilazione ed il funzionamento dello sketch una volta caricato, sono comunque intenzionato a risolvere la questione ma non riesco a trovare una soluzione (probabilmente banale) anche cercando in giro per la rete, voi sapreste indirizzarmi?

Ho capito che ha a che fare con la SoftwareSerial, ma non ne vengo comunque a capo.

Sketch:

// SoftwareSerial - Version: Latest
#include <SoftwareSerial.h>

int txPin = 2;                            // BT TX pin
int rxPin = 3;                            // BT RX pin
int sx = 4;                               // 1st relay pin
int dx = 5;                               // 2nd realy pin
int rt = 6;                               // 3rd relay pin
String message;                           // input string from Android
SoftwareSerial bt(rxPin, txPin);          // BT serial

void setup() {
  bt.begin(9600);
  pinMode(sx, OUTPUT);                  // set relay pins to OUTPUT
  pinMode(dx, OUTPUT);
  pinMode(rt, OUTPUT);
  digitalWrite(sx, LOW);                // set pins state to LOW (relays OFF)
  digitalWrite(dx, LOW);
  digitalWrite(rt, LOW);
}

void loop() {
  while (bt.available()) {
    message += char(bt.read());
  }

  if (!bt.available()) {

    if (message == "check") {            // Android app is set to send a check message at start
      message = "";                      //clear the data
      statusCheck();
    }
    if (message == "sxON") {
      digitalWrite(sx, HIGH);
      message = "";
      statusCheck();
    }
    else if (message == "sxOFF") {
      digitalWrite(sx, LOW);
      message = "";
      statusCheck();
    }
    else if (message == "dxON") {
      digitalWrite(dx, HIGH);
      message = "";
      statusCheck();
    }
    else if (message == "dxOFF") {
      digitalWrite(dx, LOW);
      message = "";
      statusCheck();
    }
    else if (message == "rtON") {
      digitalWrite(rt, HIGH);
      message = "";
      statusCheck();
    }
    else if (message == "rtOFF") {
      digitalWrite(rt, LOW);
      message = "";
      statusCheck();
    }
  }
}
//Funzioni

void statusCheck() {                 // this is the function that checks pin's state and print it over the BT serial
  bt.print(digitalRead(sx));
  bt.print("|");
  bt.print(digitalRead(dx));
  bt.print("|");
  bt.print(digitalRead(rt));
}

Warning dell'IDE:

In file included from /Applications/Arduino.app/Contents/Java/hardware/arduino/avr/variants/eightanaloginputs/pins_arduino.h:23:0,
                 from /Applications/Arduino.app/Contents/Java/hardware/arduino/avr/cores/arduino/Arduino.h:257,
                 from /Applications/Arduino.app/Contents/Java/hardware/arduino/avr/libraries/SoftwareSerial/src/SoftwareSerial.cpp:43:
/Applications/Arduino.app/Contents/Java/hardware/arduino/avr/libraries/SoftwareSerial/src/SoftwareSerial.cpp: In member function 'void SoftwareSerial::begin(long int)':
/Applications/Arduino.app/Contents/Java/hardware/arduino/avr/variants/eightanaloginputs/../standard/pins_arduino.h:74:39: warning: comparison is always true due to limited range of data type [-Wtype-limits]
 #define digitalPinToPCICR(p)    (((p) >= 0 && (p) <= 21) ? (&PCICR) : ((uint8_t *)0))
                                       ^
/Applications/Arduino.app/Contents/Java/hardware/arduino/avr/libraries/SoftwareSerial/src/SoftwareSerial.cpp:319:7: note: in expansion of macro 'digitalPinToPCICR'
   if (digitalPinToPCICR(_receivePin)) {

       ^
/Applications/Arduino.app/Contents/Java/hardware/arduino/avr/variants/eightanaloginputs/../standard/pins_arduino.h:74:39: warning: comparison is always true due to limited range of data type [-Wtype-limits]
 #define digitalPinToPCICR(p)    (((p) >= 0 && (p) <= 21) ? (&PCICR) : ((uint8_t *)0))
                                       ^
/Applications/Arduino.app/Contents/Java/hardware/arduino/avr/libraries/SoftwareSerial/src/SoftwareSerial.cpp:360:6: note: in expansion of macro 'digitalPinToPCICR'
     *digitalPinToPCICR(_receivePin) |= _BV(digitalPinToPCICRbit(_receivePin));

      ^
Archiving built core (caching) in: /var/folders/1r/0f51_dtn4z53q4tb2_vyf2_r0000gn/T/arduino_cache_464878/core/core_arduino_avr_nano_cpu_atmega328_51f02b7210b938436b779d1c032618e1.a
Lo sketch usa 4574 byte (14%) dello spazio disponibile per i programmi. Il massimo è 30720 byte.
Le variabili globali usano 184 byte (8%) di memoria dinamica, lasciando altri 1864 byte liberi per le variabili locali. Il massimo è 2048 byte.

Sono warning della libreria, non del tuo codice, e per di più totalmente innocui. Direi che puoi tranquillamente ignorarli.

Ok grazie!

(ma se volessi indagare sul perchè me li segnala? :grin:)

Apriti il file SoftwareSerial.cpp in un editor, vai alle righe segnalate nei warning e... Buon divertimento :).

il "perchè" te lo dice il warning stesso...perchè ( p ) è considerato come unsigned e quindi la verifica ( p ) >= 0 ritorna sempre "true"....gli altri sono conseguenze di questo.

io ho fato una prova...alla prima compilazione ho il tuo stesso warning...alla seconda compilazione no...e qua non so il perchè.

ho provato per sfizio a modificare la linea incriminata da:

#define digitalPinToPCICR(p)    (((p) >= 0 && (p) <= 21) ? (&PCICR) : ((uint8_t *)0))

a

#define digitalPinToPCICR(p)    (((((p) == 0) || (p) > 0) && (p) <= 21) ? (&PCICR) : ((uint8_t *)0))

ed il warning non appare alla prima compilazione.
questa riga te la devi cercare nel file pins_arduino.h presente nel percorso :

/Applications/Arduino.app/Contents/Java/hardware/arduino/avr/variants/eightanaloginputs/../standard/pins_arduino.h

Se hai abilitato l'opzione per fare cache del core, questo viene compilato solo la prima volta, per cui eventuali warning poi non li vedi più.

Se hai abilitato l'opzione per fare cache del core, questo viene compilato solo la prima volta, per cui eventuali warning poi non li vedi più.

ahhhh...ora è chiaro...thanks.

... opzione da tenere, almeno attualmente, rigorosamente DISATTIVATA ... più volte ha creato notevoli problemi (... ci sono anche dei vecchi post di Astro in merito).

Guglielmo

Io l'ho avuta abilitata (involontariamente) fin da quando è stata introdotta, mai avuto problemi. Su Linux però.

gpb01:
... opzione da tenere, almeno attualmente, rigorosamente DISATTIVATA ... più volte ha creato notevoli problemi (... ci sono anche dei vecchi post di Astro in merito).

Guglielmo

non lo sapevo
grazie

di default è abilitata però

Patrick_M:
di default è abilitata però

Vero ... difatti ho scritto da tenere disattivata, perché, effettivamente, di base la trovi attivata :wink:

Ripeto, se si fanno un po' di ricerche, se ne è parlato più volte :slight_smile:

Guglielmo

gpb01:
Ripeto, se si fanno un po' di ricerche, se ne è parlato più volte :slight_smile:

Guglielmo

hai ragione ma per fare ricerche bisogna essere a conoscenza del problema. A me personalmente fino ad ora non ha mai dato problemi quindi non ci avrei mai pensato. Ora che lo sò ... indago :wink:

Prova a leggere, ad esempio, QUI :wink:

Guglielmo