Supongo que está utilizando un AVR de Atmel con avr-libc
basado en los nombres de registro. En cuyo caso, si se refiere al directorio <libc>\include\avr\
, encontrará archivos con el nombre del procesador. Por ejemplo, si toma el ATMega328p, hay un archivo llamado iom328p.h
. En su interior encontramos un montón de cosas como:
#define DDRD _SFR_IO8(0x0A)
#define DDD0 0
#define DDD1 1
#define DDD2 2
Observe que DDRD no es más que una dirección especial para el registro DDRD. Imagine tener que crear un puntero a ese registro y buscar su dirección cada vez. Es mucho más fácil # definirlo con un nombre legible.
Considere que desea escribir en el tercer bit en el registro DDRD
. Puedes hacer lo siguiente:
DDRD |= 1<<2;
DDRD |= 4
DDRD |= 1<<DDD2;
Notarás que DDD2
es simplemente # definido como el número 2, por lo que es idéntico a las otras líneas. Sin embargo, es mucho más legible, especialmente si desea consultar la hoja de datos que utiliza los mismos nombres para los bits.
Puede que te preguntes: ah, pero nunca querré buscar un poco así, ya que sé que es 2. Bueno, considera otro ejemplo. Vamos a tomar los temporizadores. Tenemos por ejemplo:
#define TCCR0B _SFR_IO8(0x25)
#define CS00 0
#define CS01 1
#define CS02 2
#define WGM02 3
#define FOC0B 6
#define FOC0A 7
Ahora digamos que queremos configurar el bit WGM02 para que sea un 1. Podríamos hacer cualquiera de las siguientes acciones:
TCCR0B |= 1 << 3;
TCCR0B |= 8;
Pero esos son muy ilegibles, ridículamente. ¿Quién sabe qué 1 < < 3 está en el registro, tendríamos que buscarlo en la hoja de datos. Por otro lado:
TCCR0B |= 1 << WGM02;
es inmediatamente obvio qué bit está configurando.
Además, hay un elemento de portabilidad aquí. Muchos de los AVR tienen el mismo módulo de temporizador pero tienen bits en diferentes lugares: WGM02 podría estar en el bit 1 en otro AVR, por ejemplo.
Si luego se mudó a un dispositivo diferente, tendría que revisar cada número mágico aleatorio, buscar en la hoja de datos antigua a qué bit corresponde, hacer coincidir eso con la hoja de datos nueva y cambiar la constante. Mientras que si usas #define, sabrás qué bit es sin mirar la hoja de datos anterior, y es posible que no tengas que cambiarlo porque el nuevo #define se encargará de ello.
TL; DR; Estás pensando demasiado sobre las cosas. Se hace únicamente por pulcritud y para que sea más fácil seguir las cosas, no más difícil.