Qual é o código mais curto para gravar diretamente em um endereço de memória em C / C ++?

Estou escrevendo código no nível do sistema para um sistema incorporado sem proteção de memória (em um ARM Cortex-M1, compilando com o gcc 4.3) e preciso ler / gravar diretamente em um registro mapeado na memória. Até agora, meu código fica assim:

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

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

Existe alguma maneira mais curta (mais curta no código, quero dizer) que não use um ponteiro? Eu estou procurando uma maneira de escrever o código de atribuição real tão curto quanto este (seria bom se eu tivesse que usar mais # define):

*(UART0CTL) &= ~1;

Qualquer coisa que eu tentei até agora acabou com o gcc reclamando que não podia atribuir algo ao lvalue ...

questionAnswers(6)

yourAnswerToTheQuestion