da
xyz » 26 feb 2018, 15:07
lucaking ha scritto:...
Oppure nel caso della nomenclatura dei pin convenisse addirittura attribuire il numero del pin definendo una macro , per esempio:
- Codice: Seleziona tutto
#define led 13
piuttosto che
- Codice: Seleziona tutto
int led = 13;
...
Gli esempi presenti nel IDE di Arduino non sono scritti bene, tra le critiche che si possono fare è appunto come vengono specificati i pin del microcontrollore utilizzati nel codice.
Il linguaggio di programmazione utilizzato dal IDE di Arduino è un sottoinsieme del C/C++, quindi valgono le regole basi di questi linguaggi.
In C di solito le costanti sono definite con delle macro, espanse poi dal preprocessore prima di avviare la vera compilazione, ad esempio (io uso la notazione delle costanti in maiuscolo):
- Codice: Seleziona tutto
#define PIN_LED 13
in questo modo non viene dichiarata nessuna variabile nella memoria RAM e ogni volta che viene usata il compilatore decide quale rappresentazione interna usare o in RAM o nei registri.
L'uso di dichiarare e istanziare una variabile nella RAM in questo modo:
- Codice: Seleziona tutto
int pin_led = 13;
non si tratta di nessuna costante (il nome non è maiuscolo) ma viene per forza utilizzata la RAM per memorizzarla e viene anche dichiarata pubblica quindi non eliminata se non utilizzata dal compilatore.
Se si aggiunge la keyword "const":
- Codice: Seleziona tutto
const int PIN_LED = 13;
adesso è una costante, il compilatore la utilizzerà come una costante ma verrà comunque istanziata in RAM perché è dichiarata pubblica.
Se si aggiunge la keyword "static":
- Codice: Seleziona tutto
static const int PIN_LED = 13;
è sempre una costante, ma è stata dichiarata privata. Se il compilatore non la utilizzerà come una variabile in memoria RAM non verrà istanziata con risparmio di memoria.
Esiste un altro modo per dichiarare una costante è utilizzare "enum" ma evito di spigarlo, si complica solo le cose e poi è usato raramente.
Come ultima cosa aggiungo che il "define" non viene specificato il tipo e ha una maggior compatibilità col C. L'uso di "static const <type>" viene specificato il tipo, quindi il compilatore ha un controllo maggiore in C++ visto che in C si hanno delle limitazioni ad usarlo.