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 ...