risparmiare ram

leo72:
Da prove che ho fatto in passato, usare un #define o un const byte per un pin è del tutto equivalente. Il compilatore ottimizza e l'impegno di ram finale dello sketch è identico sia usando la prima che la seconda soluzione.

Vero però c'è una differenza sostanziale tra i due metodi, se usi un const viene creata una variabile di tipo costante sfruttando la flash, se usi #define viene sostituito il valore in fase di compilazione direttamente nell'espressione.
Utilizzando const il codice è di questo tipo

const byte pin 13;
digitalWrite(pin, HIGH);

Utilizzando "#define pin 13" la digitalWrite, dopo la compilazione, diventa equivalente a:

digitalWrite(13, HIGH);

Anche se la differenza può sembrare minima, quasi inutile, in realtà cambia molto a livello di run time perché nel primo caso il codice deve indirizzare una variabile per recuperare il valore di pin, nel secondo caso il valore è subito disponibile nel codice assembly senza doverlo recuperare, questo si traduce in diversi cicli macchina risparmiati e di conseguenza un codice più veloce.
Da notare che per accedere ad un valore posto nella flash è necessario utilizzare l'istruzione LPM (load Program Memory) che aggiunge un ulteriore overhead di cicli macchina per il recupero del valore di una variabile.