¿Cuál es el código más corto para escribir directamente en una dirección de memoria en C / C ++?

Estoy escribiendo código de nivel de sistema para un sistema integrado sin protección de memoria (en un ARM Cortex-M1, compilando con gcc 4.3) y necesito leer / escribir directamente en un registro mapeado en memoria. Hasta ahora, mi código se ve así:

#define UART0     0x4000C000
#define UART0CTL  (UART0 + 0x30)

volatile unsigned int *p;
p = UART0CTL;
*p &= ~1;

¿Hay alguna forma más corta (más corta en código, quiero decir) que no use un puntero? Estoy buscando una manera de escribir el código de asignación real tan corto como este (estaría bien si tuviera que usar más #defines):

*(UART0CTL) &= ~1;

Todo lo que intenté hasta ahora terminó con gcc quejándose de que no podía asignar algo al valor ...

Respuestas a la pregunta(6)

Su respuesta a la pregunta