Informazione su codice

Buongiorno,

leggendo sul forum mi sono imbattuto in uno sketch con sensori PIR, e nel codice ho trovato questa riga:

int pirSegnal2= (pirSegnal == HIGH)? LOW:HIGH;

Mi sapete indicare dove posso studiare il suo significato o almeno come la psso cercare?

Saluti e grazie per la pazienza :slight_smile:

Espressione condizionale ternaria

Che però in questo caso mi sembra esagerata, se si deve solo invertire un livello logico basta una negazione logica:

int pirSegnal2 = !pirSegnal;

L'altra esagerazione è scomodare un int per contenere solo 1 o 0, basta un boolean o byte che dir si voglia

fabpolli: L'altra esagerazione è scomodare un int per contenere solo 1 o 0, basta un boolean o byte che dir si voglia

Vedo spesso se non sempre usare int per cotenere solo valori 1 o 0.

Kestrel82:
Vedo spesso se non sempre usare int per cotenere solo valori 1 o 0.

Il fatto che tu lo veda spesso non significa che sia una cosa corretta, anzi … :smiling_imp:
… su una MCU con in tutto 2 kBytes di SRAM, sprecare bytes è assolutamnete da sconsigliare !

Guglielmo

gpb01: Il fatto che tu lo veda spesso non significa che sia una cosa corretta, anzi ... :smiling_imp: ... su una MCU con in tutto 2 kBytes di SRAM, sprecare bytes è assolutamnete da sconigliare !

Guglielmo

Concordo assolutamente con te. Non volevo dire che è corretto. Era solo una constatazione!

Io grazie ai vs. consigli ne farò tesoro!

gpb01:
… è assolutamnete da sconigliare !
Guglielmo

Anche io di solito lo SCONIGLIO !! :grin: :grin: :grin:

nid69ita: Anche io di solito lo SCONIGLIO !! :grin: :grin: :grin:

:D :D :D ... grazie, corretto ;)

Guglielmo

Ma quando dichiariamo una variabile per contenere LOW & HIGH va bene il byte o in questo caso serve int?

Saluti

Assolutamente basta il byte Il byte accetta un valore da 0 a 255 ed occupa appunto un byte, su Arduino un int accetta da -32768 a +32767 ed occupa 2 byte (16 bit), con spreco di un byte LOW in realtà è il valore 0 e HIGH il valore 1, quindi basta una variabile di tipo byte

Io sconiglierei anche quelli che fanno le librerie di andarci pesante.

Approp, un bool non consuma solo un bit?

No purtroppo no. L'unità minore di allocazione è il byte.

Bisognerebbe poi anche fare una prova con un programmino Arduino e verificare la dimensione occupata da bool, perchè il bool deriva da _Bool e in standard C99 (stdbool.h) deve solo garantire una dimensione adeguata per contenere 0 e 1 ma non per forza deve essere la minore, quindi dipende dal compilatore/produttore del compilatore come lo implementa. In pratica su alcuni compilatori un _Bool potrebbe anche occupare un int16 quindi 2 byte. Su Arduino basta fare una prova,

void setup()
{ Serial.begin(9600);
  Serial.println(sizeof(bool));
}
void loop(){}

P.S. il reference di Arduino dice un byte "Each boolean variable occupies one byte of memory"

Volendo chi fa una libreria e desidera ottimizzarla puó usare un singolo byte per memorizzare fino ad 8 boolean

Io a volte mi faccio una struct da un bits ;) Poi Ogni bit li nomino con un #define ;) ;)