Ich schreibe System-Level-Code für ein Embedded-System ohne Speicherschutz (auf einem ARM Cortex-M1, Kompilieren mit gcc 4.3) und muss direkt in ein Memory-Mapped-Register lesen/schreiben. Bisher sieht mein Code wie folgt aus:Wie lautet der kürzeste Code zum direkten Schreiben auf eine Speicheradresse in C/C++?
#define UART0 0x4000C000
#define UART0CTL (UART0 + 0x30)
volatile unsigned int *p;
p = UART0CTL;
*p &= ~1;
Gibt es einen kürzeren Weg (kürzer in Code, ich meine), die nicht einen Zeiger nicht verwenden? Ich nach einer Möglichkeit, den tatsächlichen Zuordnung Code so kurz wie dies zu schreiben (es wäre in Ordnung, wenn ich mehr #defines habe zu verwenden):
*(UART0CTL) &= ~1;
Alles, was ich versuchte, so weit endet mit gcc beschweren, dass es könnte nicht etwas zu dem L-Wert zuweisen ...
'#define UART0CT' zu' #define X'? –
@The Machine Charmer: +1, lustig. Ich glaube nicht, dass das OP in einer Code-Golf-Mode kürzer gemeint ist, aber, schön. :-) –
Standard C * erfordert * eine explizite Umwandlung in ordetr, um dem Zeiger eine Ganzzahl ungleich Null zuzuweisen. Ihr Code ist in seiner aktuellen Form nur in GCC gültig, aber aus pedantischer C Sichtweise gebrochen. Also, ob Sie es wollen oder nicht, Sie müssen es länger machen, wenn Sie es wirklich als gültig behalten wollen. Natürlich, wenn Sie eine GCC-spezifische Lösung wollen, ist es eine andere Geschichte. – AnT