Sto scrivendo il codice a livello di sistema per un sistema embedded senza protezione della memoria (su un ARM Cortex-M1, compilando con gcc 4.3) e ho bisogno di leggere/scrivere direttamente in un registro mappato in memoria. Finora, il mio codice è simile al seguente:Qual è il codice più breve per scrivere direttamente su un indirizzo di memoria in C/C++?
#define UART0 0x4000C000
#define UART0CTL (UART0 + 0x30)
volatile unsigned int *p;
p = UART0CTL;
*p &= ~1;
C'è un modo più breve (più breve in codice, voglio dire) che non utilizza un puntatore? Io alla ricerca di un modo per scrivere il codice vero e proprio incarico più breve questo (sarebbe bene se ho dovuto usare più #defines):
*(UART0CTL) &= ~1;
Tutto ciò che ho provato finora è conclusa con gcc lamentano che poteva non assegnare qualcosa al lvalue ...
'#define UART0CT' a' X' #define? –
@ The Machine Charmer: +1, divertente. Non penso che l'OP significhi più breve in un modo di giocare al golf, ma, bello. :-) –
Standard C * richiede * un cast esplicito in ordetr per assegnare un intero diverso da zero al puntatore. Il tuo codice, nella sua forma attuale, è valido solo in GCC, ma è rotto dal punto di vista C pedante. Quindi, che tu lo voglia o meno, dovrai allungarlo se vuoi davvero mantenerlo valido C. Naturalmente, se vuoi una soluzione specifica per GCC, è una storia diversa. – AnT