Puntero a una dirección fija específica

¿Cómo se asigna una dirección de memoria específica a un puntero?

Los Registros de funciones especiales en un microcontrolador como AVR m128 tienen direcciones fijas, el AVR GCC define el SFR en el archivo de encabezado io.h, pero quiero manejarlo yo mismo.

Claro, no hay problema Puede asignarlo directamente a una variable:

volatile unsigned int *myPointer = (volatile unsigned int *)0x12345678; 

Lo que suelo hacer es declarar una macro de E / S mapeada en memoria:

 #define mmio32(x) (*(volatile unsigned long *)(x)) 

Y luego defino mis registros en un archivo de encabezado:

 #define SFR_BASE (0xCF800000) #define SFR_1 (SFR_BASE + 0x0004) #define SFR_2 (SFR_BASE + 0x0010) 

Y luego úselos:

 unsigned long registerValue = mmio32(SFR_1); // read mmio32(SFR2) = 0x85748312; // write