Tengo que programar registros periféricos en un microcontrolador basado en ARM9.#define vs. enums para direccionar periféricos
Por ejemplo, para el USART, almaceno las direcciones de memoria correspondientes en un enum
:
enum USART
{
US_BASE = (int) 0xFFFC4000,
US_BRGR = US_BASE + 0x16,
//...
};
Entonces, utilizar punteros en una función para inicializar los registros:
void init_usart (void)
{
vuint* pBRGR = (vuint*) US_BRGR;
*pBRGR = 0x030C;
//...
}
Pero mi el maestro dice que es mejor que use #define
s, como:
#define US_BASE (0xFFFC4000)
#define US_BRGR (US_BASE + 0x16)
#define pBRGR ((vuint*) US_BRGR)
void init_usart (void)
{
*pBRGR = 0x030C;
}
Como tal, dice, usted no tiene la sobrecarga de asignar punteros a la pila.
Personalmente, no me gusta #define
s, ni otras directivas de preprocesador. Entonces, la pregunta es, en este caso particular, ¿vale la pena usar #define
s en lugar de enum
sy los punteros asignados a la pila?
pregunta relacionada: Want to configure a particular peripheral register in ARM9 based chip
Me sorprendería que en una compilación que no es de depuración, el código generado por el compilador sea diferente. –
Odio a los profesores que solo dicen: "Usa esto", por lo que los estudiantes más tarde tienen que cavar por razones. Por lo general, esos maestros no conocen las respuestas por sí mismos. – Andrey
Si define los punteros como estáticos, no se asignarán a la pila. Si también los declaras const, entonces ni siquiera pueden causar que se asigne memoria en el área de datos (pero esto dependerá del compilador específico que estés usando) –